window.onload = function() {
    GetStatusUpdates();
}

function GetStatusUpdates() {
    // get updates for each item on this page
    // this will be to update the items with their current buying status
    var sBasketGUID = GetBasketGUID();
    var cItemList = document.getElementById('ctl00_ContentPlaceHolder1_lblItemIDList');
    var sItemList;
    if (cItemList) {
        if (document.all) {
            sItemList = cItemList.innerText;
        }
        else {
            sItemList = cItemList.textContent;
        }
        if (sItemList) {
            ExecuteCallback("GetStatusUpdates||" + sBasketGUID + "|0|" + sItemList + "|" );
        }
    }
}

function AddItemToBasket(itemID) {
    // add the item to the basket
    var cBuyQuantity = document.getElementById('buyQuantity_ID' + itemID);
    if (cBuyQuantity) {
        var sBuyQuantity = parseInt(cBuyQuantity.value);
        if (isNaN(sBuyQuantity)) {
            alert("Please specify a valid number of items to purchase.");
            return;
        }
        if (sBuyQuantity < 1) {
            alert("Please specify a valid number of items to purchase.");
            return;
        }
        if (sBuyQuantity > 1000) {
            alert("To purchase more than 1000 items (sufficient stock permitting), these must be added to the basket in quantities of 1000.");
            return;
        }
        cBuyQuantity.value = sBuyQuantity;
    }

    var cItemMessage = document.getElementById('itemSaleStatus_ID' + itemID);
    if (cItemMessage) {
        if (document.all) {
            cItemMessage.innerText = "Checking stock levels....";
        }
        else {
            cItemMessage.textContent = "Checking stock levels....";
        }
    }
    // get the basket ID
    var sBasketGUID = GetBasketGUID();
    var cItemList = document.getElementById('ctl00_ContentPlaceHolder1_lblItemIDList');
    var sItemList;
    if (cItemList) {
        if (document.all) {
            sItemList = cItemList.innerText;
        }
        else {
            sItemList = cItemList.textContent;
        }
    }

    // invoke the callback to perform the task
    ExecuteCallback("AddToBasket|" + itemID + "|" + sBasketGUID + "|" + sBuyQuantity + "|" + sItemList, itemID);
}

function GetBasketGUID() {
    // lookup the basket GUID
    var cBasketGUID = document.getElementById('ctl00_ContentPlaceHolder1_lblBasketGUID');
    var sBasketGUID = "";
    if (cBasketGUID) {
        if (document.all) {
            sBasketGUID = cBasketGUID.innerText;
        }
        else {
            sBasketGUID = cBasketGUID.textContent;
        }
    }
    return sBasketGUID;
}

function CallbackResponseFromServer(returnMessage, itemID) {
    // the returnMessage can be decomposed into the following elements:
    // <action>|<revised stock level>|<status message>|<basket message>|<update message>|<error message>
    // where <new stock level> contains a numeric value of the remaining stock (as a string)
    // and <status message> is a return message for the user

    var sMessages = returnMessage.split('|');
    var sAction = sMessages[0];
    var sStockLevel = sMessages[1];
    var sStatusMessage = sMessages[2];
    var sBasketMessage = sMessages[3];
    var sUpdateMessage = sMessages[4];
    var sErrorMessage = sMessages[5];

    switch (sAction) {
        case "AddToBasket": {
            // remove the stock check text
            var cItemMessage = document.getElementById('itemSaleStatus_ID' + itemID);
            if (cItemMessage) {
                if (document.all) {
                    cItemMessage.innerText = "";
                }
                else {
                    cItemMessage.textContent = "";
                }
            }

            // update the status of items on the page and the basket summary
            UpdateItemsOnPage(sBasketMessage, sUpdateMessage);

            if (sErrorMessage.length > 0) {
                alert(sErrorMessage);
            }
            break;
        }
        case "GetStatusUpdates": {
            // update the basket
            UpdateItemsOnPage(sBasketMessage, sUpdateMessage);

            if (sErrorMessage.length > 0) {
                alert(sErrorMessage);
            }
            break;
        }
    }
}

function UpdateItemsOnPage(sBasketMessage, sUpdateMessage) {
    // update the items on the current page

    var cBasketLink = document.getElementById('ctl00_ContentPlaceHolder1_lnkReviewBasket');
    if (cBasketLink) {
        if (document.all) {
            cBasketLink.innerText = sBasketMessage;
        }
        else {
            cBasketLink.textContent = sBasketMessage;
        }
    }
    if (!sUpdateMessage) {
        return;
    }

    // now apply all the updates to each item
    var sMessageList = sUpdateMessage.split(',');
    var sUpdateList;
    var cControl;
    var sID;
    var sBuyMessage;
    var iQuantityAvailable;
    var sAvailabilityMessage;
    
    if (sMessageList) {
        for (var i = 0; i < sMessageList.length; i++) {
            sUpdateList = sMessageList[i].split("=");
            sID = sUpdateList[0];
            sBuyMessage = sUpdateList[1];
            iQuantityAvailable = sUpdateList[2];
            sAvailabilityMessage = sUpdateList[3];
            
            if (sID.length > 0) {
                cControl = document.getElementById('itemSaleStatus_ID' + sID);
                if (cControl) {
                    if (document.all) {
                        cControl.innerText = sBuyMessage;
                    }
                    else {
                        cControl.textContent = sBuyMessage;
                    }
                }
                cControl = document.getElementById('itemAvailabilityStatus_ID' + sID);
                if (cControl) {
                    if (document.all) {
                        cControl.innerText = sAvailabilityMessage;
                    }
                    else {
                        cControl.textContent = sAvailabilityMessage;
                    }
                }
                if (iQuantityAvailable < 1) {
                    cControl = document.getElementById('buyButton_ID' + sID);
                    if (cControl) {
                        cControl.style.display = 'none';
                    }
                    cControl = document.getElementById('buyQuantity_ID' + sID);
                    if (cControl) {
                        cControl.style.display = 'none';
                    }
                }
            }
        }
    }
}

function ShowPopup(sItemID) {
    var sURL = 'images/items/' + sItemID + '.jpg';
    window.open(sURL,'popupWindow','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,copyhistory=no,width=100,height=100,screenX=150,screenY=150,top=150,left=150');
}
