// ------------------------------------------------------------------------------------------
// Copyright AspDotNetStorefront.com, 1995-2011.  All Rights Reserved.
// http://www.aspdotnetstorefront.com
// For details on this license please visit  the product homepage at the URL above.
// THE ABOVE NOTICE MUST REMAIN INTACT. 
// ------------------------------------------------------------------------------------------

function makeHttpRequest(url, element, calltype) {
  var http_request = false;
  if (window.XMLHttpRequest) { 
    http_request = new XMLHttpRequest();
    if (http_request.overrideMimeType) {
      http_request.overrideMimeType('text/xml');
    }
  } else if (window.ActiveXObject) { // IE
    try {
      http_request = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        http_request = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) {}
    }
  }
  if (!http_request) {
    alert('Browser doesn\'t support Ajax. Site will NOT FULLY function properly.');
    return false;
  }
  http_request.onreadystatechange = function() {
    if (http_request.readyState == 4) {
      if (http_request.status == 200) {
        loadXML(http_request.responseXML,calltype);
      } else {
        alert('There was a problem with the request. (Code: ' + http_request.status + ')');
      }
    }
  }
  http_request.open('GET', url, true);
  http_request.send(null);
}

function loadXML(xml,calltype)
{
	if(calltype == 'shipping')
	{
		var string = '';
		var root = xml.getElementsByTagName('Shipping')[0];
		for (i = 0; i < root.childNodes.length; i++)
		{
    		var node = root.childNodes[i].tagName;
		    string += root.getElementsByTagName(node)[0].childNodes[0].nodeValue + "<br />";
		}
		if (document.getElementById('ShipQuote'))
		{
			document.getElementById('ShipQuote').innerHTML = string;
		}
	}
	if(calltype == 'pricing')
	{
		var prnode = xml.getElementsByTagName('PriceHTML')[0];
		var variantnode = xml.getElementsByTagName('VariantID')[0];
		var NewPrice = "Not Found";
		var VariantID = "0";
		if(prnode != undefined)
		{
			NewPrice = xml.getElementsByTagName('PriceHTML')[0].firstChild.data
		}
		if(variantnode != undefined)
		{
			VariantID = xml.getElementsByTagName('VariantID')[0].firstChild.data
		}
		if (document.getElementById('VariantPrice_' + VariantID))
		{
			document.getElementById('VariantPrice_' + VariantID).innerHTML = NewPrice;
		}
	}
	if (calltype == 'productcascade')
	{
		var chtml='';
		var testnode = xml.getElementsByTagName('productid')[0];
		if(testnode != undefined) {
			var coptions = xml.getElementsByTagName('option');
			var cpid = xml.getElementsByTagName('productid')[0].firstChild.nodeValue;
			var crow1optionid = xml.getElementsByTagName('row1optionid')[0].firstChild.nodeValue;
			var crowid = xml.getElementsByTagName('rowid')[0].firstChild.nodeValue;
			var cparid = xml.getElementsByTagName('parentoptionid')[0].firstChild.nodeValue;
			var cvarid = xml.getElementsByTagName('defaultvariantid')[0].firstChild.nodeValue;
			chtml += '<b>'+xml.getElementsByTagName('parentoptionname')[0].firstChild.nodeValue+'</b><br />';
			chtml += '<select onchange="if(typeof(getCascadeOptions) == \'function\') { golabobj=this; getCascadeOptions('+cpid+','+cvarid+', '+cparid+','+crowid+','+crow1optionid+',this.value);}">';
			chtml += '<option value="0">Please select an option</option>';
			for (i = 0; i < coptions.length; i++) {
				chtml += '<option value="'+coptions[i].getElementsByTagName('id')[0].firstChild.nodeValue+ '">';
				chtml += coptions[i].getElementsByTagName('name')[0].firstChild.nodeValue + '</label>';
				chtml += '</option>';
			}
			chtml += '</select>';
			document.getElementById('optionBlock'+crowid).innerHTML = chtml;
			if (crowid==2) {
				$('#optionBlock3 select').val('0');		
				$('#optionBlock3 select').attr('disabled','disabled');		
			}
		}
	}
	if(calltype == 'productoptions2') {
		NewPrice = xml.getElementsByTagName('PriceHTML')[0].firstChild.data;
		if (NewPrice == 'Option Configuration NOT Valid') {
			ProductID = xml.getElementsByTagName('ProductID')[0].firstChild.data;
			var DefaultVariantID = xml.getElementsByTagName('DefaultVariantID')[0].firstChild.data;

			document.getElementById('VariantPrice_' + DefaultVariantID).innerHTML = '<span class="variantprice">Price: &#163; - Please select your options</span>';
			document.getElementById('VariantReversePrice_' + DefaultVariantID).innerHTML = '';
			document.getElementById('VariantName_' + DefaultVariantID).innerHTML = 'n/a';
			$('.AddToCartButton').hide();
			if (!$('.AddToCartButton2').length) {
			    $('<img src="App_Themes/Skin_2/images/custom/productpages/add-to-cart.jpg" class="AddToCartButton2" onClick="alert(\'Price: &#163; - Please select your options\')" />').insertAfter('.AddToCartButton');
			}
		}
		else
		{
			$('.AddToCartButton2').remove();
			$('.AddToCartButton').show();
			calltype = 'productoptions'; 
		}
	}
	
	if(calltype == 'productoptions' || calltype == 'productvariants')
	{
	    var prnode = xml.getElementsByTagName('PriceHTML')[0];
	    var prreversenode = xml.getElementsByTagName('PriceReverse')[0].firstChild.data;
		var productnode = xml.getElementsByTagName('ProductID')[0];
		var variantnode = xml.getElementsByTagName('VariantID')[0];
		var defualtvariantnode = xml.getElementsByTagName('DefaultVariantID')[0];
		var variantnamenode = xml.getElementsByTagName('VariantName')[0];
		var manufacturerpartnumbernode = xml.getElementsByTagName('VariantManufacturerPartNumber')[0];
		var msrpnode = xml.getElementsByTagName('MSRP')[0];
		var msrpsavingnode = xml.getElementsByTagName('MSRPSaving')[0];
		var variantshippingcharge = xml.getElementsByTagName('VariantShippingCharge')[0];
		var variantskusuffixnode = xml.getElementsByTagName('VariantManufacturerPartNumber')[0];
		var VariantSKUSuffix = "Not Found";
		var NewPrice = "Not Found";
		var ProductID = "0";
		var VariantID = "0";
		var DefaultVariantID = "0";
		var VariantName = "Not Found";
		var VariantManufacturerPartNumber = "Not Found";
		var MSRP = "0";
		var MSRPSaving = "0";
		var VariantShippingCharge = "Not Found";
		if(prnode != undefined)
		{
			NewPrice = xml.getElementsByTagName('PriceHTML')[0].firstChild.data
		}
		if (NewPrice == 'Option Configuration NOT Valid') {
			ProductID = xml.getElementsByTagName('ProductID')[0].firstChild.data;
			var DefaultVariantID = xml.getElementsByTagName('DefaultVariantID')[0].firstChild.data;

			document.getElementById('VariantPrice_' + DefaultVariantID).innerHTML = '<span class="variantprice">Price: &#163; - Please select an option</span>';
			document.getElementById('VariantReversePrice_' + DefaultVariantID).innerHTML = '';
			document.getElementById('VariantName_' + DefaultVariantID).innerHTML = 'n/a';
			$('.AddToCartButton').hide();
			if (!$('.AddToCartButton2').length) {
			    $('<img src="App_Themes/Skin_2/images/custom/productpages/add-to-cart.jpg" class="AddToCartButton2" onClick="alert(\'Price: &#163; - Please select an option\')" />').insertAfter('.AddToCartButton');
			}
			return;
		}
		else
		{
			$('.AddToCartButton2').remove();
			$('.AddToCartButton').show();
		}
		if(productnode != undefined)
		{
			ProductID = xml.getElementsByTagName('ProductID')[0].firstChild.data
		}
		if(variantnode != undefined)
		{
			VariantID = xml.getElementsByTagName('VariantID')[0].firstChild.data
		}
		if(defualtvariantnode != undefined)
		{
			DefaultVariantID = xml.getElementsByTagName('DefaultVariantID')[0].firstChild.data
		}
		if(variantnamenode != undefined)
		{
			VariantName = xml.getElementsByTagName('VariantName')[0].firstChild.data
		}
		if(manufacturerpartnumbernode != undefined)
		{
			if (xml.getElementsByTagName('VariantManufacturerPartNumber')[0].firstChild != undefined)
			{
				VariantManufacturerPartNumber = xml.getElementsByTagName('VariantManufacturerPartNumber')[0].firstChild.data
			}
		}
		if(variantskusuffixnode != undefined)
		{
			if (xml.getElementsByTagName('VariantSKUSuffix')[0].firstChild != undefined)
			{
				VariantSKUSuffix = xml.getElementsByTagName('VariantSKUSuffix')[0].firstChild.data
			}
		}
		if(msrpnode != undefined)
		{
			MSRP = xml.getElementsByTagName('MSRP')[0].firstChild.data
		}
		if(msrpsavingnode != undefined)
		{
			MSRPSaving = xml.getElementsByTagName('MSRPSaving')[0].firstChild.data
		}
		if(variantshippingcharge != undefined)
		{
			VariantShippingCharge = xml.getElementsByTagName('VariantShippingCharge')[0].firstChild.data
		}
		if (document.getElementById('VariantID_' + ProductID + '_' + DefaultVariantID))
		{
			document.getElementById('VariantID_' + ProductID + '_' + DefaultVariantID).value = VariantID;
		}
		if (document.getElementById('VariantPrice_' + DefaultVariantID))
		{
			document.getElementById('VariantPrice_' + DefaultVariantID).innerHTML = NewPrice;

        }
        if (document.getElementById('VariantReversePrice_' + DefaultVariantID)) {
            document.getElementById('VariantReversePrice_' + DefaultVariantID).innerHTML = prreversenode;
        }
		var productCode = VariantName;
		if(calltype == 'productvariants' || calltype == 'productoptions')
		{
			productCode = VariantSKUSuffix;
		}
		if (document.getElementById('VariantName_' + DefaultVariantID))
		{
			document.getElementById('VariantName_' + DefaultVariantID).innerHTML = productCode;
		}
		if (document.getElementById('RRP_' + DefaultVariantID))
		{
			if (MSRP == "0")
			{
				document.getElementById('RRP_' + DefaultVariantID).innerHTML = '';
			}
			else
			{
				document.getElementById('RRP_' + DefaultVariantID).innerHTML = 'R.R.P &pound;' + MSRP;
			}
		}
		if (document.getElementById('RRPSaving_' + DefaultVariantID))
		{
			if (MSRP == "0")
			{
				document.getElementById('RRPSaving_' + DefaultVariantID).innerHTML = '';
			}
			else
			{
				document.getElementById('RRPSaving_' + DefaultVariantID).innerHTML = MSRPSaving + '% R.R.P Saving';
			}
		}
		if (document.getElementById('ShippingEst_' + DefaultVariantID))
		{
			document.getElementById('ShippingEst_' + DefaultVariantID).innerHTML = VariantShippingCharge;
		}
		setVariable('VariantMinimumQty_' + ProductID + '_' + DefaultVariantID, VarMinQty[VariantID]);
		setVariable('SelectedVariantInventory_' + ProductID + '_' + DefaultVariantID, VarInventory[VariantID]);
	}
}

function setVariable(variable, value)
{
    if (typeof(variable) != 'undefined')
    {
        variable = value;
    }
}

function getShipping()
{
	if(document.getElementById('Quantity') == undefined || document.getElementById('VariantID') == undefined)
	{
		return;
	}
	var VariantID = document.getElementById('VariantID');
	var Quantity = document.getElementById('Quantity');
  if(Quantity == '')
  {
   Quantity = '1';
  }
  var Country = '';
  if(document.getElementById('Country').length > 0)
  {
	  Country = document.getElementById('Country').options[document.getElementById('Country').selectedIndex].value;
  }
  else
  {
	  Country = document.getElementById('Country').value;
  }
  var State = '';
  if(document.getElementById('State').length > 0)
  {
	  State = document.getElementById('State').options[document.getElementById('State').selectedIndex].value;
  }
  else
  {
	  State = document.getElementById('State').value;
  }
  var PostalCode = document.getElementById('PostalCode');
  
  if (Country.length > 0) {
    if (State.length > 0) {
      if (PostalCode.value.length > 4) {
        if (Quantity.value > 0) {
          Cookies.create('countrycookie',Country,99);
          Cookies.create('statecookie',State,99);
          Cookies.create('postalcookie',PostalCode.value,99);
          var url = "ajaxShipping.aspx?VariantID="+VariantID.value+"&Quantity="+Quantity.value+"&Country="+escape(Country)+"&State="+escape(State)+"&PostalCode="+escape(PostalCode.value);
          makeHttpRequest(url,undefined,'shipping');
        } else {
          Cookies.erase('countrycookie');
          Cookies.erase('statecookie');
          Cookies.erase('postalcookie');
          Error('qty');
        }
      } else {
        Cookies.erase('countrycookie');
        Cookies.erase('statecookie');
        Cookies.erase('postalcookie');
        Error('postal');
      }
    } else {
      Cookies.erase('countrycookie');
      Cookies.erase('statecookie');
      Cookies.erase('postalcookie');
      Error('state');
    }
  } else {
    Cookies.erase('countrycookie');
    Cookies.erase('statecookie');
    Cookies.erase('postalcookie');
    Error('country');
  }
}


function getPricing(ProductID,VariantID)
{
	if(ProductID == undefined || VariantID == undefined)
	{
		return;
	}

    var url = "ajaxPricing.aspx?ProductID=" + ProductID + "&VariantID=" + VariantID + "ShippingMethod=2";

    makeHttpRequest(url,undefined,'pricing');
}

function getVariantPricing(ProductID, VariantID, DefaultVariantId, ShippingMethodId)
{
	if(ProductID == undefined || VariantID == undefined || DefaultVariantId == undefined)
	{
		return;
	}

	var url = "ajaxPricing.aspx?ProductID=" + ProductID + "&VariantID=" + VariantID + "&DefaultVariantId=" + DefaultVariantId;

    makeHttpRequest(url,undefined,'productvariants');
}

function getDefaultProductOptions(ProductId, DefaultVariantId, ShippingMethodId)
{
    if(DefaultVariantId == undefined || ProductId == undefined)
	{
		return;
	}
	
	var productOptionIds = '';
	for (i=0; i<ProductOptions.length; i++)
	{
	    if (ProductOptions[i] != undefined)
	    {
	        if (productOptionIds.length > 0)
	        {
	            productOptionIds = productOptionIds + ',';
	        }
	        productOptionIds = productOptionIds + ProductOptions[i];
	    }
	}

    var url = "ajaxPricing.aspx?ProductID=" + ProductId + "&DefaultVariantId=" + DefaultVariantId + "&ProductOptionIDs=" + productOptionIds + "&ShippingMethodID=" + ShippingMethodId;
    
    makeHttpRequest(url,undefined,'productoptions');
}

function getProductOptions(ProductId, DefaultVariantId, ParentProductOptionID, ProductOptionID, ShippingMethodId)
{
	if(DefaultVariantId == undefined || ProductId == undefined || ParentProductOptionID == undefined || ProductOptionID == undefined)
	{
		return;
	}
	
	ProductOptions[ParentProductOptionID] = ProductOptionID;

	var productOptionIds = '';
	for (i=0; i<ProductOptions.length; i++)
	{
	    if (ProductOptions[i] != undefined)
	    {
	        if (productOptionIds.length > 0)
	        {
	            productOptionIds = productOptionIds + ',';
	        }
	        productOptionIds = productOptionIds + ProductOptions[i];
	    }
	}

    var url = "ajaxPricing.aspx?ProductID=" + ProductId + "&DefaultVariantId=" + DefaultVariantId + "&ProductOptionIDs=" + productOptionIds + "&ShippingMethodID=" + ShippingMethodId;
    
    makeHttpRequest(url,undefined,'productoptions');
}

function getCascadeOptions(ProductId, DefaultVariantId, ParentProductOptionID, RowID, Row1OptionID,Row2OptionID)
{
    var url = "ajaxCascade.aspx?ProductID=" + ProductId + "&DefaultVariantID=" + DefaultVariantId + "&Row1OptionID=" + Row1OptionID + "&Row2OptionID=" + Row2OptionID+"&RowID=" + (RowID+1);

    makeHttpRequest(url,undefined,'productcascade');
	
	if (RowID==1) {
		ProductOptions[RowID] = Row1OptionID;
		ProductOptions[2] = 0;
		if (ProductOptions.length>3) {
			ProductOptions[3] = 0;
		}
	}
	if (RowID==2)
	{
		ProductOptions[RowID] = Row2OptionID;	
		if (ProductOptions.length>3) {
			ProductOptions[3] = 0;
		}
	}
	if (RowID==3)
	{
		ProductOptions[RowID] = Row2OptionID;	
	}
	
	if (Row2OptionID==0) {
		getCasProductOptions(ProductId,DefaultVariantId, ParentProductOptionID,Row1OptionID,2);
	}
	else 
	{
		getCasProductOptions(ProductId,DefaultVariantId, ParentProductOptionID,Row2OptionID,2);	
	}
		
}

function getCasProductOptions(ProductId, DefaultVariantId, ParentProductOptionID, ProductOptionID, ShippingMethodId)
{
	if(DefaultVariantId == undefined || ProductId == undefined || ParentProductOptionID == undefined || ProductOptionID == undefined)
	{
		return;
	}
	
	var productOptionIds = '';
	for (i=0; i<ProductOptions.length; i++)
	{
	    if ((ProductOptions[i] != undefined)&&(ProductOptions[i] != -1))
	    {
	        if (productOptionIds.length > 0)
	        {
	            productOptionIds = productOptionIds + ',';
	        }
	        productOptionIds = productOptionIds + ProductOptions[i];
	    }
	}

    var url = "ajaxPricing.aspx?ProductID=" + ProductId + "&DefaultVariantId=" + DefaultVariantId + "&ProductOptionIDs=" + productOptionIds + "&ShippingMethodID=" + ShippingMethodId;
    makeHttpRequest(url,undefined,'productoptions2');
}

function Error(type) {
  if (type == 'country') {
    document.getElementById('ShipQuote').innerHTML = "Select A Country";
  }
  if (type == 'state') {
    document.getElementById('ShipQuote').innerHTML = "Select A State";
  }
  if (type == 'postal') {
    document.getElementById('ShipQuote').innerHTML = "Enter Postal Code";
  }
  if (type == 'qty') {
    document.getElementById('ShipQuote').innerHTML = "Enter A Quantity";
  }
}

var Cookies = {
  init: function () {
    var allCookies = document.cookie.split('; ');
    for (var i=0;i<allCookies.length;i++) {
      var cookiePair = allCookies[i].split('=');
      this[cookiePair[0]] = cookiePair[1];
    }
  },
  create: function (name,value,days) {
    if (days) {
      var date = new Date();
      date.setTime(date.getTime()+(days*24*60*60*1000));
      var expires = "; expires="+date.toGMTString();
    }
    else var expires = "";
    document.cookie = name+"="+value+expires+"; path=/";
    this[name] = value;
  },
  erase: function (name) {
    this.create(name,'',-1);
    this[name] = undefined;
  }
};
Cookies.init();

window.onload=function readCookies() {
  if (!document.getElementById) return false;
  var countrycookie = Cookies['countrycookie'];
  var statecookie = Cookies['statecookie'];
  var postalcookie = Cookies['postalcookie'];
  if (countrycookie) {
    if (statecookie) {
      if (postalcookie) {
        if (document.getElementById('Country') != null) {
          document.getElementById('Country').value = Cookies['countrycookie'];
          if (document.getElementById('State') != null) {
            document.getElementById('State').value = Cookies['statecookie'];
            if (document.getElementById('PostalCode') != null) {
              document.getElementById('PostalCode').value = Cookies['postalcookie'];
              if (document.getElementById('VariantID') != null) {
                if (document.getElementById('Quantity') != null) {
                  getShipping();
                }
              }
            }
          }
        }
      }
    }
  }
}
