function trimText(text){
    return text.replace(/^\s+|\s+$/g, "");
}

function validateBid(bid){
    var regex = /^-?\d+$/;
    return regex.test(bid);
}

function deactivateBidBtn() {
    //deactivate bid button
    var submitBtn = document.getElementById('btnBid');
    submitBtn.disabled = true;
    YAHOO.util.Dom.addClass(submitBtn, "disabled");
}

function activateBidBtn() {
    //activate bid button
    var submitBtn = document.getElementById('btnBid');
    submitBtn.disabled = false;
    YAHOO.util.Dom.removeClass(submitBtn, "disabled");
}

function displayGameDetails(){

    var gameList = YAHOO.util.Dom.getElementsByClassName("bidBoxGame", "li", "bidEntryBody");
    var numGames = gameList.length;
    for(var g=0;g<numGames;g++) {
        //hide all game descriptions
        gameList[g].style.display="none";
    }

    YAHOO.util.Dom.removeClass("bidEntryBody", "playBg"); //remove default background image
    YAHOO.util.Dom.setStyle("txtComp", "visibility", "hidden"); //hide compliance text
    YAHOO.util.Dom.setStyle("game_"+this.value, "display", ""); //display selected game description

}

function displayBidForm(e){

    if (e) {
        YAHOO.util.Event.preventDefault(e);
    }

    YAHOO.util.Dom.setStyle("bidResultBody", "display", "none"); //hide bid results
    YAHOO.util.Dom.setStyle("bidBoxHdr", "visibility", "visible"); //display drop-down menu on homepage

    activateBidBtn();

    YAHOO.util.Dom.setStyle("bidEntryBody", "display", ""); //display bid entry
    document.getElementById('bidInput').focus();

}

function updateDisplayBidResults(result){

    if (result.moveResponse.header != undefined){
        document.getElementById('bidResultHdr').innerHTML=result.moveResponse.header; //update bid results header
        YAHOO.util.Dom.setStyle("bidResultHdr", "display", ""); //display bid results header
    }else{
        YAHOO.util.Dom.setStyle("bidResultHdr", "display", "none"); //hide bid results header
    }

    if (result.moveResponse.message != undefined){
        document.getElementById('bidResultMsg').innerHTML=result.moveResponse.message; //update bid results message
        YAHOO.util.Dom.setStyle("bidResultMsg", "display", ""); //display bid results message
    }else{
        YAHOO.util.Dom.setStyle("bidResultMsg", "display", "none"); //hide bid results message
    }

    if (result.moveResponse.hint != undefined){
        document.getElementById('bidResultHint').innerHTML=result.moveResponse.hint; //update bid results hint
        YAHOO.util.Dom.setStyle("bidResultHint", "display", ""); //display bid results message
    }else{
        YAHOO.util.Dom.setStyle("bidResultHint", "display", "none"); //hide bid results message
    }

    displayBidResults();

}

function displayBidResults(){

    YAHOO.util.Dom.setStyle("bidBoxHdr", "visibility", "hidden"); //hide drop-down menu on homepage
    YAHOO.util.Dom.setStyle("bidEntryBody", "display", "none"); //hide bid entry
    YAHOO.util.Dom.setStyle("bidResultBody", "display", ""); //display bid results

    document.bidBox.bidInput.value=""; //clearing bid value from input field
}

function submitBid(){

    deactivateBidBtn();

    var formEl = document.getElementById('bidBox');
    var auctionId;
    if(document.getElementById("bidEntryHdr")){ //check to see if drop-down menu exists
        var menuEl = document.getElementById("bidEntryHdr");
        var menuIndex = menuEl.selectedIndex;
        auctionId = menuEl[menuIndex].value;
    }else if(document.getElementById('bidBoxAuctionId')){ //else check if hidden input of current auction exists
        auctionId = document.getElementById('bidBoxAuctionId').value;
    }
    var bid = trimText(formEl.bidInput.value);

    // validate bid entry
    if(bid==undefined || bid==null || bid==""){ //check for null or undefined bid        
        document.getElementById('bidResultHdr').innerHTML="Um, invalid entry."; //update bid results header
        YAHOO.util.Dom.setStyle("bidResultHdr", "display", ""); //display bid results header
        document.getElementById('bidResultMsg').innerHTML="Sorry, we didn't detect a guess. In the form, please enter a whole number between 1 and 999999 with no decimals."; //update bid results message
        YAHOO.util.Dom.setStyle("bidResultMsg", "display", ""); //display bid results message
        YAHOO.util.Dom.setStyle("bidResultHint", "display", "none"); //hide bid results message
        displayBidResults();
        return;
    }else if(!validateBid(bid)){ //check for non-numeric bid
        document.getElementById('bidResultHdr').innerHTML="Um, invalid entry."; //update bid results header
        YAHOO.util.Dom.setStyle("bidResultHdr", "display", ""); //display bid results header
        document.getElementById('bidResultMsg').innerHTML="Submit a whole number between 1 and 999999 with no decimals."; //update bid results message
        YAHOO.util.Dom.setStyle("bidResultMsg", "display", ""); //display bid results message
        YAHOO.util.Dom.setStyle("bidResultHint", "display", "none"); //hide bid results message
        displayBidResults();
        return;
    }

    var sUrl = '/web/bidlite/bid.do?auctionId='+auctionId+'&bidAmount='+bid;

    var bidAJAXResponse = {
        success : function (o) {
            var result = YAHOO.lang.JSON.parse(o.responseText);
            var status = result.status;
            if(status == "success"){

                if(result.nextStep!=undefined && result.nextStep=="bid_result"){
                    updateDisplayBidResults(result);
                }else if(result.nextStep != undefined && result.nextStep == "upgrade") {
                    updateAndDisplayLightbox('/nodecorate/lightboxUpgrade.do', 'medium');

                    //store attributes as hidden fields
                    document.getElementById("signupAuctionId").value = auctionId;
                    document.getElementById("signupBidAmount").value = bid;

                    activateBidBtn();
                }

            } else {
                if(result.nextStep != undefined && result.nextStep == "login") {
                    updateAndDisplayLightbox('/nodecorate/lightboxLogin.do', 'medium');

                    //store attributes as hidden fields
                    document.getElementById("signupAuctionId").value = auctionId;
                    document.getElementById("signupBidAmount").value = bid;

                    activateBidBtn();
                }
            }
        },
        failure: function(o) { },
        cache:false
    };

    YAHOO.util.Connect.asyncRequest('GET', sUrl, bidAJAXResponse);

}

function selectBidBox(e, element, container){
    YAHOO.util.Event.preventDefault(e);
    var previouslySelectedTab = document.getElementById('bidTabOn');
    if (previouslySelectedTab) {
        YAHOO.util.Dom.setAttribute(previouslySelectedTab, "id", "");
    } else {
        YAHOO.util.Dom.setAttribute(document.getElementById('tabPlayNow').parentNode, "id", "");        
    }
    YAHOO.util.Dom.setAttribute(element.parentNode, "id", "bidTabOn");
    if (element.id == "tabPlayNow") {
        YAHOO.util.Dom.setStyle(document.getElementById('bidBoxHowToWin'), "display", "none");
        YAHOO.util.Dom.setStyle(document.getElementById('bidBoxStatus'), "display", "none");
        displayBidForm(null);
    }
    else if (element.id == "tabHow") {
        YAHOO.util.Dom.setStyle(document.getElementById('bidEntryBody'), "display", "none");
        YAHOO.util.Dom.setStyle(document.getElementById('bidResultBody'), "display", "none");
        YAHOO.util.Dom.setStyle(document.getElementById('bidBoxHdr'), "visibility", "hidden");
        YAHOO.util.Dom.setStyle(document.getElementById('bidBoxStatus'), "display", "none");
        YAHOO.util.Dom.setStyle(document.getElementById('bidBoxHowToWin'), "display", "");
    }
    else if (element.id == "tabStatus") {
        YAHOO.util.Dom.setStyle(document.getElementById('bidEntryBody'), "display", "none");
        YAHOO.util.Dom.setStyle(document.getElementById('bidResultBody'), "display", "none");
        YAHOO.util.Dom.setStyle(document.getElementById('bidBoxHdr'), "visibility", "hidden");
        YAHOO.util.Dom.setStyle(document.getElementById('bidBoxHowToWin'), "display", "none");
        YAHOO.util.Dom.setStyle(document.getElementById('bidBoxStatus'), "display", "");
        updateStatus();
    }
}

function updateStatus() {
    var sUrl = '/web/bidlite/userAuctions.do';

    var bidAJAXResponse = {
        success : function (o) {
            var result = YAHOO.lang.JSON.parse(o.responseText);
            var status = result.status;
            var bidBoxStatusTableBody = document.getElementById('bidBoxStatusTableBody');
            var children = YAHOO.util.Dom.getChildren(bidBoxStatusTableBody);
            var bidBoxStatusMsg = document.getElementById('bidBoxStatusMsg');
            var bidBoxStatusTable = document.getElementById('bidBoxStatusTable');
            for (var i=0; i < children.length; i++) {
                bidBoxStatusTableBody.removeChild(children[i]);
            }
            if(status){
                YAHOO.util.Dom.setStyle(bidBoxStatusTable, "display", "");
                YAHOO.util.Dom.setStyle(bidBoxStatusMsg, "display", "none");
                var auctions = result.auctions;
                if (auctions) {
                    for (var i in auctions) {
                        var tr = document.createElement("tr");
                        bidBoxStatusTableBody.appendChild(tr);
                        var td = document.createElement("td");
                        tr.appendChild(td);
                        td.appendChild(document.createTextNode(auctions[i].name));
                        td = document.createElement("td");
                        tr.appendChild(td);
                        td.appendChild(document.createTextNode(auctions[i].endDate));
                    }
                }

            } else {
                YAHOO.util.Dom.setStyle(bidBoxStatusTable, "display", "none");
                YAHOO.util.Dom.setStyle(bidBoxStatusMsg, "display", "");
                bidBoxStatusMsg.innerHTML = result.msg;
            }
        },
        failure: function(o) { },
        cache:false
    };
    var bidBoxStatusMsg = document.getElementById('bidBoxStatusMsg');
    var bidBoxStatusTable = document.getElementById('bidBoxStatusTable');
    YAHOO.util.Dom.setStyle(bidBoxStatusTable, "display", "none");
    YAHOO.util.Dom.setStyle(bidBoxStatusMsg, "display", "");
    bidBoxStatusMsg.innerHTML = "Checking Status...";

    YAHOO.util.Connect.asyncRequest('GET', sUrl, bidAJAXResponse);
}

YAHOO.util.Event.onDOMReady(function(){

    //if bidbox exists on page, set listeners
    if(document.getElementById('bidBox')){
        document.getElementById('bidInput').focus();
        YAHOO.util.Event.addListener("btnCont", "click", displayBidForm);
        YAHOO.util.Event.addListener("bidEntryHdr", "change", displayGameDetails);
        YAHOO.util.Event.delegate("bidBoxTabs", "click", selectBidBox, "a");
    }

});
