﻿var basketElementCount = 0;
var basketRowCount = 0;
var basketTotalOrderQty = 0;
var basketTotalOrderValue = 0;
var basketTotalRewardPoints = 0;

function testBreakOut() {
          alert("Break Out Complete");
}
// ==============================================================================================================================
//CHECKOUT TABS
// ==============================================================================================================================

// Build ------------------------------------------------------------------------------------------------------------------------------
function buildCheckOutTabs(root, suppliedroot, widgetName) {

          //Tab and page containers
          $("<div>").attr("id", "CheckOutTabs-tabsContainer").addClass("tabsContainer").appendTo("#CheckOutTabs");
          //clear
          $("<div>").addClass("clear").appendTo("#CheckOutTabs");
          $("<div>").attr("id", "CheckOutTabs-pagesContainer").addClass("pagesContainer").appendTo("#CheckOutTabs");

          //add tabs
          addCheckOutTab(root, suppliedroot, widgetName, "basket", "1 Basket .. ");
          addCheckOutTab(root, suppliedroot, widgetName, "checkout", "2 Checkout ..");
          addCheckOutTab(root, suppliedroot, widgetName, "payment", "3 Payment ..");
          addCheckOutTab(root, suppliedroot, widgetName, "confirmation", "4 Confirmation ..");

          //Select start tab
          selectCheckOutTabs("basket");
};

// Add Tabs------------------------------------------------------------------------------------------------------------------------------
function addCheckOutTab(root, suppliedroot, widgetName, id, tabtext) {

          $("<div>").attr("id", "CheckOutTabs-tab-" + id).html(tabtext).addClass("tab").click(function () { selectCheckOutTabs(id); }).appendTo("#CheckOutTabs-tabsContainer");
          $("<div>").attr("id", "CheckOutTabs-page-" + id).addClass("page").appendTo("#CheckOutTabs-pagesContainer");

};

// Select Tabs------------------------------------------------------------------------------------------------------------------------------
function selectCheckOutTabs(tabId) {
          $("#[id^='CheckOutTabs-tab-']").removeClass("tabselected").attr("disabled", "disabled");
          $("#CheckOutTabs-tab-" + tabId).addClass("tabselected").attr("disabled", "");
          $("#[id^='CheckOutTabs-page-']").hide();
          $("#CheckOutTabs-page-" + tabId).show();

          switch (tabId) {
                    case "basket": //
                              try {
                                        $("#CheckOutTabs-tab-checkout").attr("disabled", "");
                              } catch (e) { };
                              break;
                    case "checkout": //
                              try {
                                        $("#CheckOutTabs-tab-basket").attr("disabled", "");
                                        $("#CheckOutTabs-tab-payment").attr("disabled", "");
                              } catch (e) { };
                              break;
                    case "payment": //
                              try {
                                        $("#CheckOutTabs-tab-basket").attr("disabled", "");
                                        $("#CheckOutTabs-tab-checkout").attr("disabled", "");
                                        //$("#CheckOutTabs-tab-confirmation").attr("disabled", "");
                              } catch (e) { };
                              break;
                    case "confirmation": //
                              try {
                                        //                                        $("#CheckOutTabs-tab-basket").attr("disabled", "");
                                        //                                        $("#CheckOutTabs-tab-checkout").attr("disabled", "");
                                        //                                        $("#CheckOutTabs-tab-payment").attr("disabled", "");
                              } catch (e) { };
                              break;
          };

};

function paymentClick_2() {
          $("#CheckOutTabs-tab-payment").unbind("click");
          $("#CheckOutTabs-tab-payment").click(function () { checkOrder('XYZ') });
          $("#proceedToPayment").click(function () { checkOrder('XYZ') });
}

function paymentClick_1() {
          $("#CheckOutTabs-tab-payment").unbind("click");
          $("#CheckOutTabs-tab-payment").click(function () { jAlert('You must complete checkout before proceeding to payment', appname); })
}

// ==============================================================================================================================
// BASKET
// ==============================================================================================================================

//ADD TO BASKET --------------------------------------------------------------------------------------------
function addToBasket(GUID, ProductID) {
          if (validateAddToBasket(GUID)) {
                    var qty = "";
                    try { qty = $("#Qty_" + GUID).val(); } catch (e) { };
                    ws_2g_Core.WSAddToBasket(GUID, ProductID, qty,
                            addToBasket_SucceededCallback, TimeoutCallback, FailedCallback);
          };
};

// ADD TO BASKET SUCCEEDED
function addToBasket_SucceededCallback(result) {
          if (result.Success == false) {
                    jAlert(result.ErrorMessage, appname);
          } else {
                    $("#result_displaypage5").load("Content/Widgets/widgetBasket.aspx", { "displayText": "Basket And Checkout" }, function () { });
          };
};

// VALIDATE ADD TO BASKET 
function validateAddToBasket(GUID) {
          //Set initial conditions
          var errormessage = "", returnvalue = true;

          //Form Fields
          var qty = $("#Qty_" + GUID);

          var allFields = $([]).add(qty);

          //Validate Form Fields
          if (checkRegexp(qty, /^[1-9]\d*$/)) {
                    qty.removeClass("errorhighlight");
          } else {
                    qty.addClass("errorhighlight");
                    errormessage += "Please enter a valid order quantity. (1 to 999)\n";
                    returnvalue = false;
          };

          //Display or clear errors
          if (returnvalue == false) {
                    jAlert(errormessage, appname);
          } else {
                    allFields.removeClass("errorhighlight");
          };

          return returnvalue;
};

//UPDATE BASKET --------------------------------------------------------------------------------------------
function UpdateBasket(GUID, BasketID) {
          if (validateUpdateBasket(GUID)) {
                    $("#Message_" + GUID).html("Sending request ... ").show();
                    var qty = "", giftqty = "", instructions = "";
                    try { qty = $("#Qty_" + GUID).val(); } catch (e) { };
                    try { giftqty = $("#GiftQty_" + GUID).val(); } catch (e) { };
                    ws_2g_Core.WSUpdateBasket(GUID, BasketID, qty, giftqty, instructions,
                            UpdateBasket_SucceededCallback, TimeoutCallback, FailedCallback);
          };
};

// VALIDATE UPDATE BASKET 
function validateUpdateBasket(GUID) {
          //Set initial conditions
          var errormessage = "", returnvalue = true;

          //Form Fields
          var qty = $("#Qty_" + GUID);
          var giftqty = $("#GiftQty_" + GUID);

          var allFields = $([]).add(qty, giftqty);

          //Validate Form Fields
          if (checkRegexp(qty, /^[1-9]\d*$/)) {
                    qty.removeClass("errorhighlight");
          } else {
                    qty.addClass("errorhighlight");
                    errormessage += "Please enter a valid order quantity. (1 to 999)\n";
                    returnvalue = false;
          };

          if (checkRegexp(giftqty, /^[0-9]\d*$/)) {
                    giftqty.removeClass("errorhighlight");
          } else {
                    giftqty.addClass("errorhighlight");
                    errormessage += "Please enter a valid gift wrap quantity. (0 to 999)\n";
                    returnvalue = false;
          };

          var qtyvalue = parseInt(qty.val());
          var giftqtyvalue = parseInt(giftqty.val());

          if (giftqtyvalue > qtyvalue) {
                    errormessage += "Gift wrap quantity  cannot exceed order qty.";
                    returnvalue = false;
          };

          //Display or clear errors
          if (returnvalue == false) {
                    jAlert(errormessage, appname);
          } else {
                    allFields.removeClass("errorhighlight");
          };

          return returnvalue;
};
// ADD TO BASKET SUCCEEDED
function UpdateBasket_SucceededCallback(result) {
          if (result.Success == false) {
                    jAlert(result.ErrorMessage, appname);
          } else {
                    pageBasket();
          };
};

//DELETE FROM BASKET --------------------------------------------------------------------------------------------
function DeleteFromBasket(BasketID) {
          ws_2g_Core.WSDeleteFromBasket(BasketID,
                            UpdateBasket_SucceededCallback, TimeoutCallback, FailedCallback);
};


//============================================================================================ TRY
// BASKET LOAD
//============================================================================================ TRY

function widgetBasketLoad(suppliedroot, widgetName) {

          //root
          var root = "";
          if (suppliedroot == "Nothing") { root = ""; } else { root = suppliedroot };


          // LOAD WIDGET DEFINITIONS & DELETE CONTAINER
          // -----------------------------------------------------------------------------------------------------------------------------------------------

          //define product defs array
          BasketDefinitions = [];
          BasketDefinitionsPriceSort = new Array();
          // BasketDefinitionsPriceSort[0] = new Array();
          var i = 0;
          $("#BasketDefs span").each(function () {
                    BasketDefinitions[i] = new Array();
                    BasketDefinitions[i][0] = $(this).html();
                    //Add the array index cols for sorting
                    var temp = BasketDefinitions[i][0];
                    var item = temp.split("|");

                    BasketDefinitions[i][1] = item[8]; //Price
                    BasketDefinitions[i][2] = item[11]; //Review
                    BasketDefinitions[i][3] = item[13]; //View Count

                    i++;
          });
          $("#BasketDefs").remove();

          //define product defs array
          LastOrderDefinition = [];
          // BasketDefinitionsPriceSort[0] = new Array();
          var i = 0;
          $("#LastOrderDefs span").each(function () {
                    LastOrderDefinition[i] = $(this).html();
                    i++;
          });
          // $("#LastOrderDefs").remove();

          //Build
          var recordsetsize = BasketDefinitions.length;
          var ordersize = LastOrderDefinition.length;
          // alert(BasketDefinitions.length);
          switch (recordsetsize) {
                    case 0: //
                              try {
                                        $("#BasketSummary").html("Basket (Empty)")
                                        showDisplayPage(99);
                                        $("#BasketEmptyArea").load("Content/Widgets/widgetInformationViewer.aspx", { "root": suppliedroot, "informationLink": "BasketEmpty" }, function () { $("#BasketEmptyArea").show(); showDisplayPage(5); });
                              } catch (e) { };
                              break;

                    default: // more than one then build the basket
                              try {
                                        showDisplayPage(99);
                                        $("#BasketNotEmptyArea").show();
                                        buildCheckOutTabs(root, suppliedroot, widgetName);
                                        $("#table_basket").appendTo("#CheckOutTabs-page-basket")
                                        buildBasketLayout(root, suppliedroot, widgetName);
                                        if (ordersize == 0) {
                                                  $("#CheckOutTabs-page-checkout").load("Content/Pages/LogOn.aspx", { "destination": "checkout" }, function () { paymentClick_1(); });
                                        } else {
                                                  $("#table_orderform").appendTo("#CheckOutTabs-page-checkout")
                                                  paymentClick_2();
                                                  populateCheckOut("XYZ");
                                        };
                                        $("#area_payment").appendTo("#CheckOutTabs-page-payment")
                                        $("#table_confirmation").appendTo("#CheckOutTabs-page-confirmation")

                                        showDisplayPage(5);
                              } catch (e) { };
                              break;
          };


};

// ==============================================================================================================================
// LOAD CHECKOUT DETAILS
// ==============================================================================================================================

function populateCheckOut(GUID) {

          checkoutitem = LastOrderDefinition[0].split("|");
          //var testitem = checkoutitem[1];
          $("#Inv_Title_" + GUID).val(checkoutitem[2]);
          $("#Inv_FirstName_" + GUID).val(checkoutitem[3]);
          $("#Inv_LastName_" + GUID).val(checkoutitem[4]);
          $("#Inv_Telephone_" + GUID).val(checkoutitem[5]);
          $("#Inv_EmailAddress_" + GUID).val(checkoutitem[6]);
          $("#Inv_AddressHouseNumber_" + GUID).val(checkoutitem[7]);
          $("#Inv_Address1_" + GUID).val(checkoutitem[8]);
          $("#Inv_Address2_" + GUID).val(checkoutitem[9]);
          $("#Inv_Address3_" + GUID).val(checkoutitem[10]);
          $("#Inv_AddressCity_" + GUID).val(checkoutitem[11]);
          $("#Inv_AddressCountyCode_" + GUID).val(checkoutitem[12]);
          $("#Inv_AddressCounty_" + GUID).val(checkoutitem[13]);
          $("#Inv_AddressCountryCode_" + GUID).val($('#siteCountryCode').val());
          $("#Inv_AddressCountry_" + GUID).val($('#siteCountry').val());

          //        $("#Inv_AddressCountryCode_" + GUID).val(checkoutitem[14]);
          //          $("#Inv_AddressCountry_" + GUID).val(checkoutitem[15]);
          $("#Inv_AddressPostCode_" + GUID).val(checkoutitem[16]);
          $("#Del_Title_" + GUID).val(checkoutitem[17]);
          $("#Del_FirstName_" + GUID).val(checkoutitem[18]);
          $("#Del_LastName_" + GUID).val(checkoutitem[19]);
          $("#Del_Telephone_" + GUID).val(checkoutitem[20]);
          $("#Del_EmailAddress_" + GUID).val(checkoutitem[21]);
          $("#Del_AddressHouseNumber_" + GUID).val(checkoutitem[22]);
          $("#Del_Address1_" + GUID).val(checkoutitem[23]);
          $("#Del_Address2_" + GUID).val(checkoutitem[24]);
          $("#Del_Address3_" + GUID).val(checkoutitem[25]);
          $("#Del_AddressCity_" + GUID).val(checkoutitem[26]);
          $("#Del_AddressCountyCode_" + GUID).val(checkoutitem[27]);
          $("#Del_AddressCounty_" + GUID).val(checkoutitem[28]);
          $("#Del_AddressCountryCode_" + GUID).val(checkoutitem[29]);
          $("#Del_AddressCountry_" + GUID).val(checkoutitem[30]);
          $("#Del_AddressPostCode_" + GUID).val(checkoutitem[31]);
          siteResetCountry(GUID);

};

// ==============================================================================================================================
// COPY INVOICE ADDRESS
// ==============================================================================================================================

function copyInvoiceAddress(GUID) {

          jConfirm("Please confirm that you wish to copy the<br/>invoice details to the delivery details?", appname, function (r) {
                    if (r) {
                              $("#Del_Title_" + GUID).val($("#Inv_Title_" + GUID).val());
                              $("#Del_FirstName_" + GUID).val($("#Inv_FirstName_" + GUID).val());
                              $("#Del_LastName_" + GUID).val($("#Inv_LastName_" + GUID).val());
                              $("#Del_Telephone_" + GUID).val($("#Inv_Telephone_" + GUID).val());
                              $("#Del_EmailAddress_" + GUID).val($("#Inv_EmailAddress_" + GUID).val());
                              $("#Del_AddressHouseNumber_" + GUID).val($("#Inv_AddressHouseNumber_" + GUID).val());
                              $("#Del_Address1_" + GUID).val($("#Inv_Address1_" + GUID).val());
                              $("#Del_Address2_" + GUID).val($("#Inv_Address2_" + GUID).val());
                              $("#Del_Address3_" + GUID).val($("#Inv_Address3_" + GUID).val());
                              $("#Del_AddressCity_" + GUID).val($("#Inv_AddressCity_" + GUID).val());
                              $("#Del_AddressCountyCode_" + GUID).val($("#Inv_AddressCountyCode_" + GUID).val());
                              $("#Del_AddressCounty_" + GUID).val($("#Inv_AddressCounty_" + GUID).val());
                              $("#Del_AddressCountryCode_" + GUID).val($("#Inv_AddressCountryCode_" + GUID).val());
                              $("#Del_AddressCountry_" + GUID).val($("#Inv_AddressCountry_" + GUID).val());
                              $("#Del_AddressPostCode_" + GUID).val($("#Inv_AddressPostCode_" + GUID).val());
                    };
          });
};


// ==============================================================================================================================
// BUILD BASKET LAYOUT
// ==============================================================================================================================

// -----------------------------------------------------------------------------------------------------------------------------------------------
function buildBasketLayout(root, suppliedroot, widgetName) {


          var basketLayoutType = "1"//$("#" + widgetName + "_searchBar_filter_layoutView").val();


          //          //Sort the product defs array
          BasketDefinitions.sort(function (a, b) { return a[1] - b[1] });

          basketRowCount = 1;

          //site variables
          var siteCurrencySymbol = $("#siteCurrencySymbol").val();
          var siteExchangeRate = parseFloat($("#siteExchangeRate").val());
          var siteStandardDelivery = parseFloat($("#siteStandardDelivery").val()) / 100;
          var siteFreeStandardDelivery = parseFloat($("#siteFreeStandardDelivery").val()) / 100;
          var sitePremiumDelivery = parseFloat($("#sitePremiumDelivery").val()) / 100;
          var siteFreePremiumDelivery = parseFloat($("#siteFreePremiumDelivery").val()) / 100;

          //Reset delivery to standard if special is not available (On change of country)
          if ($("#siteDeliveryType").val() == "P" && sitePremiumDelivery == 0) { $("#siteDeliveryType").val("S") };

          if (siteFreeStandardDelivery == 0) { siteFreeStandardDelivery = 1000000 };
          if (siteFreePremiumDelivery == 0) { siteFreePremiumDelivery = 1000000 };

          basketElementCount = 0;
          basketRowCount = 0;
          basketTotalOrderQty = 0;
          basketTotalOrderValue = 0;
          basketTotalRewardPoints = 0;


          $("<tr>").attr("id", "basketHeaderRow").addClass("headerrow").appendTo("#" + widgetName + "_basketProducts");
          $("<th>").html("-").addClass("border").appendTo("#basketHeaderRow");
          $("<th>").html("Code").addClass("border").appendTo("#basketHeaderRow");
          $("<th>").html("Description").addClass("border").appendTo("#basketHeaderRow");
          $("<th>").attr({ "colspan": "2" }).html("Order Price<br/>and Qty").addClass("border").appendTo("#basketHeaderRow");
          // $("<th>").html("Order<br/>Qty").addClass("border").appendTo("#basketHeaderRow");
          $("<th>").attr({ "colspan": "2" }).html("Gift Wrap Price<br/>and Qty").addClass("border").appendTo("#basketHeaderRow");
          //$("<th>").html("Gift<br/>Qty").addClass("border").appendTo("#basketHeaderRow");
          $("<th>").html("Total").addClass("border").appendTo("#basketHeaderRow");
          $("<th>").html("Points").addClass("border").appendTo("#basketHeaderRow");

          //Add Elements
          // -----------------------------------------------------------------------------------------------------------------------------------------------
          for (var i = 0; i < BasketDefinitions.length; i++) {
                    createBasketElement(root, suppliedroot, widgetName, basketLayoutType, BasketDefinitions[i][0]);
          };


          //createBasketDeliveryElement("Del", "Standard delivery", "1", "4.7", basketLayoutType);
          if ($("#siteDeliveryType").val() == "S" ) {

                    if (basketTotalOrderValue < siteFreeStandardDelivery) {
                              createBasketDeliveryElement("Del", "Standard delivery", "1", siteStandardDelivery, basketLayoutType);
                              $("#siteDeliveryCharge").val(siteStandardDelivery);
                    } else {
                              createBasketDeliveryElement("Del", "Free standard delivery", "1", "0", basketLayoutType);
                              $("#siteDeliveryCharge").val("0");
                    }
       

          };
          if ($("#siteDeliveryType").val() == "P") {
                    if (basketTotalOrderValue < siteFreePremiumDelivery) {
                              createBasketDeliveryElement("Del", "Special delivery", "1", sitePremiumDelivery, basketLayoutType);
                              $("#siteDeliveryCharge").val(sitePremiumDelivery);
                    } else {
                              createBasketDeliveryElement("Del", "Free special delivery", "1", "0", basketLayoutType);
                              $("#siteDeliveryCharge").val("0");
                    }
          };

        

          var formattedbasketTotalOrderValue = siteCurrencySymbol + CommaFormatted(CurrencyFormatted(basketTotalOrderValue));

          $("<tr>").attr("id", "basketFooterRow").addClass("footerrow").appendTo("#" + widgetName + "_basketProducts");
          $("<td>").attr({ "colspan": "4" }).html("Totals").css({ "text-align": "right", "padding-right": "10px" }).addClass("border").appendTo("#basketFooterRow");
          $("<td>").html(basketTotalOrderQty).addClass("border").appendTo("#basketFooterRow");
          $("<td>").attr({ "colspan": "2" }).addClass("border").appendTo("#basketFooterRow");
          $("<td>").html(formattedbasketTotalOrderValue).addClass("border").appendTo("#basketFooterRow");
          $("<td>").html(basketTotalRewardPoints).addClass("border").appendTo("#basketFooterRow");


          $("#BasketSummary").html("Basket (" + formattedbasketTotalOrderValue + ")")

};

// ==============================================================================================================================
// BASKET CREATE ELEMENTS
// ==============================================================================================================================

function createBasketElement(root, suppliedroot, widgetName, basketLayoutType, BasketDefinitions) {

          var productDef = BasketDefinitions.split("|");
          var timeStamp = (new Date).getTime();
          var elementname = productDef[0];
          var basketID = productDef[1];
          var productIDformatted = productDef[2];
          var brand = productDef[3];
          var descriptionshort = productDef[4];
          var descriptionlong = productDef[5];
          var imagepath = productDef[6].replace("~/", root);
          var imagethumbpath = productDef[7].replace("~/", root);
          var flashmessage = productDef[8];
          var userinstructions = productDef[9];
          var orderqty = parseInt(productDef[10]);
          var giftwrapqty = parseInt(productDef[11]);
          var retailprice = parseFloat(productDef[12]);
          var style = productDef[13];
          var size = productDef[14];
          var colour = productDef[15];
          var giftwrapprice = parseFloat(productDef[16]);
          var rewardpoints = parseInt(productDef[17]);
          var giftwraptype = parseInt(productDef[18]);

          //site variables
          var siteCurrencySymbol = $("#siteCurrencySymbol").val();
          var siteExchangeRate = parseFloat($("#siteExchangeRate").val());

          retailprice = retailprice * (siteExchangeRate / 100);
          giftwrapprice = giftwrapprice * (siteExchangeRate / 100);

          if (giftwraptype !== 1) {
                    var formattedgiftwrapprice = siteCurrencySymbol + CommaFormatted(CurrencyFormatted(giftwrapprice));
          } else {
                    giftwrapqty = 0;
                    giftwrapprice = 0;
                    var formattedgiftwrapprice = "--";
          };

          var linetotal = (retailprice * orderqty) + (giftwrapprice * giftwrapqty);

          basketTotalOrderValue = basketTotalOrderValue + linetotal;

          //formatt price
          var formattedretailprice = siteCurrencySymbol + CommaFormatted(CurrencyFormatted(retailprice));
          var formattedlinetotal = siteCurrencySymbol + CommaFormatted(CurrencyFormatted(linetotal));


          basketTotalOrderQty = basketTotalOrderQty + orderqty;
          //format description
          if (brand !== "") { descriptionshort = brand + " - " + descriptionshort; };

          basketTotalRewardPoints = basketTotalRewardPoints + rewardpoints;

          var stylesizecolour = "";
          if (style !== "") { stylesizecolour = "Style: " + style + "   "; };
          if (size !== "") { stylesizecolour = stylesizecolour + "Size: " + size + "   "; };
          if (colour !== "") { stylesizecolour = stylesizecolour + "Colour: " + colour + "   "; };

          $.trim(stylesizecolour);
          if (stylesizecolour !== "") { descriptionshort = descriptionshort + "<br/>" + stylesizecolour; };

          //layout type
          // -----------------------------------------------------------------------------------------------------------------------------------------------
          //alert(basketLayoutType);
          switch (basketLayoutType) {

                    case "1": //Standard
                              try {

                                        basketRowCount++;
                                        $("<tr>").attr("id", "basketProductRow_" + elementname).addClass("productrow").appendTo("#" + widgetName + "_basketProducts");
                                        $("<td>").attr("id", "basketProductCell_Buttons_" + elementname).addClass("border").appendTo("#basketProductRow_" + elementname);
                                        $("<td>").html(productIDformatted).attr("id", "basketProductCell_Code_" + elementname).css({ "font-size": "14pt", "color": "Grey" }).addClass("border").appendTo("#basketProductRow_" + elementname);
                                        $("<td>").html(descriptionshort).attr("id", "basketProductCell_Description_" + elementname).addClass("border").appendTo("#basketProductRow_" + elementname);
                                        $("<td>").html(formattedretailprice).attr("id", "basketProductCell_UnitPrice_" + elementname).addClass("border").appendTo("#basketProductRow_" + elementname);
                                        $("<td>").attr("id", "basketProductCell_Qty_" + elementname).addClass("border").appendTo("#basketProductRow_" + elementname);
                                        $("<div>").html(orderqty).attr({ "id": elementname + "_qty" }).addClass("right").appendTo("#basketProductCell_Qty_" + elementname);
                                        $("<td>").html(formattedgiftwrapprice).attr("id", "basketProductCell_GiftPrice_" + elementname).addClass("border").appendTo("#basketProductRow_" + elementname);
                                        $("<td>").attr("id", "basketProductCell_GiftQty_" + elementname).addClass("border").appendTo("#basketProductRow_" + elementname);
                                        $("<div>").html(giftwrapqty).attr({ "id": elementname + "_giftqty" }).addClass("right").appendTo("#basketProductCell_GiftQty_" + elementname);

                                        $("<td>").html(formattedlinetotal).attr("id", "basketProductCell_TotalPrice_" + elementname).addClass("border").appendTo("#basketProductRow_" + elementname);
                                        $("<td>").html(rewardpoints).attr("id", "basketProductCell_RewardPoints_" + elementname).addClass("border").appendTo("#basketProductRow_" + elementname);

                                        //add update and delete buttons
                                        $("<div>").attr({ "id": elementname + "_editbtn", "title": "Edit basket" }).html("Edit").css({ "font-size": "8pt" }).addClass("link").appendTo("#basketProductCell_Buttons_" + elementname);
                                        $("<div>").attr({ "id": elementname + "_removebtn", "title": "Remove from basket" }).css({ "font-size": "8pt" }).html("Remove").addClass("link").appendTo("#basketProductCell_Buttons_" + elementname);
                                        $("<div>").attr({ "id": elementname + "_cancelbtn", "title": "Cancel" }).html("Cancel").addClass("link").css({ "display": "none", "font-size": "8pt" }).appendTo("#basketProductCell_Buttons_" + elementname);
                                        $("<input>").attr({ "id": "Qty_" + elementname, "type": "text", "maxlength": "3", "value": orderqty, "title": "Quantity to order" }).css({ "display": "none" }).addClass("orderqty right").appendTo("#basketProductCell_Qty_" + elementname);
                                        $("<input>").attr({ "id": "GiftQty_" + elementname, "type": "text", "maxlength": "3", "value": giftwrapqty, "title": "Quantity to order" }).css({ "display": "none" }).addClass("orderqty right").appendTo("#basketProductCell_GiftQty_" + elementname);
                                        $("<div>").attr({ "id": elementname + "_updatebtn", "title": "Update" }).html("Update").addClass("link").css({ "display": "none", "font-size": "8pt" }).appendTo("#basketProductCell_Qty_" + elementname);

                                        //add more detail
                                        $("<div>").attr({ "id": elementname + "_morebtn", "title": "Show a bit more about this product" }).css({ "font-size": "8pt" }).html("more ..").addClass("link").appendTo("#basketProductCell_Description_" + elementname);
                                        $("<div>").attr({ "id": elementname + "_lessbtn", "title": "Show a bit less product detail" }).css({ "display": "none", "font-size": "8pt" }).html("less ..").addClass("link").appendTo("#basketProductCell_Description_" + elementname);
                                        $("<img>").addClass("image").attr({ "id": elementname + "image", "src": imagethumbpath }).css({ "display": "none" }).addClass("ui-icon-border").appendTo("#basketProductCell_Code_" + elementname);
                                        if (descriptionlong !== "") { $("<div>").addClass("description").attr({ "id": elementname + "descriptionlong" }).html(descriptionlong).css({ "display": "none" }).appendTo("#basketProductCell_Description_" + elementname) };
                                        if (flashmessage !== "") { $("<div>").addClass("flashmessage").attr({ "id": elementname + "flashmessage" }).html(flashmessage).css({ "display": "none" }).appendTo("#basketProductCell_Description_" + elementname) };



                                        //Edit
                                        $("#" + elementname + "_editbtn").click(function () {
                                                  $("#" + elementname + "_editbtn").hide();
                                                  $("#" + elementname + "_removebtn").hide();
                                                  $("#" + elementname + "_updatebtn").show();
                                                  $("#" + elementname + "_cancelbtn").show();
                                                  $("#" + elementname + "_qty").hide();
                                                  $("#Qty_" + elementname).show();
                                                  if (giftwraptype !== 1) {
                                                            $("#" + elementname + "_giftqty").hide();
                                                            $("#GiftQty_" + elementname).show();
                                                  };
                                        });

                                        //Cancel
                                        $("#" + elementname + "_cancelbtn").click(function () {
                                                  $("#" + elementname + "_editbtn").show();
                                                  $("#" + elementname + "_removebtn").show();
                                                  $("#" + elementname + "_updatebtn").hide();
                                                  $("#" + elementname + "_cancelbtn").hide();
                                                  $("#" + elementname + "_qty").show();
                                                  $("#Qty_" + elementname).hide();
                                                  if (giftwraptype !== 1) {
                                                            $("#" + elementname + "_giftqty").show();
                                                            $("#GiftQty_" + elementname).hide();
                                                  };
                                        });

                                        //Update
                                        $("#" + elementname + "_updatebtn").click(function () {
                                                  UpdateBasket(elementname, basketID);

                                        });

                                        //Remove
                                        $("#" + elementname + "_removebtn").click(function () {
                                                  jConfirm("Please confirm that you wish to remove <br/> this item from your shopping basket?", appname, function (r) {
                                                            if (r) {
                                                                      DeleteFromBasket(basketID);
                                                            };
                                                  });

                                        });

                                        $("#" + elementname + "_morebtn").click(function () {
                                                  $("#" + elementname + "_morebtn").hide();
                                                  $("#" + elementname + "_lessbtn").show();
                                                  $("#" + elementname + "image").show();
                                                  $("#" + elementname + "descriptionlong").show();
                                                  $("#" + elementname + "flashmessage").show();
                                        });

                                        $("#" + elementname + "_lessbtn").click(function () {
                                                  $("#" + elementname + "_morebtn").show();
                                                  $("#" + elementname + "_lessbtn").hide();
                                                  $("#" + elementname + "image").hide();
                                                  $("#" + elementname + "descriptionlong").hide();
                                                  $("#" + elementname + "flashmessage").hide();
                                        });

                              } catch (e) { };
                              break;

                    case "2": //large images
                              try {



                              } catch (e) { };
                              break;
          };

};
// ==============================================================================================================================
// BASKET CREATE DELIVERY ELEMENTS
// ==============================================================================================================================

function createBasketDeliveryElement(productIDformatted, descriptionshort, orderqty, retailprice, basketLayoutType) {

          var elementname = "basketdelivery"

          //site variables
          var siteCurrencySymbol = $("#siteCurrencySymbol").val();
          var siteExchangeRate = parseFloat($("#siteExchangeRate").val());
          var siteStandardDelivery = parseFloat($("#siteStandardDelivery").val()) / 100;
          var siteFreeStandardDelivery = parseFloat($("#siteFreeStandardDelivery").val()) / 100;
          var sitePremiumDelivery = parseFloat($("#sitePremiumDelivery").val()) / 100;
          var siteFreePremiumDelivery = parseFloat($("#siteFreePremiumDelivery").val()) / 100;

          retailprice = retailprice * (siteExchangeRate / 100);

          var linetotal = (retailprice * orderqty)

          basketTotalOrderValue = basketTotalOrderValue + linetotal;

          //formatt price
          var formattedretailprice = siteCurrencySymbol + CommaFormatted(CurrencyFormatted(retailprice));
          var formattedlinetotal = siteCurrencySymbol + CommaFormatted(CurrencyFormatted(linetotal));



          //layout type
          // -----------------------------------------------------------------------------------------------------------------------------------------------
          //alert(basketLayoutType);
          switch (basketLayoutType) {

                    case "1": //Standard
                              try {

                                        basketRowCount++;
                                        $("<tr>").attr("id", "basketProductRow_" + elementname).addClass("productrow").appendTo("#" + widgetName + "_basketProducts");
                                        $("<td>").attr("id", "basketProductCell_Buttons_" + elementname).addClass("border").appendTo("#basketProductRow_" + elementname);
                                        $("<td>").html(productIDformatted).attr("id", "basketProductCell_Code_" + elementname).css({ "font-size": "14pt", "color": "Grey" }).addClass("border").appendTo("#basketProductRow_" + elementname);
                                        $("<td>").html(descriptionshort).attr("id", "basketProductCell_Description_" + elementname).addClass("border").appendTo("#basketProductRow_" + elementname);
                                        $("<td>").html(formattedretailprice).attr("id", "basketProductCell_UnitPrice_" + elementname).addClass("border").appendTo("#basketProductRow_" + elementname);
                                        $("<td>").attr("id", "basketProductCell_Qty_" + elementname).addClass("border").appendTo("#basketProductRow_" + elementname);
                                        $("<td colspan='2'>").html("").attr("id", "basketProductCell_GiftPrice_" + elementname).addClass("border").appendTo("#basketProductRow_" + elementname);
                                        //  $("<td>").attr("id", "basketProductCell_GiftQty_" + elementname).addClass("border").appendTo("#basketProductRow_" + elementname);

                                        $("<td>").html(formattedlinetotal).attr("id", "basketProductCell_TotalPrice_" + elementname).addClass("border").appendTo("#basketProductRow_" + elementname);
                                        $("<td>").html("").attr("id", "basketProductCell_RewardPoints_" + elementname).addClass("border").appendTo("#basketProductRow_" + elementname);

                                        if ($("#siteDeliveryType").val() == "S" && sitePremiumDelivery !== 0) {
                                                  $("<div>").attr({ "id": elementname + "_specialbtn", "title": "Change to special delivery" }).css({ "font-size": "8pt" }).html("change to special delivery ..").addClass("link")
                                                  .click(function () {
                                                            $("#siteDeliveryType").val("P");
                                                            pageBasket();
                                                  })
                                                  .appendTo("#basketProductCell_Description_" + elementname);

                                        };
                                        if ($("#siteDeliveryType").val() == "P") {
                                                  $("<div>").attr({ "id": elementname + "_standardbtn", "title": "Change to standard delivery" }).css({ "font-size": "8pt" }).html("change to standard delivery ..").addClass("link")
                                                  .click(function () {
                                                            $("#siteDeliveryType").val("S");
                                                            pageBasket();
                                                  })
                                                  .appendTo("#basketProductCell_Description_" + elementname);
                                        };



                              } catch (e) { };
                              break;


          };

};

// ==============================================================================================================================
// PROCESS ORDER
// ==============================================================================================================================

// CHECK ORDER
function checkOrder(GUID) {
          if (validateProcessOrder(GUID)) {
                    selectCheckOutTabs('payment')
          }

};

// PROCESS ORDER
function processOrder(GUID) {
          if (validateProcessOrder(GUID)) {

                    var 
                    inv_title = "", inv_firstname = "", inv_lastname = "", inv_telephone = "", inv_emailaddress = "", inv_addresshousenumber = "", inv_address1 = "", inv_address2 = "", inv_address3 = "",
                    inv_addresscity = "", inv_addresscountycode = "", inv_addresscounty = "", inv_addresscountrycode = "", inv_addresscountry = "", inv_addresspostcode = "",
                    Del_title = "", Del_firstname = "", Del_lastname = "", del_telephone = "", Del_emailaddress = "", Del_addresshousenumber = "", Del_address1 = "", Del_address2 = "", Del_address3 = "",
                    Del_addresscity = "", Del_addresscountycode = "", Del_addresscounty = "", Del_addresscountrycode = "", Del_addresscountry = "", Del_addresspostcode = "",
                    instructions = "", deliverycharge = "";

                    try { inv_title = $("#Inv_Title_" + GUID).val(); } catch (e) { };
                    try { inv_firstname = $("#Inv_FirstName_" + GUID).val(); } catch (e) { };
                    try { inv_lastname = $("#Inv_LastName_" + GUID).val(); } catch (e) { };
                    try { inv_telephone = $("#Inv_Telephone_" + GUID).val(); } catch (e) { };
                    try { inv_emailaddress = $("#Inv_EmailAddress_" + GUID).val(); } catch (e) { };
                    try { inv_addresshousenumber = $("#Inv_AddressHouseNumber_" + GUID).val(); } catch (e) { };
                    try { inv_address1 = $("#Inv_Address1_" + GUID).val(); } catch (e) { };
                    try { inv_address2 = $("#Inv_Address2_" + GUID).val(); } catch (e) { };
                    try { inv_address3 = $("#Inv_Address3_" + GUID).val(); } catch (e) { };
                    try { inv_addresscity = $("#Inv_AddressCity_" + GUID).val(); } catch (e) { };
                    try { inv_addresscountycode = $("#Inv_AddressCountyCode_" + GUID).val(); } catch (e) { };
                    try { inv_addresscounty = $("#Inv_AddressCounty_" + GUID).val(); } catch (e) { };
                    try { inv_addresscountrycode = $("#Inv_AddressCountryCode_" + GUID).val(); } catch (e) { };
                    try { inv_addresscountry = $("#Inv_AddressCountry_" + GUID).val(); } catch (e) { };
                    try { inv_addresspostcode = $("#Inv_AddressPostCode_" + GUID).val(); } catch (e) { };

                    try { Del_title = $("#Del_Title_" + GUID).val(); } catch (e) { };
                    try { Del_firstname = $("#Del_FirstName_" + GUID).val(); } catch (e) { };
                    try { Del_lastname = $("#Del_LastName_" + GUID).val(); } catch (e) { };
                    try { Del_telephone = $("#Del_Telephone_" + GUID).val(); } catch (e) { };
                    try { Del_emailaddress = $("#Del_EmailAddress_" + GUID).val(); } catch (e) { };
                    try { Del_addresshousenumber = $("#Del_AddressHouseNumber_" + GUID).val(); } catch (e) { };
                    try { Del_address1 = $("#Del_Address1_" + GUID).val(); } catch (e) { };
                    try { Del_address2 = $("#Del_Address2_" + GUID).val(); } catch (e) { };
                    try { Del_address3 = $("#Del_Address3_" + GUID).val(); } catch (e) { };
                    try { Del_addresscity = $("#Del_AddressCity_" + GUID).val(); } catch (e) { };
                    try { Del_addresscountycode = $("#Del_AddressCountyCode_" + GUID).val(); } catch (e) { };
                    try { Del_addresscounty = $("#Del_AddressCounty_" + GUID).val(); } catch (e) { };
                    try { Del_addresscountrycode = $("#Del_AddressCountryCode_" + GUID).val(); } catch (e) { };
                    try { Del_addresscountry = $("#Del_AddressCountry_" + GUID).val(); } catch (e) { };
                    try { Del_addresspostcode = $("#Del_AddressPostCode_" + GUID).val(); } catch (e) { };

                    try { instructions = $("#Instructions_" + GUID).val(); } catch (e) { };
                    try { deliverycharge = $("#siteDeliveryCharge").val(); } catch (e) { };

                    try { currency = $("#siteCurrency").val(); } catch (e) { };
                    try { currencysymbol = $("#siteCurrencySymbol").val(); } catch (e) { };
                    try { exchangerate = $("#siteExchangeRate").val(); } catch (e) { };


                    ws_2g_Core.WSProcessOrder(GUID, inv_title, inv_firstname, inv_lastname, inv_telephone, inv_emailaddress, inv_addresshousenumber, inv_address1, inv_address2, inv_address3, inv_addresscity,
                                         inv_addresscountycode, inv_addresscounty, inv_addresscountrycode, inv_addresscountry, inv_addresspostcode, Del_title, Del_firstname, Del_lastname, Del_telephone, Del_emailaddress, Del_addresshousenumber, Del_address1, Del_address2, Del_address3, Del_addresscity,
                                        Del_addresscountycode, Del_addresscounty, Del_addresscountrycode, Del_addresscountry, Del_addresspostcode, instructions, deliverycharge, currency, currencysymbol, exchangerate,
                                        processOrder_SucceededCallback, TimeoutCallback, FailedCallback);

          };
};

// PROCESS ORDER SUCCEEDED
function processOrder_SucceededCallback(result) {
          var GUID = result.GUID;
          if (result.Success == false) {
                    jAlert(result.ErrorMessage, appname);
          } else {
                    //load payment page
                    //  $("#CheckOutTabs-page-payment").load("Content/Sage/transactionRegistration.aspx", {}, function () { selectCheckOutTabs('payment'); });
                    $("#payment_iframe").attr({ "src": "http://www.isssafety.com/Content/Sage/transactionRegistration.aspx" });
                    //  selectCheckOutTabs('payment');

          };
};

// VALIDATE PROCESS ORDER
function validateProcessOrder(GUID) {
          //Set initial conditions
          var errormessage = "", returnvalue = true;

          //Form Fields To validate
          var invtitle = $("#Inv_Title_" + GUID);
          var invfirstname = $("#Inv_FirstName_" + GUID);
          var invlastname = $("#Inv_LastName_" + GUID);
          var invemailaddress = $("#Inv_EmailAddress_" + GUID);

          var invaddresshousenumber = $("#Inv_AddressHouseNumber_" + GUID);
          var invaddress1 = $("#Inv_Address1_" + GUID);
          var invaddresscity = $("#Inv_AddressCity_" + GUID);
          var invaddresspostcode = $("#Inv_AddressPostCode_" + GUID);

          var deltitle = $("#Del_Title_" + GUID);
          var delfirstname = $("#Del_FirstName_" + GUID);
          var dellastname = $("#Del_LastName_" + GUID);
          var deladdresshousenumber = $("#Del_AddressHouseNumber_" + GUID);
          var deladdress1 = $("#Del_Address1_" + GUID);
          var deladdresscity = $("#Del_AddressCity_" + GUID);
          var deladdresspostcode = $("#Del_AddressPostCode_" + GUID);
          var conterms = $("#Con_Terms_" + GUID);

          var allFields = $([]).add(invtitle, invfirstname, invlastname, invemailaddress, invaddresshousenumber, invaddress1, invaddresscity, invaddresspostcode,
          deltitle, delfirstname, dellastname, deladdresshousenumber, deladdress1, deladdresscity, deladdresspostcode, conterms);

          //Validate Form Fields
          if (checkLength(invtitle, 1, 10000)) {
                    invtitle.removeClass("errorhighlight");
          } else {
                    invtitle.addClass("errorhighlight");
                    errormessage += "Invoice - Please enter your title (Mr, Mrs. Ms, Dr etc..).<br/>";
                    returnvalue = false;
          };

          if (checkLength(invfirstname, 1, 10000)) {
                    invfirstname.removeClass("errorhighlight");
          } else {
                    invfirstname.addClass("errorhighlight");
                    errormessage += "Invoice - Please enter your first name<br/>";
                    returnvalue = false;
          };

          if (checkLength(invlastname, 1, 10000)) {
                    invlastname.removeClass("errorhighlight");
          } else {
                    invlastname.addClass("errorhighlight");
                    errormessage += "Invoice - Please enter your last name<br/>";
                    returnvalue = false;
          };

          if (checkRegexp(invemailaddress, /\b[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}\b/)) {
                    invemailaddress.removeClass("errorhighlight");
          } else {
                    invemailaddress.addClass("errorhighlight");
                    errormessage += "Invoice - Please enter a valid email address.<br/>";
                    returnvalue = false;
          };

          if (checkLength(invaddresshousenumber, 1, 10000)) {
                    invaddresshousenumber.removeClass("errorhighlight");
          } else {
                    invaddresshousenumber.addClass("errorhighlight");
                    errormessage += "Invoice - Please enter your house number or name<br/>";
                    returnvalue = false;
          };

          if (checkLength(invaddress1, 1, 10000)) {
                    invaddress1.removeClass("errorhighlight");
          } else {
                    invaddress1.addClass("errorhighlight");
                    errormessage += "Invoice - Please enter your street or road name<br/>";
                    returnvalue = false;
          };

          if (checkLength(invaddresscity, 1, 10000)) {
                    invaddresscity.removeClass("errorhighlight");
          } else {
                    invaddresscity.addClass("errorhighlight");
                    errormessage += "Invoice - Please enter your city or town name<br/>";
                    returnvalue = false;
          };
          if (checkLength(invaddresspostcode, 1, 10000)) {
                    invaddresspostcode.removeClass("errorhighlight");
          } else {
                    invaddresspostcode.addClass("errorhighlight");
                    errormessage += "Invoice - Please enter your post or zip code<br/>";
                    returnvalue = false;
          };

          if (checkLength(deltitle, 1, 10000)) {
                    deltitle.removeClass("errorhighlight");
          } else {
                    deltitle.addClass("errorhighlight");
                    errormessage += "Delivery - Please enter your title (Mr, Mrs. Ms, Dr etc..).<br/>";
                    returnvalue = false;
          };

          if (checkLength(delfirstname, 1, 10000)) {
                    delfirstname.removeClass("errorhighlight");
          } else {
                    delfirstname.addClass("errorhighlight");
                    errormessage += "Delivery - Please enter your first name<br/>";
                    returnvalue = false;
          };

          if (checkLength(dellastname, 1, 10000)) {
                    dellastname.removeClass("errorhighlight");
          } else {
                    dellastname.addClass("errorhighlight");
                    errormessage += "Delivery - Please enter your last name<br/>";
                    returnvalue = false;
          };

          if (checkLength(deladdresshousenumber, 1, 10000)) {
                    deladdresshousenumber.removeClass("errorhighlight");
          } else {
                    deladdresshousenumber.addClass("errorhighlight");
                    errormessage += "Delivery - Please enter your house number or name<br/>";
                    returnvalue = false;
          };

          if (checkLength(deladdress1, 1, 10000)) {
                    deladdress1.removeClass("errorhighlight");
          } else {
                    deladdress1.addClass("errorhighlight");
                    errormessage += "Delivery - Please enter your street or road name<br/>";
                    returnvalue = false;
          };

          if (checkLength(deladdresscity, 1, 10000)) {
                    deladdresscity.removeClass("errorhighlight");
          } else {
                    deladdresscity.addClass("errorhighlight");
                    errormessage += "Delivery - Please enter your city or town name<br/>";
                    returnvalue = false;
          };
          if (checkLength(deladdresspostcode, 1, 10000)) {
                    deladdresspostcode.removeClass("errorhighlight");
          } else {
                    deladdresspostcode.addClass("errorhighlight");
                    errormessage += "Delivery - Please enter your post or zip code<br/>";
                    returnvalue = false;
          };

          if (conterms.is(":checked")) {
                    conterms.removeClass("errorhighlight");
          } else {
                    conterms.addClass("errorhighlight");
                    errormessage += "Terms - Please check the box to accept our terms and conditions of sale<br/>";
                    returnvalue = false;
          };


          //Display or clear errors
          if (returnvalue == false) {
                    jAlert(errormessage, appname);
                    selectCheckOutTabs("checkout");
          } else {
                    allFields.removeClass("errorhighlight");
          };

          return returnvalue;

};

// CONFIRM ORDER
function confirmOrder() {
          ws_2g_Core.WSConfirmOrder(confirmOrder_SucceededCallback, TimeoutCallback, FailedCallback);

};

// CONFIRM ORDER SUCCEEDED
function confirmOrder_SucceededCallback(result) {
          if (result.Success == false) {
                    jAlert(result.ErrorMessage, appname);
          } else {
                    //load and select the returned confirmation 
                    $('#SalesOrderConf').html(result.HTMLString);
                    selectCheckOutTabs('confirmation');

          };
};



