function cartNotNull(el) {
    var isNull = false;
    if (el.value.length == 0) {
        isNull = true;
    }
    return isNull;
}

function cartInvalidChar(el) {
    var isInvalid = false;
    if ((el.value.indexOf('\'') > -1) || (el.value.indexOf('\\') > -1) || (el.value.indexOf('<') > -1) || (el.value.indexOf('>') > -1) || (el.value[0] == '-')) {
        isInvalid = true;
    }
    return isInvalid;
}

function cartInvalidPCode(el) {
    var isInvalid = false;
    var numStr = '0123456789';
    for (var i = 0; i < el.value.length; i++) {
        if (numStr.indexOf(el[i]) < 0) {
            isInvalid = true;
        }
    }
    return isInvalid;
}

function cartInvalidTel(el) {
    var isInvalid = false;
    if (el.value.length != 14) {
        if ((el.value.length == 11) || (el.value.length == 10)) {
            if (el.value.length == 11)
            {
                var filter = /^(\d{11})$/;
                if (!filter.test(el.value)) {
                    isInvalid = true;
                }
            }
            else if (el.value.length == 10) {
                var filter = /^(\d{10})$/;
                if (!filter.test(el.value)) {
                    isInvalid = true;
                }
            }
        }
        else {
            isInvalid = true;
        }
    }
    else {
        var filter = /^(\d{2})+\-(\d{2})+\-(\d{3})+\-(\d{4})+$/;
        if (!filter.test(el.value)) {
            isInvalid = true;
        }
    }
    return isInvalid;
}

function cartInvalidEmail(el) {
    var isInvalid = false;
    var filter = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
    if (!filter.test(el.value)) {
        isInvalid = true;
    }
    return isInvalid;
}

function validCartStep2() {
    var valid = true;
    var errorArr = [];
    var invalidArr = [];
    var validArr = [];
    var firstNameId = getClientID('firstName');
    var firstName = document.getElementById(firstNameId);
    var lastNameId = getClientID('lastName');
    var lastName = document.getElementById(lastNameId);
    var addressId = getClientID('address');
    var address = document.getElementById(addressId);
    var POBoxId = getClientID('POBox');
    var POBox = document.getElementById(POBoxId);
    var address2Id = getClientID('address2');
    var address2 = document.getElementById(address2Id);
    var cityId = getClientID('city');
    var city = document.getElementById(cityId);
    var provinceId = getClientID('province');
    var province = document.getElementById(provinceId);
    var postalCodeId = getClientID('postalCode');
    var postalCode = document.getElementById(postalCodeId);
    var phoneNumberId = getClientID('phoneNumber');
    var phoneNumber = document.getElementById(phoneNumberId);
    var emailId = getClientID('email');
    var email = document.getElementById(emailId);
    var shipToAnotherAddressId = getClientID('shipToAnotherAddress');
    var shipToAnotherAddress = document.getElementById(shipToAnotherAddressId);
    var address_sId = getClientID('address_s');
    var address_s = document.getElementById(address_sId);
    var POBox_sId = getClientID('POBox_s');
    var POBox_s = document.getElementById(POBox_sId);
    var address2_sId = getClientID('address2_s');
    var address2_s = document.getElementById(address2_sId);
    var city_sId = getClientID('city_s');
    var city_s = document.getElementById(city_sId);
    var province_sId = getClientID('province_s');
    var province_s = document.getElementById(province_sId);
    var postalCode_sId = getClientID('postalCode_s');
    var postalCode_s = document.getElementById(postalCode_sId);

    if (cartNotNull(firstName)) {
        valid = false;
        errorArr.push('First Names field cannot be empty');
        invalidArr.push(firstName.id);
    }
    else if (cartInvalidChar(firstName)) {
        valid = false;
        errorArr.push('First Names field contains invalid character(s)');
        invalidArr.push(firstName.id);
    } else {
        validArr.push(firstName.id);
    }
    if (cartNotNull(lastName)) {
        valid = false;
        errorArr.push('Last Names field cannot be empty');
        invalidArr.push(lastName.id);
    }
    else if (cartInvalidChar(lastName)) {
        valid = false;
        errorArr.push('Last Names field contains invalid character(s)');
        invalidArr.push(lastName.id);
    } else {
        validArr.push(lastName.id);
    }
    if (cartNotNull(address)) {
        valid = false;
        errorArr.push('Address field cannot be empty');
        invalidArr.push(address.id);
    }
    else if (cartInvalidChar(address)) {
        valid = false;
        errorArr.push('Address field contains invalid character(s)');
        invalidArr.push(address.id);
    } else {
        validArr.push(address.id);
    }
    if (cartNotNull(city)) {
        valid = false;
        errorArr.push('City field cannot be empty');
        invalidArr.push(city.id);
    }
    else if (cartInvalidChar(city)) {
        valid = false;
        errorArr.push('City field contains invalid character(s)');
        invalidArr.push(city.id);
    } else {
        validArr.push(city.id);
    }
    if (cartNotNull(province)) {
        valid = false;
        errorArr.push('Province field cannot be empty');
        invalidArr.push(province.id);
    }
    else if (cartInvalidChar(province)) {
        valid = false;
        errorArr.push('Province field contains invalid character(s)');
        invalidArr.push(province.id);
    } else {
        validArr.push(province.id);
    }
    if (cartNotNull(postalCode)) {
        valid = false;
        errorArr.push('Postal code field cannot be empty');
        invalidArr.push(postalCode.id);
    }
    else if (cartInvalidChar(postalCode)) {
        valid = false;
        errorArr.push('Postal code field contains invalid character(s)');
        invalidArr.push(postalCode.id);
    } else {
        validArr.push(postalCode.id);
    }
    if (cartNotNull(phoneNumber)) {
        valid = false;
        errorArr.push('Phone number field cannot be empty');
        invalidArr.push(phoneNumber.id);
    }
    else if (cartInvalidTel(phoneNumber)) {
        valid = false;
        errorArr.push('Phone number must be in the format XX-XX-XXX-XXXX');
        invalidArr.push(phoneNumber.id);
    } else {
        validArr.push(phoneNumber.id);
    }
    if (cartNotNull(email)) {
        valid = false;
        errorArr.push('Email field cannot be empty');
        invalidArr.push(email.id);
    }
    else if (cartInvalidEmail(email)) {
        valid = false;
        errorArr.push('Email field contains invalid character(s)');
        invalidArr.push(email.id);
    } else {
        validArr.push(email.id);
    }
    for (var i = 0; i < validArr.length; i++) {
        passCart2(validArr[i]);
    }
    for (var i = 0; i < invalidArr.length; i++) {
        failCart2(invalidArr[i]);
    }
    return valid;
}

function passCart2(elid) {
    var obj = document.getElementById(elid);
    var currentClass = obj.className;
    if (currentClass.indexOf("valPassed") == -1) {
        currentClass = currentClass.replace("valFailed", "");
        currentClass = currentClass + ' valPassed';
        obj.className = currentClass;
    }
    return true;
}

function failCart2(elid) {
    var obj = document.getElementById(elid);
    var currentClass = obj.className;
    if (currentClass.indexOf("valFailed") == -1) {
        currentClass = currentClass.replace("valPassed", "");
        currentClass = currentClass + ' valFailed';
        obj.className = currentClass;
    }
    return false;
}

function redeemVoucherClicked() {
    var voucherNumId = getClientID('voucherNum');
    var voucherNum = document.getElementById(voucherNumId);
    editCart('voucherB|' + voucherNum.value);
}

function voucherBalance(dataStr)
{
    var vouchDisVal = document.getElementById('vouchDisVal');
    if (vouchDisVal.innerHTML.length == 0)
    {
        var dataArr = dataStr.split('|');
        var redemptionMsgDiv = document.getElementById('redemptionMsgDiv');
        if (redemptionMsgDiv != null)
        {
            redemptionMsgDiv.innerHTML = '';
            if (dataArr.length == 3)
            {
                if ((dataArr[0] == 'true') && (dataArr[1] == '1'))
                {
                    var voucherNumID = getClientID('voucherNum');
                    voucherNum = document.getElementById(voucherNumID);
                    if (voucherNum != null)
                    {
                        voucherNum.readOnly = true;
                        var redeemvoucherlink = document.getElementById('redeemvoucherlink');
                        redeemvoucherlink.innerHTML = 'Redeemed';
                        updateCartWithDiscount(dataArr[2]);
                    }
                    else
                    {
                        redemptionMsgDiv.innerHTML = 'Could not redeem voucher.';
                    }
                }
                else if ((dataArr[0] == 'true') && (dataArr[1] == '%'))
                {
                    var discountPercent = parseFloat(dataArr[2]);
                    var cartPriceSpn = document.getElementById('cartPriceSpn');
                    var cartTotal = parseFloat(cartPriceSpn.innerHTML);
                    var discountDec = cartTotal * discountPercent;
                    updateCartWithDiscount(discountDec.toString());
                }
                else
                {
                    if ((dataArr[1] == '0') || (dataArr[1] == '-1') || (dataArr[1] == '-2') || (dataArr[1] == '-5') || (dataArr[1] == '-6'))
                    {
                        redemptionMsgDiv.innerHTML = dataArr[2];
                    }
                    else if (dataArr[1] == '-4')
                    {
                        redemptionMsgDiv.innerHTML = 'Voucher has already been used.';
                    }
                    else
                    {
                        redemptionMsgDiv.innerHTML = 'Could not redeem voucher.';
                    }
                }
            }
            else
            {
                redemptionMsgDiv.innerHTML = 'Could not redeem voucher.';
            }
        }
    }
}

function updateCartWithDiscount(amount) {
    var cartPriceSpn = document.getElementById('cartPriceSpn');
    var voucherDisRow = document.getElementById('voucherDisRow');
    var vouchDisVal = document.getElementById('vouchDisVal');
    var grandTotSpn = document.getElementById('grandTotSpn');
    if ((cartPriceSpn != null) && (voucherDisRow != null) && (vouchDisVal != null) && (grandTotSpn != null))
    {
        var cartTotal = parseFloat(cartPriceSpn.innerHTML);
        var grandTotal = parseFloat(grandTotSpn.innerHTML);
        var vouchAmount = parseFloat(amount);
        if ((vouchAmount != NaN) && (grandTotal != NaN) && (cartTotal != NaN) && (vouchAmount != null) && (grandTotal != null) && (cartTotal != null) && (vouchAmount != undefined) && (grandTotal != undefined) && (cartTotal != undefined)) {
            if (vouchAmount > cartTotal) {
                vouchAmount = cartTotal;
            }
            voucherDisRow.style.display = 'table-row';
            voucherDisRow.style.visibility = 'inherit';
            vouchDisVal.innerHTML = 'R' + formatDecimalString(vouchAmount.toString());
            grandTotSpn.innerHTML = formatDecimalString((grandTotal - vouchAmount).toString());          
        }
        else
        {
            redemptionMsgDiv.innerHTML = 'Could not redeem voucher.';
        }
    }
    else
    {
        redemptionMsgDiv.innerHTML = 'Could not redeem voucher.';
    }
}

function validateVoucher(el) {
    var valid = true;
    if (el == null) {
        valid = false;
    }
    else if (el.value.length == 0) {
        valid = false;
    }
    return valid;
}

function showShippingAddress() {
    document.getElementById('extraAdd').style.visibility = 'inherit';
    document.getElementById('extraAdd').style.display = 'inherit';
}

function hideShippingAddress() {
    document.getElementById('extraAdd').style.visibility = 'hidden';
    document.getElementById('extraAdd').style.display = 'none';
}

function editCart(sendStr) {
    PageMethods.CallBackMethod(sendStr, editSucceeded, editFailed);
}

function cartQuantChange(quantityBoxEl, sendStr) {
    var valid = true;
    var newStr = '';
    if (quantityBoxEl.value.length > 5) {
        quantityBoxEl.value = quantityBoxEl.value.substring(0, 5);
        valid = false;
    }
    for (var i = 0; i < quantityBoxEl.value.length; i++) {
        if (('0123456789').indexOf(quantityBoxEl.value[i]) == -1) {
            valid = false;
        }
        else {
            newStr += quantityBoxEl.value[i];
        }
    }
    if ((valid) && (quantityBoxEl.value.length != 0)) {
        editCart(sendStr);
    }
    // var valid = true; for(var i = 0; i < this.value.length; i++){if((\"0123456789\").indexOf(this.value[i]) == -1){valid = false;}}if((valid)&&(this.value.length > 0)){}; return false;
    //alert(quantityBoxEl.value);
    quantityBoxEl.value = newStr;
    if (!valid) {
        redoPricingTotal();
    }
}

function editSucceeded(result) {
    switch (result.split('|')[0]) {
        case 'cartEdit':
            cartEdit(result.substring(9, result.length));
            break;
        case 'kill':
            cartItemRemoved(result);
            break;
        case 'voucherB':
            voucherBalance(result.substring(9, result.length));
            break;
    }
}

function cartEdit(info) {
    var data = JSON.parse(info);
    if (data.success.toLowerCase() == 'true') {
        var currentSizeEl = document.getElementById('currentSize_' + data.rowNum);
        currentSizeEl.innerHTML = data.size;
        var endPriceEl = document.getElementById('endPrice_' + data.rowNum);
        var untiPriceEl = document.getElementById('unitPrice_' + data.rowNum);
        if (data.price.length == 0) {
            data.price = '0';
        }
        if (untiPriceEl.innerHTML != data.price) {
            untiPriceEl.innerHTML = data.price;
        }
        var currentQuant = document.getElementById('quantBox_' + data.rowNum).value;
        if (currentQuant.length > 0) {
            var newPrice = parseFloat(data.price) * parseInt(currentQuant);
        }
        else {
            newPrice = 0;
        }
        if (endPriceEl.innerHTML != newPrice.toString()) {
            endPriceEl.innerHTML = toMoneyFormat(newPrice.toString());
            redoPricingTotal();
        }
        document.getElementById('varCode_' + data.rowNum).innerHTML = data.varCode;
        var currentSrc = document.getElementById('thumbId_' + data.rowNum).src;
        document.getElementById('thumbId_' + data.rowNum).src = currentSrc.substring(0, currentSrc.lastIndexOf('/') + 1) + data.src;
        checkForNullQuantity();
        var cartArry = [];
        if (data.cartObject.length > 0) {
            for (var i = 0; i < data.cartObject.length; i++) {
                var itemStr = data.cartObject[i] ;
                cartArry.push('{ "data" : ' + itemStr.replace(/~/g, '\"') + ' }');
            }
        }
        updateDropDownCart(cartArry);
    }
}

function cartItemRemoved(resultStr) {
    
    var resultArr = resultStr.split('|');
    if (resultArr.length > 1) {
        if (resultArr[1].toLowerCase() == "true") {
            var cartItemClass = '.dropCartItem_' + resultArr[2];
            var cartItemsArr = $(cartItemClass);
            var pNode = null;
            for (var i = 0; i < cartItemsArr.length; i++) {
                if (cartItemsArr[i].innerHTML == resultArr[3] + '|' + resultArr[4]) {
                    pNode = cartItemsArr[i].parentNode;
                }
            }
            if (pNode != null)
            {
                pNode.parentNode.removeChild(pNode);
            }
        }
    }
    totalDropDownCart();
    _viewCartDislpy();
}

function updateDropDownCart(itemArr) {
    var cartHtml = '<div class="itemHolder">';
    var totalPrice = 0;
    var totalItems = 0;
    for (var i = 0; i < itemArr.length; i++) {
        var cartItem = JSON.parse(itemArr[i]);
        var itemDataArr = cartItem.data;
        cartHtml += '<div class="item" style="float: left;">';
        cartHtml += '<img src="' + itemDataArr[3] + '" style="height: 100px;">';
        cartHtml += '<p class="details">';
        cartHtml += '<span class="title">' + itemDataArr[1] + '</span>';
        cartHtml += '<span class="price">R<span class="itemPrice">' + itemDataArr[4] + '</span></span>';
        cartHtml += itemDataArr[2] + '<br>';
        cartHtml += 'Size: ' + itemDataArr[5] + '<br>';
        cartHtml += 'Quantity: <span class="itemQuant">' + itemDataArr[6] + '</span>';
        cartHtml += '</p>';
        cartHtml += '<div class="dropCartItem_' + itemDataArr[0] + '" style="visibility: hidden; display: none; overflow: hidden; width: 0px; height: 0px;">';
        cartHtml += itemDataArr[6] + '|' + itemDataArr[5];
        cartHtml += '</div>';
        cartHtml += '</div>';
        totalItems += parseInt(itemDataArr[6]);
        totalPrice += parseInt(itemDataArr[6]) * parseFloat(itemDataArr[4]);
    }
    cartHtml += '<div class="clear"></div>';
    cartHtml += '</div>';
    cartHtml += '<div class="bottDetails">';
	cartHtml += '<a href="../cart/cart.aspx" class="checkout" title="Begin the checkout process">Checkout</a>';
	cartHtml += '<dl class="totals">';
	cartHtml += '<dt>Cart Totals</dt>';
	cartHtml += '<dd><span id="dropCartTotItems">' + totalItems.toString() + '</span> Items</dd>';
	cartHtml += '<dd>R <span id="dropCartTotalPrice">' + totalPrice.toString() + '</span></dd>';
	cartHtml += '<dd><a href="../cart/cart.aspx">Edit Cart</a></dd>';
	cartHtml += '</dl>';
	cartHtml += '<div class="clear"></div>';
	cartHtml += '</div>';
	document.getElementById('cartDropDown').innerHTML = cartHtml;
}

function totalDropDownCart() {
    var itemArr = $('#cartDropDown .itemHolder .item');
    if (itemArr.length > 0) {
        var priceArr = $('.itemPrice');
        var quantArr = $('.itemQuant');
        if ((itemArr.length == priceArr.length) && (itemArr.length == quantArr.length)) {
            var totalPrice = 0;
            var totalItems = 0;
            for (var i = 0; i < itemArr.length; i++) {
                totalPrice += (parseFloat(priceArr[i].innerHTML) * parseInt(quantArr[i].innerHTML));
                totalItems += parseInt(quantArr[i].innerHTML);
            }
            var dropCartTotalPrice = document.getElementById('dropCartTotalPrice');
            var dropCartTotItems = document.getElementById('dropCartTotItems');
            dropCartTotalPrice.innerHTML = totalPrice.toString();
            dropCartTotItems.innerHTML = totalItems.toString();
        }
    }
    
}

function toMoneyFormat(valstr)
{
    var returnStr = valstr;
    var addZeros = "";
    if (returnStr.indexOf(".") > -1)
    {
        if (returnStr.indexOf(".") < returnStr.length - 2)
        {
            returnStr = returnStr.Substring(0, returnStr.indexOf(".") + 2);
        }
        if (returnStr.indexOf(".") > returnStr.length - 3)
        {
            for (var i = returnStr.indexOf("."); i < returnStr.length - 1; i++)
            {
                 addZeros += "0";
            }
        }
        returnStr += addZeros;
    }
    else
    {
        returnStr += ".00";
    }
    return returnStr;
}

function editFailed(result) {
    //alert('fail: ' + result);
}

function redoPricingTotal() {
    var ultimateTotal = document.getElementById('ultimateTotal');
    var endPriceArr = $('.cartItemEndPrice');
    var runningTotal = 0;
    for (var i = 0; i < endPriceArr.length; i++) {
        runningTotal += parseFloat(endPriceArr[i].innerHTML);
    }
    ultimateTotal.innerHTML = toMoneyFormat(runningTotal.toString());
}

function checkForNullQuantity() {
    var flag = true;
    var endPriceArr = $('.cartItemQuantityBox');
    for (var i = 0; i < endPriceArr.length; i++) {
        if (endPriceArr[i].value.length == 0) {
            flag = false;
            endPriceArr[i].style.border = '1px solid #b00';
        }
        else {
            endPriceArr[i].style.border = '1px solid #d6d6d6';
        }
    }
    if (endPriceArr.length == 0) {
        flag = false;
    }
    return flag;
}

function doCheckout() {
    if (checkForNullQuantity()) {
        var rowNumArr = [];
        var endPriceArr = $('.cartItemQuantityBox');
        for (var i = 0; i < endPriceArr.length; i++) {
            rowNumArr.push(endPriceArr[i].id.substring(endPriceArr[i].id.indexOf('_')+1));
        }
        var cartArr = [];
        for (var i = 0; i < rowNumArr.length; i++) {
            var varcode = document.getElementById('varCode_' + rowNumArr[i]).innerHTML;
            var quantity = document.getElementById('quantBox_' + rowNumArr[i]).value;
            var size = document.getElementById('currentSize_' + rowNumArr[i]).innerHTML;
            cartArr.push(varcode + '|' + quantity + '|' + size);
        }
        __doPostBack("UpdatePanelCheckOut", cartArr.join('~'));
    }
}

function removeRow(rowNum) {
    var table = document.getElementById('shoppingCartCP1Table');
    var rowCount = table.rows.length;
    var sendStr = document.getElementById('varCode_' + rowNum).innerHTML + '|';
    sendStr += document.getElementById('currentSize_' + rowNum).innerHTML + '|';
    sendStr += document.getElementById('quantBox_' + rowNum).value;
    //alert(document.getElementById('cartRow_' + rowNum).innerHTML);
    for (var i = 0; i < rowCount; i++) {
        var row = table.rows[i];
        if (row.id == 'cartRow_' + rowNum) {
            table.deleteRow(i);
            rowCount--;
        }
    }
    if (sendStr.length > 0)
    {
        editCart('kill|' + sendStr);
    }
    //var cartRow = document.getElementById('cartRow_' + rowNum);
   // table.deleteRow(cartRow);
    // "UpdatePanelCart\",\"kill|" + thisVar.Code + "|" + productItem.Value.Split('|')[1] + "
}
