﻿/// <reference name="MicrosoftAjax.js"/>
/// <reference  path="~/_webservices/WQLNStore.asmx"/>

/*Generic Connectivity Testing*/
var total;
var tax;
var subtotal;
var txnID;
function fireHelloWorld() {
    /// <summary>This method is a test</summary>
    /// <returns>string</returns>
    WQLNStore.HelloWorld(hello,OnServiceFail)
}
function hello(result, userContext, methodName) {
    alert(result)
}
/*Generic WebService Error Handler*/
function OnServiceFail(error, userContext, methodName) {    
    ///<summary>Raise alert of error.</summary>
    alert(error.get_message() + "\n" + userContext + "\n" + methodName);
}
/*Begin Store Code*/
function getItemsForSale(storeID) {
    ///<summary>Get Catalog from Database for form</summary>
    WQLNStore.getInventoryForStore(storeID,buildCatalog,OnServiceFail)
}
function buildCatalog(results, userContext, methodName) {
    ///<summary>Parse Catalog results</summary>
    for (var z = 0; z < results.length; z++) {
        addCatalogItemToForm(results[z], z);
    }
}
function addCatalogItemToForm(item, index) {
    var catGroup = document.getElementById("catGroup_" + item.Type);
    var catItems = document.getElementById("catItems_" + item.Type);
    if (!catGroup) {
        catGroup = document.createElement("div");
        catGroup.id = "catGroup_" + item.Type;
        catGroup.className = "title";
        catGroup.innerHTML = item.ItemType;
        catItems = document.createElement("div");
        catItems.id="catItems_" + item.Type;
        document.getElementById("catalog").appendChild(catGroup);
        document.getElementById("catalog").appendChild(catItems);
    }
    var catItem = document.getElementById("catItem_" + item.id);
    
    if (!catItem) {
        catItem = document.createElement("div");
        catItem.id = "catItem_" + item.id;
        catItem.className = (index%2==1?"OddItem":"EvenItem");
        var catItemName = document.createElement("span");
        catItemName.id = "catItemName_" + item.id;
        catItemName.className = "description";
        catItemName.innerHTML =  item.name ;
        if (item.subtype == 3) {
            catItemName.innerHTML += " " + item.description;
        }
        catItem.appendChild(catItemName);
        catItems.appendChild(catItem);
        var catItemQtyOrder = document.createElement("span");
        catItemQtyOrder.id = "catItemQtyOrder_" + item.id;
        catItemQtyOrder.innerHTML = "<input id='qtyOrdered_" + item.id + "' class='qtyOrdered' value='0' onchange='updateTotal();'>";
        catItem.appendChild(catItemQtyOrder);
        var catItemPriceGLAR = document.createElement("span");
        var catItemPrice = document.createElement("span");
        var catItemGL = document.createElement("span");
        var catItemAR = document.createElement("span");
        var catItemTaxable = document.createElement("span");
        catItemPriceGLAR.id = "catItemPriceGLAR_" + item.id;
        catItemPrice.innerHTML = "<input type='hidden' value='" + item.price + "' id='catItemPrice_" + item.id + "' />";
        catItemGL.innerHTML = "<input type='hidden' value='" + item.gl_Number + "' id='catItemGL_" + item.id + "' />";
        catItemAR.innerHTML = "<input type='hidden' value='" + item.arNumber + "' id='catItemAR_" + item.id + "' />";
        catItemTaxable.innerHTML = "<input type='hidden' value='" + item.taxable + "' id='catItemTaxable_" + item.id + "' />";
        catItemPriceGLAR.innerHTML = "<strong>x $" + item.price +"</strong>"; 
        catItemPriceGLAR.appendChild(catItemPrice);
        catItemPriceGLAR.appendChild(catItemGL);
        catItemPriceGLAR.appendChild(catItemAR);
        catItemPriceGLAR.appendChild(catItemTaxable);
        catItem.appendChild(catItemPriceGLAR);
        //if(querySt("tst")=="1"){
            WQLNStore.imageExists(item.id, imageScript, OnServiceFail, "catItemName_" + item.id);
       // }
    }
}
function imageScript(result, userContext, method) {
    if (result) {
        //alert(userContext);
        document.getElementById(userContext).innerHTML = document.getElementById(userContext).innerHTML + '<br><a href="javascript:void(0);" onmouseover="showImage(' + String.fromCharCode(39) + "Images_" + userContext.split("_")[1]  + String.fromCharCode(39) + ');">Image</a><div id="Images_' + userContext.split("_")[1] + '" class="ImageHolder" style="display:none"></div>';
    }
}
function showImage(elem) {
    WQLNStore.imageList(elem.split("_")[1], loadImages, OnServiceFail, elem);

}
function loadImages(results, userContext, method) {
    document.getElementById(userContext).innerHTML = "";
    for (var i = 0; i < results.length; i++) {
        document.getElementById(userContext).innerHTML += "<img src='/StoreImages/" + results[i] + "' alt='" + results[i].split("_")[1] + "'/><br>";

    }
    document.getElementById(userContext).innerHTML += "<a href='javascript:void(0);' onclick='this.parentNode.style.display=" + String.fromCharCode(34) + "none" +String.fromCharCode(34) + ";'>Close</a>";
    document.getElementById(userContext).style.display = "";
}
function getARNumber(){
    var elems = document.getElementsByTagName("input");
    var ar = ""
    for (var z = 0; z < elems.length; z++) {
        if(elems[z].id.split("_")[0]=="catItemAR"){
            ar = elems[z].value;
            break;      
        }
    }
    return ar;
}
function checkZip() {
    WQLNStore.lookupZip(document.getElementById("Zip").value, zipFound, OnServiceFail);
}
function zipFound(result, usercontext, methodname) {
    if (result.length > 0) {
        document.getElementById("City").value = result[0].City;
        document.getElementById("State").value = result[0].State;
    }
    getTaxRate();
}
function getTaxRate() {
    WQLNStore.getTaxRate(document.getElementById("State").value, taxfound, OnServiceFail)
}
function taxfound(result, usercontext, methodname) {
    var tax = 0
    if (result.length > 0) {
        tax = result[0].rate;
    }
    document.getElementById("taxrate").value = tax
    updateTotal();
}
function updateTotal() {
    var elems = document.getElementsByTagName("input");
    total = 0.00;
    tax = 0.00;
    subtotal = 0.00;
    for (var i = 0; i < elems.length; i++) {
        if (elems[i].className == "qtyOrdered") {
            if (!isNaN(parseFloat(elems[i].value))) {
                var id = elems[i].id.split("_")[1]
                subtotal += (parseFloat(elems[i].value) * parseFloat(document.getElementById("catItemPrice_" + id).value));
                tax += (parseFloat(elems[i].value) * parseFloat(document.getElementById("catItemPrice_" + id).value)) * (parseFloat(document.getElementById("catItemTaxable_" + id).value) * parseFloat(document.getElementById("taxrate").value))                
            }
        }
    }
    tax = Math.round(tax * 100) / 100
    total = parseFloat(subtotal) + parseFloat(tax);
    document.getElementById("subtotal").innerHTML = formatCurrency(subtotal);
    document.getElementById("tax").innerHTML = formatCurrency(tax);
    document.getElementById("total").innerHTML = formatCurrency(total);
}
function formatCurrency(val) {
    var retval = String(Math.round(val * 100));
    if (val == 0) {
        retval = "0.00";
    } else {
        retval = retval.substr(0, retval.length-2) + "." + retval.substr(retval.length-2, 2);
    }
    return retval;
}
function paymentProcess() {
    document.getElementById("submit").disabled = "true";
    if (validateForm()) {
        if (document.getElementById("Card_Number").value == '4111111111111111') {
            pay.sendBasicPaymentCVMa(document.getElementById("Full_Name").value, document.getElementById("Address").value, "", document.getElementById("City").value, document.getElementById("State").value, document.getElementById("Phone").value, document.getElementById("Zip").value, document.getElementById("Address").value, document.getElementById("Card_Number").value, document.getElementById("Expire_Month").value, document.getElementById("Expire_Year").value, total, document.getElementById("CIV").value, getARNumber(), null, 1, paymentProcessed, OnServiceFail);
        } else {
            pay.sendBasicPaymentCVMa(document.getElementById("Full_Name").value, document.getElementById("Address").value, "", document.getElementById("City").value, document.getElementById("State").value, document.getElementById("Phone").value, document.getElementById("Zip").value, document.getElementById("Address").value, document.getElementById("Card_Number").value, document.getElementById("Expire_Month").value, document.getElementById("Expire_Year").value, total, document.getElementById("CIV").value, getARNumber(), null, 0, paymentProcessed, OnServiceFail);
        }
    } else {
    document.getElementById("submit").disabled = "";
    }
    
}
function paymentProcessed(result,usercontext,methodName) {
    if (getElemVal(result, "r_approved") == "APPROVED") {
        buildTxnHeader(getElemVal(result, "r_time"), getElemVal(result, "r_ordernum"));
    } else {
        var error = getElemVal(result, "r_error");
        switch (error) {
        case "SGS-002303: Invalid credit card number.":
            document.getElementById("Card_Number").focus();
            alert("I'm sorry the credit card number is invalid, would you mind verifying it?");
            break;
        case "SGS-002304: Credit card is expired.":
            document.getElementById("Expire_Month").focus();
            alert("I'm sorry it appears the credit card has expired, would you mind verifying the expiration date?");
            break;
        case "SGS-005005: Duplicate transaction.":
            alert(error + "\n Please see supervisor with error.");
            break;
        default:
            alert(error + "\n Please see supervisor with error.");
            break;
        }    
    }
    document.getElementById("submit").disabled = "";
}
function buildTxnHeader(dte, ccordernum) {
    
    WQLNStore.addTxnHeaderLine(0, 0, document.getElementById("Name_on_Card").value, document.getElementById("Address").value, document.getElementById("City").value, document.getElementById("State").value, document.getElementById("Zip").value, document.getElementById("Phone").value, document.getElementById("Email").value, document.getElementById("Card_Number").value.substring(document.getElementById("Card_Number").value.length - 5), document.getElementById("Expire_Month").value, document.getElementById("Expire_Year").value, document.getElementById("Cid"), getARNumber(), dte, total, ccordernum, buildTxnLines, OnServiceFail)    
}
function buildTxnLines(result, usercontext, methodname) {
    //alert('ehre');
    if (result.length > 0) {
        var txnHeadID = result[0].txnID
        txnID = txnHeadID;
        var elems = document.getElementsByTagName("input");
        var linecount =1
        for (var i = 0; i < elems.length; i++) {
            if (elems[i].className == "qtyOrdered") {
                
                var id = elems[i].id.split("_")[1]
                if (parseInt(elems[i].value) > 0) {
                   // alert(id)
                    WQLNStore.addTxnLineItem(txnHeadID, linecount, id, document.getElementById("catItemName_" + id).innerHTML, document.getElementById("qtyOrdered_" + id).value, document.getElementById("catItemPrice_" + id).value, document.getElementById("catItemGL_" + id).value, txnLineAdded, OnServiceFail);
                    linecount++;
                }
            }
        }
        WQLNStore.addTxnTaxLineItem(txnHeadID, linecount, "Sales Tax", tax, taxAdded, OnServiceFail);
    }
}

function txnLineAdded(result, usercontext, methodname) {
}
function taxAdded(result, usercontext, methodname) {
    
    document.location = "receipt.aspx?txnID=" + txnID;
}
function getElemVal(txt, trgt) {
    var resultArray = txt.split("><");
    var retval = "";
    for (var z = 0; z < resultArray.length; z++) {
 
        try {
            if (resultArray[z].split(">")[0] == trgt) {
               
                try{
                    if (resultArray[z].split(">")[1].split("<")[0] != "") {
                        retval = resultArray[z].split(">")[1].split("<")[0];
                    }   
                }catch(e){}     
        }
        } catch (e) {}
    }
    return retval;
}
function validateForm() {
    var aryElems = new Array("Full_Name", "Address", "Zip", "City", "State", "Phone", "Email", "Expire_Month", "Expire_Year", "Name_on_Card", "Card_Number", "CIV");
    var firstElem = -1;
    var retString = "";
    var retval = true;
    for (var z = 0; z < aryElems.length; z++) {
        if (document.getElementById(aryElems[z]).value == "") {
            retString += "- " + aryElems[z] + "\n";
            if (firstElem == -1) {
                firstElem = z;
            }
        }
    }
    if (firstElem != -1) {
        alert("You must enter valid data into:\n" + retString);
        document.getElementById(aryElems[firstElem]).focus();
        retval = false;
    }
    return retval;
}
function test(result,usercontext,methodname){
    alert(result);
}
function querySt(ji) {
    hu = window.location.search.substring(1);
    gy = hu.split("&");
    for (i = 0; i < gy.length; i++) {
        ft = gy[i].split("=");
        if (ft[0] == ji) {
            return ft[1];
        }
    }
}
function getReceiptData() {
    ///<summary>Get Catalog from Database for form</summary>
    WQLNStore.getReceipt(querySt("txnID"), buildReceipt,OnServiceFail)
}
function buildReceipt(results, userContext, methodName) {
    ///<summary>Parse Catalog results</summary>
    for (var z = 0; z < results.length; z++) {
        addReceiptToPage(results[z], z);
    }
}
function addReceiptToPage(item, index) {
    var catGroup = document.getElementById("receiptHeader");
    var catItems = document.getElementById("rctItems");
    var dte = new Date()
    //dte.to
    if (!catGroup) {
        catGroup = document.createElement("div");
        catGroup.id = "receiptHeader";
        catGroup.className = "header";
        catGroup.innerHTML = item.name + "<br />" + item.address + "<br />" + item.city + ", " + item.state + " " + item.zip + "<br/><br/>On Card: ..." + item.ccNum.substr(item.ccNum.length - 4) +"<br>REF#: " + item.cctxn + "<br/><br/>" + item.dteTime.toLocaleDateString() + ", " + item.dteTime.toLocaleTimeString() + "<br/><br/>";
        catItems = document.createElement("div");
        catItems.id = "rctItems";
        document.getElementById("catalog").appendChild(catGroup);
        document.getElementById("catalog").appendChild(catItems);
    }
    var catItem = document.getElementById("rctItem_" + item.item_id);
    if (!catItem) {
        if (item.item_id != -1) {
            catItem = document.createElement("div");
            catItem.id = "rctItem_" + item.item_id;
            catItem.className = (index % 2 == 1 ? "OddItem" : "EvenItem");
            var catItemName = document.createElement("span");
            catItemName.id = "rctItemName_" + item.item_id;
            catItemName.className = "description";
            catItemName.innerHTML = item.Expr1;
            catItem.appendChild(catItemName);
            catItems.appendChild(catItem);
            var catItemQtyOrder = document.createElement("span");
            catItemQtyOrder.id = "rctItemQtyOrder_" + item.item_id;
            catItemQtyOrder.innerHTML = item.qty;
            catItem.appendChild(catItemQtyOrder);
            var catItemPriceGLAR = document.createElement("span");
            var catItemPrice = document.createElement("span");
            catItemPriceGLAR.id = "catItemPriceGLAR_" + item.item_id;
            catItemPrice.innerHTML = formatCurrency(item.lineTotal);
            catItemPriceGLAR.innerHTML = "x$" + formatCurrency(item.price) + ".......";
            catItemPriceGLAR.appendChild(catItemPrice);
            catItem.appendChild(catItemPriceGLAR);
        } else {
            document.getElementById("subtotal").innerHTML = formatCurrency(item.paid-item.lineTotal);
            document.getElementById("tax").innerHTML = formatCurrency(item.lineTotal);
            document.getElementById("total").innerHTML = formatCurrency(item.paid);
        }
    }
}
