// Toggles display of table row and dropdown containing states - the states are only displayed for countryCode US
function toggleStates(countrySelector, stateRowId, stateSelectorId, countryCodeshashTable) {
    try{
        var countryId = countrySelector.options[countrySelector.selectedIndex].value;
        var countryCode = countryCodeshashTable.GetItem(countryId);
        var stateRow = document.getElementById(stateRowId);
        var stateSelector = document.getElementById(stateSelectorId);
        stateRow.style.display = countryCode == 'US' ? '' : 'none';
        stateSelector.disabled = countryCode == 'US' ? false : true;
    }
    catch(e){}
}

// Implements a javascript hashtable
function HashTable() {
    var hashTableItems = {};

    this.ImportItems = function(importstring) {

        try {
            var keyValuePairList = importstring.split(";");

            for (i = 0; i < keyValuePairList.length; i++) {

                var keyValuePair = keyValuePairList[i].split("|");

                var key = keyValuePair[0];
                var value = keyValuePair[1];

                this.SetItem(key, value);
            }
        } catch (ex) { }
    }
    
    this.SetItem = function(key, value) {
        hashTableItems[key] = value;
    }
    this.GetItem = function(key) {
        return hashTableItems[key];
    }
}

// Pic protect is enabled
if(EnablePicProtect==true)
{
	window.onload = trap_images_mouse_events;
}

// Set Vertical Scroll position
window.onscroll = function SetSrollVpos()
{
	try
	{
		for(i=0; i<document.forms.length; i++)
		{
			try
			{
				document.forms[i].VerticalScrollPos.value=document.body.scrollTop;
			}
			catch(e)
			{
			}
		}
	}
	catch(e)
	{
	}
}

// Toggle productmenu - show/hide
function ToggleMenu(ParentCatID)
{
	try
	{
		var SubmenuTable = document.getElementById(ParentCatID);
		
		if(SubmenuTable.style.display=='')
		{
			SubmenuTable.style.display='none';
		}
		else
		{
			SubmenuTable.style.display='';
		}
	}
	catch(e)
	{
	}
}

function ScrollToSavedVPos(Vpos)
{
	try
	{
		if(navigator.userAgent.toLowerCase().indexOf("msie") == -1)
		{
			window.scroll(0,Vpos);
		}
		else
		{
			window.scroll(0,Vpos);
		}
	}
	catch(e)
	{
	}
}


function replace(string,text,by) {
	var strLength = string.length, txtLength = text.length;
    if ((strLength == 0) || (txtLength == 0)) return string;

    var i = string.indexOf(text);
    if ((!i) && (text != string.substring(0,txtLength))) return string;
    if (i == -1) return string;

    var newstr = string.substring(0,i) + by;

    if (i+txtLength < strLength) newstr += replace(string.substring(i+txtLength,strLength),text,by);

    return newstr;
}

function formatAsMoney(mnt) {
	mnt -= 0;
	mnt = (Math.round(mnt*100))/100;
	return (mnt == Math.floor(mnt)) ? mnt + '.00' : ( (mnt*10 == Math.floor(mnt*10)) ? mnt + '0' : mnt);
}

function disable_right_click(e) 
{
	var browser = navigator.appName.substring ( 0, 9 );
	var event_number = 0;
	
	if (browser=="Microsoft")
		event_number = event.button;
	else if (browser=="Netscape")
		event_number = e.which;

	if ( event_number==2 || event_number==3 ) {
		alert (PicprotectMsg);
		return (false);
	}

	return (true);
}

function trap_images_mouse_events () {
if ( document.images ) {
	for (var pic=0; pic<document.images.length; pic++)
	document.images[pic].onmousedown = disable_right_click;
	}
}


var CanBuy = true;
function BuyProduct(thisform, MinBuyAmount, MaxBuyAmount,BundleMinBuy) {

	if (BundleMinBuy=='True') 
	{
		// MinBuyAmount in bundle mode
		if (parseInt(thisform.AMOUNT.value) % parseInt(MinBuyAmount) > 0)  
		{
			thisform.AMOUNT.value = MinBuyAmount;
			alert(MinBuyMsg + '( '+MinBuyAmount+' )')
			return (false);
		}
		
		if  (isNaN (parseInt(thisform.AMOUNT.value)))
		{
			thisform.AMOUNT.value = MinBuyAmount;
			alert(MinBuyMsg + '( '+MinBuyAmount+' )')
			return (false);
		}
	}
	else
	{
		// MinBuyAmount in normal mode
		
		if (parseInt(thisform.AMOUNT.value) < parseInt(MinBuyAmount)) 
		{
			thisform.AMOUNT.value = MinBuyAmount;
			alert(MinBuyMsg + '( '+MinBuyAmount+' )')
			return (false);
		}
		if  (isNaN (parseInt(thisform.AMOUNT.value)))
		{
			thisform.AMOUNT.value = MinBuyAmount;
			alert(MinBuyMsg + '( '+MinBuyAmount+' )')
			return (false);
		}
	}

	if (parseInt(MaxBuyAmount) > 0 ) {
		if (parseInt(thisform.AMOUNT.value) > parseInt(MaxBuyAmount)) {
			thisform.AMOUNT.value = MinBuyAmount;
			alert(MaxBuyMsg + ' ( '+MaxBuyAmount+' )')
			return (false);
		}
	}	 

	if (!CanBuy) 
	{
        alert(SelectVarMsg);
	}

	return (CanBuy);

}

function BuyRelatedProduct(thisform, MinBuyAmount, MaxBuyAmount, BundleMinBuy)
{

	if (BundleMinBuy=='True') 
	{
		// MinBuyAmount in bundle mode
		if (parseInt(thisform.amount.value) % parseInt(MinBuyAmount) > 0)  
		{
			thisform.amount.value = MinBuyAmount;
			alert(MinBuyMsg + '( '+MinBuyAmount+' )')
			return (false);
		}
	}
	else
	{
		// MinBuyAmount in normal mode
		if (parseInt(thisform.amount.value) < parseInt(MinBuyAmount)) 
		{
			thisform.amount.value = MinBuyAmount;
			alert(MinBuyMsg + '( '+MinBuyAmount+' )')
			return (false);
		}
	}

	if (parseInt(MaxBuyAmount) > 0 ) 
	{
		if (parseInt(thisform.amount.value) > parseInt(MaxBuyAmount)) 
		{
			thisform.amount.value = MinBuyAmount;
			alert(MaxBuyMsg + ' ( '+MaxBuyAmount+' )')
			return (false);
		}
	}	 

	return (true);

}

function SilentAjaxGetRequest(RequestPage)
{
	var objReq ;
    
    // Create XMLhttp object
    objReq = CreateXmlHttpObj();

    objReq.onreadystatechange = function() 
    {
	    if (objReq.readyState == 4)
	    {
		    // request completet
	    }
    };
	objReq.open("GET", RequestPage,false);
	objReq.send(null);
}


function SendRequest(RequestPage,ContentContainer,PostStr,ResponseReturnMode)
{
    var objReq ;

    // Create XMLhttp object
    objReq = CreateXmlHttpObj();

    // set the call back
    objReq.onreadystatechange = function() 
    {
	    if (objReq.readyState == 4)
	    {
			    ProcessResponse(objReq,ContentContainer,ResponseReturnMode);
	    }
    };
    objReq.open("POST", RequestPage,true);
    objReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
    objReq.send(PostStr);
    
}

function ProcessResponse(objReq,ContentContainer,ResponseReturnMode)
{
  if(ResponseReturnMode==1)
  {
    ContentContainer.innerHTML = objReq.responseText;
  }
  if(ResponseReturnMode==2)
  {
   if(objReq.responseText != '')
   {
	alert(objReq.responseText);
   }
  }
  objReq = null;
}

function AddFavorite(ProductID,Amount)
{
  var poststr
   poststr = "ProductID=" + ProductID +
  "&amount=" + Amount +
  "&AddProduct=1" + 
  "&ShowAjaxResponse=1";   
  SendRequest('/shop/Favorites.asp','',poststr,2); 
}

function ChangeSortOrder(dropdown) {

    try {
        var sortfield = dropdown[dropdown.selectedIndex].value;
        SilentAjaxGetRequest('/shop/AjaxWrapper.asp?FC=changesortorder&SortField=' + sortfield);
        document.location.href = document.location.href;
    }
    catch (e) {
    }

}

function ToggleVat() {
    SilentAjaxGetRequest('/shop/AjaxWrapper.asp?FC=togglevat');
    document.location.href = document.location.href;
}

function ChangeCurrency(cur) {
	var Url;
	var QSPrefix;
	
	try {
		if(DontUseFrames=='')
		{
			Url = parent.main.document.location.href;
		}
		if(DontUseFrames=='1')
		{
			Url = document.location.href;
		}
		
		if (Url.indexOf("?") == -1) {
			QSPrefix = "?";
		} else {
			QSPrefix = "&";
		}
		
		if(Keyword != '')
			{
			var urlTmp = Url.toLowerCase();
			if (urlTmp.indexOf("keyword") == -1) 
				{
				Url = Url +""+ QSPrefix +"Keyword="+ escape(Keyword);
				}
			}	

		if (Url.indexOf("?") == -1) {
			QSPrefix = "?";
		} else {
			QSPrefix = "&";
		}	
								
		if(Url.indexOf("ReloadBasket=1") == -1)
		{
			Url = Url +""+ QSPrefix +"ReloadBasket=1";
		}
		
		if(DontUseFrames=='')
		{
			parent.main.document.location.href = 'ChangeCurrency.asp?UpdateCur=' + cur + '&Url='+ escape(Url);
		}

		if(DontUseFrames=='1')
		{
		    SilentAjaxGetRequest('/shop/ChangeCurrency.asp?UpdateCur=' + cur);
			document.location.href = CurrencyReturnUrl;
		}
		

	} catch (e) {

		Url = 'basket.asp?RefreshAllPrices=1';
		parent.basket.document.location.href = 'ChangeCurrency.asp?UpdateCur=' + cur + '&Url='+ escape(Url);
	}	
}


function PopupPicture(title, img, iw, ih, ProtectMessage, prodID) {

    // Determine if scroll should be activ
    var scroll = 'no'
    var ScreenW = screen.width;
    var ScreenH = screen.height;
    if (ScreenW < iw || ScreenH < ih) {
        scroll = "yes"
    }
    PopupWindow = window.open('/shop/ImagePopup.asp?Title=' + title + '&Image=' + img + '&ProtectMessage=' + ProtectMessage, 'PopupImage' + escape(prodID) + '', 'displayWindow,width=' + iw + ',height=' + ih + ',scrollbars=' + scroll + ',status=no');
}

function ShowBasket()
{
	if(DontUseFrames=='')
	{
		top.main.location.href=ShowBasketUrl;
	}
	
	if(DontUseFrames=='1')
	{
		document.location.href=ShowBasketUrl;
	}
}

function DetectBrowser()
{
	Uagent		= navigator.userAgent.toLowerCase();
	// Actions for firefox
	if(Uagent.indexOf("firefox") != -1)
	{
		// Fix browser bug causing 100% height on tables not to render correctly
		ProductMenuTableHeightFix();
	}
	
	// Copy main content HTML to print div layer
	GeneratePrintOutput();
}

function ProductMenuTableHeightFix()
{
	try
	{
		setTimeout("document.getElementById('ShopMainLayOutTable').style.height= document.body.clientHeight;",1000);
	}
	catch(e)
	{
	}
}

function GeneratePrintOutput()
{
	try
	
	{
		// Get HTML content from main TD
		var PrintContent =  document.getElementById('ContentContainer_DIV').innerHTML ;		
		
		// Rename ID and FORM tags on the print content HTML to advoid double occurance and generate js error
		PrintContent = PrintContent.replace(/name=/ig,"Xid="); 
		PrintContent = PrintContent.replace(/id=/ig,"Xid="); 
		PrintContent = PrintContent.replace(/<form/ig,"<Xform"); 
		
		// Write the HMTL content to the div layer
		document.getElementById('PrintContent_DIV').innerHTML = PrintContent;
	}
	catch(e)
	{
	}
}


function checkPhone(PhoneField,Event,Button,CheckSum) 
{

 var phone = PhoneField.value;	
 phoneRegex = /^\d\d\d\d\d\d\d\d$/;
 if( !phone.match( phoneRegex ) ) 
 {
	try{Button.disabled=true;}catch(e){}
 }
 else
 {
	try{Button.disabled=false;}catch(e){}
	
	// Do lookup on enter press
	if (Event.keyCode == 13) 
	{
		
		if(PhoneField.id=='invoicephone')
		{
		    KrakLookup('invoice', CheckSum);
		}
		
		if(PhoneField.id=='deliveryphone')
		{
		    KrakLookup('delivery', CheckSum);
		}
	}

 }
} 

function SegmentSelectorChange(SegmentSelector)
{
	try
	{
		var selectedSegment = SegmentSelector.options[SegmentSelector.selectedIndex].value;
		SegmentSelector.disabled=true;
		SelectSegment(selectedSegment)	
	}
	catch(e)
	{
	}
}

function ProductListVariantSelectorChange(VariantSelector)
{
	try
	{
		var selectedVariant = VariantSelector.options[VariantSelector.selectedIndex].value;
		VariantSelector.disabled=true;
		top.location.href=selectedVariant;	
	}
	catch(e)
	{
		VariantSelector.disabled=false;
	}
}


/*
**************************************************************
Looks up city from zipcode and returns it to input field
**************************************************************
*/
function CityLookUp(ZipCodeField,CityFieldID,CountryFieldID)
{

    try
    {
        var CountryField = document.getElementById(CountryFieldID)
        var CountryID = CountryField[CountryField.selectedIndex].value;
        var CityField = document.getElementById(CityFieldID)
        var ZipCode = ZipCodeField.value
        if(ZipCode.length==4)
        {
             
        // Url to ajaxwrapper page
            var RequestPage = '/shop/ajaxwrapper.asp?FC=GetCity&ZipCode=' + ZipCode + '&CountryID=' + CountryID;

        // Create XMLhttp object
        objReq = CreateXmlHttpObj();

        objReq.onreadystatechange = function() {
            // Request data ready
            if (objReq.readyState == 4) {
                if (objReq.responseText.length > 0) {
                    CityField.value = objReq.responseText
                }
            }
        };
	    objReq.open("GET", RequestPage,true);
	    objReq.send(null);
        }
        
    }
    catch(e) {
    }
}


/*
**************************************************************
Loads customer data from external data source into orderfields
**************************************************************
*/
function KrakLookup(AdressType,CheckSum) {

	var objReq ;
	var phonenumber = "";
	var Adress = "";
	var Adress2 = "";
	var Name = "";
	var Zipcode = "";
	var City = "";
	var Phone = "";
	var Company = "";
	var CustomerType = "";
	var EAN = "";
	var CVR = "";
	var DeliverySuffix = "";
	var NotFound = "0";

	// Look up for invoice adress
	if(AdressType=='invoice'){try{phonenumber = document.getElementById('invoicephone').value;}catch(e){}}
	
	// Look up for delivery adress
	if(AdressType=='delivery')
	{
	DeliverySuffix = "l";
	try{phonenumber = document.getElementById('deliveryphone').value;}catch(e){}
	}
	
	// Url to Shop kraklookup wrapper page
	var RequestPage = '/shop/kraklookup.asp?phonenumber=' + phonenumber + '&CheckSum=' + CheckSum

	// Disable lookup button
	try{document.getElementById(DeliverySuffix+'kraklookupbtn').disabled=true;}catch(e){}

	// Create XMLhttp object
    objReq = CreateXmlHttpObj();

    objReq.onreadystatechange = function() {
    	// Request data ready
    	if (objReq.readyState == 4) {

    		// Create xml dom document
    		XmlDomDoc = objReq.responseXML
			
    		// Parse xml response to local variables
    		try { Adress = XmlDomDoc.getElementsByTagName('Adress').item(0).childNodes.item(0).nodeValue; } catch (e) { }
    		try { Adress2 = XmlDomDoc.getElementsByTagName('Adress2').item(0).childNodes.item(0).nodeValue; } catch (e) { }
    		try { Name = XmlDomDoc.getElementsByTagName('Name').item(0).childNodes.item(0).nodeValue; } catch (e) { }
    		try { Zipcode = XmlDomDoc.getElementsByTagName('ZipCode').item(0).childNodes.item(0).nodeValue; } catch (e) { }
    		try { City = XmlDomDoc.getElementsByTagName('City').item(0).childNodes.item(0).nodeValue; } catch (e) { }
    		try { Phone = XmlDomDoc.getElementsByTagName('Phone').item(0).childNodes.item(0).nodeValue; } catch (e) { }
    		try { Company = XmlDomDoc.getElementsByTagName('Company').item(0).childNodes.item(0).nodeValue; } catch (e) { }
    		try { CustomerType = XmlDomDoc.getElementsByTagName('CustomerType').item(0).childNodes.item(0).nodeValue; } catch (e) { }
    		try { EAN = XmlDomDoc.getElementsByTagName('EAN').item(0).childNodes.item(0).nodeValue; } catch (e) { }
    		try { CVR = XmlDomDoc.getElementsByTagName('CVR').item(0).childNodes.item(0).nodeValue; } catch (e) { }
    		try { NotFound = XmlDomDoc.getElementsByTagName('CustomerNotFound').item(0).childNodes.item(0).nodeValue; } catch (e) { }

    		// Insert values into order fields
    		try { document.getElementById(DeliverySuffix + 'address').value = Adress; } catch (e) { }
    		try { document.getElementById(DeliverySuffix + 'address2').value = Adress2; } catch (e) { }
    		try { document.getElementById(DeliverySuffix + 'name').value = Name; } catch (e) { }
    		try { document.getElementById(DeliverySuffix + 'zipcode').value = Zipcode; } catch (e) { }
    		try { document.getElementById(DeliverySuffix + 'city').value = City; } catch (e) { }
    		try { document.getElementById(DeliverySuffix + 'phone').value = Phone; } catch (e) { }
    		try { document.getElementById(DeliverySuffix + 'cvrnr').value = CVR; } catch (e) { }
    		try { document.getElementById(DeliverySuffix + 'ean').value = EAN; } catch (e) { }
    		try { document.getElementById(DeliverySuffix + 'company').value = Company; } catch (e) { }

    		// Select customer type
    		if (AdressType == 'invoice') {
    			try {
    				if (CustomerType == 1) { document.Orderstep1Form.CustTypeID.selectedIndex = 1; }
    				if (CustomerType == 0) { document.Orderstep1Form.CustTypeID.selectedIndex = 0; }
    				ToggleFields();
    			}
    			catch (e) {
    			}
    		}

    		// Display customer not found text
    		if (NotFound == 1) {
    			try { document.getElementById('KrakLookUpNotFoundMsg').style.display = ''; } catch (e) { }
    		}
    		if (NotFound == 0) {
    			try { document.getElementById('KrakLookUpNotFoundMsg').style.display = 'none'; } catch (e) { }
    		}

    		// Enable lookup button
    		try { document.getElementById(DeliverySuffix + 'kraklookupbtn').disabled = false; } catch (e) { }

    		// Clean up
    		XmlDomDoc = null;
    		objReq = null;

    	}
    };
	objReq.open("GET", RequestPage,true);
	objReq.send(null);	
}

/*
******************************************************************
Loads customer delivery data from specified order into orderfields
******************************************************************
*/
function CustomerDeliveryInfoLookup(OrderID) {

    try {
        var objReq;
        var phonenumber = "";
        var Address = "";
        var Address2 = "";
        var Name = "";
        var Zipcode = "";
        var City = "";
        var Phone = "";
        var Company = "";
        var EAN = "";
        var Fax = "";
        var Email = "";
        var Country = "";
        var CustomerType = "0";

        // Url to Shop kraklookup wrapper page
        var RequestPage = '/shop/AjaxWrapper.asp?FC=getdelivertoinfo&OrderID=' + OrderID

        // Create XMLhttp object
        objReq = CreateXmlHttpObj();

        objReq.onreadystatechange = function() {
            // Request data ready
            if (objReq.readyState == 4) {

                // Create xml dom document
                XmlDomDoc = objReq.responseXML

                // Parse xml response to local variables
                try { Address = XmlDomDoc.getElementsByTagName('Address').item(0).childNodes.item(0).nodeValue; } catch (e) { }
                try { Address2 = XmlDomDoc.getElementsByTagName('Address2').item(0).childNodes.item(0).nodeValue; } catch (e) { }
                try { Name = XmlDomDoc.getElementsByTagName('Name').item(0).childNodes.item(0).nodeValue; } catch (e) { }
                try { Zipcode = XmlDomDoc.getElementsByTagName('ZipCode').item(0).childNodes.item(0).nodeValue; } catch (e) { }
                try { City = XmlDomDoc.getElementsByTagName('City').item(0).childNodes.item(0).nodeValue; } catch (e) { }
                try { Phone = XmlDomDoc.getElementsByTagName('Phone').item(0).childNodes.item(0).nodeValue; } catch (e) { }
                try { Company = XmlDomDoc.getElementsByTagName('Company').item(0).childNodes.item(0).nodeValue; } catch (e) { }
                try { CustomerType = XmlDomDoc.getElementsByTagName('CustomerType').item(0).childNodes.item(0).nodeValue; } catch (e) { }
                try { EAN = XmlDomDoc.getElementsByTagName('EAN').item(0).childNodes.item(0).nodeValue; } catch (e) { }
                try { CVR = XmlDomDoc.getElementsByTagName('CVR').item(0).childNodes.item(0).nodeValue; } catch (e) { }
                try { Email = XmlDomDoc.getElementsByTagName('Email').item(0).childNodes.item(0).nodeValue; } catch (e) { }
                try { Fax = XmlDomDoc.getElementsByTagName('Fax').item(0).childNodes.item(0).nodeValue; } catch (e) { }
                try { Country = XmlDomDoc.getElementsByTagName('Country').item(0).childNodes.item(0).nodeValue; } catch (e) { }


                // Insert values into order Delivery fields
                try { document.getElementById('laddress').value = Address; } catch (e) { }
                try { document.getElementById('laddress2').value = Address2; } catch (e) { }
                try { document.getElementById('lname').value = Name; } catch (e) { }
                try { document.getElementById('lcompany').value = Company; } catch (e) { }
                try { document.getElementById('lzipcode').value = Zipcode; } catch (e) { }
                try { document.getElementById('lcity').value = City; } catch (e) { }
                try { document.getElementById('lphone').value = Phone; } catch (e) { }
                try { document.getElementById('lcvrnr').value = CVR; } catch (e) { }
                try { document.getElementById('lean').value = EAN; } catch (e) { }
                try { document.getElementById('lfax').value = Fax; } catch (e) { }
                try { document.getElementById('lemail').value = Email; } catch (e) { }

                // Select Delivery country
                try {
                    var countryselect = document.getElementById('lcountry');
                    for (i = 0; i < countryselect.options.length; i++) {
                        if (countryselect.options[i].innerHTML == Country) {
                            countryselect.options[i].selected = true;
                        }
                        else {
                            countryselect.options[i].selected = false;
                        }
                    }

                }
                catch (e) { }

                // Select customertype
                try {
                    if (CustomerType == '') {
                        CustomerType = '0';
                    }
                    var typeselect = document.getElementById('lCustTypeID');
                    for (i = 0; i < typeselect.options.length; i++) {
                        if (typeselect.options[i].value == CustomerType) {
                            typeselect.options[i].selected = true;
                        }
                        else {
                            typeselect.options[i].selected = false;
                        }
                    }

                }
                catch (e) { }


                // Clean up
                XmlDomDoc = null;
                objReq = null;

            }
        };
        objReq.open("GET", RequestPage, true);
        objReq.send(null);
    }
    catch (e) {
    }   
}

/*
****************************************
Sets the active Segment and reloads page
****************************************
*/
function SelectSegment(SegmentID)
{
	var objReq ;
	var requestpage;

	if(SegmentID == "")
	{
		requestpage = '/shop/default.asp?ClearSegments=1'
	}
	else
	{
		requestpage = '/shop/default.asp?Segment='+SegmentID
	}

	// Create XMLhttp object
    objReq = CreateXmlHttpObj();
	
    objReq.onreadystatechange = function() 
    {
	    if (objReq.readyState == 4)
	    {
		    top.location.href= top.location.href;	
	    }
    };
	objReq.open("GET", requestpage,true);
	objReq.send(null);
}


/*
************************************************
Returns HTML content for pay and shipping method
************************************************
*/
function GetMethods(MethodType,ReqMethodID,ContentContainer,Debug,ServiceCOD)
{
    var objReq ;
    var requestpage;
    var ParamStr

    if(MethodType=='ShippingMethods') ParamStr = "&PayMethodID="+ReqMethodID;
    if(MethodType=='PayMethods') ParamStr = "&ShippingMethodID="+ReqMethodID;

    ParamStr = ParamStr + "&Debug=" + Debug
    
    requestpage = '/shop/order2.asp?GetMethods=' + MethodType + ParamStr

    // Create XMLhttp object
    objReq = CreateXmlHttpObj();

    objReq.onreadystatechange = function() {
        if (objReq.readyState == 4) {
            ContentContainer.innerHTML = objReq.responseText


            // Indicate that a paymethod using COD is selected - this will disable som shipping method services
            if (ServiceCOD != undefined) {
                CodPayMethodSelected(ServiceCOD)
            }

        }
    };
	objReq.open("GET", requestpage,true);
	objReq.send(null);

	

	//GLS Parcel shops
	if (MethodType == 'PayMethods') {
	    try {

	        var GlsParselShops_TR = document.getElementById('GLS_ParselShops_' + ReqMethodID);
	        
	        // Start by hiding all GLS parcel shops
	        try {
	            var ParselShopRows = document.getElementsByClassName('GLS_ParselShops_TR');
	            for (var i = ParselShopRows.length - 1; i >= 0; --i) {
	                ParselShopRows[i].style.display = 'none';
	            }
	        }
	        catch (e) {
	        }
             
            // Show parcels shops for the active selected shipping method
	        GlsParselShops_TR.style.display = '';
	    }
	    catch (e) {}
	}

}

/*
***************************************
Populates option select box with states
***************************************
*/
function GetStates(StatesDropdownID,CountryDropdownID)
{
	var objReq ;
	var countryID
	var stateID;
	var stateName;

    try
    {
        // Get the country and state option select objects
        var StatesDropDown = document.getElementById(StatesDropdownID);
        var CountryDropDown = document.getElementById(CountryDropdownID);
        var countryID = CountryDropDown[CountryDropDown.selectedIndex].value
        
	    // Url to ajaxwrapper wrapper page
	    var RequestPage = '/shop/ajaxwrapper.asp?FC=GetStates&CountryID=' +  countryID;

        // Create XMLhttp object
        objReq = CreateXmlHttpObj();
            	
	    objReq.onreadystatechange = function() 
		    {
			    // Request data ready
			    if (objReq.readyState == 4)
			    {
				    // Create xml dom document
				    XmlDomDoc = objReq.responseXML	
    				
    				// Select nodelist from xml dom document
				    var StatesNodeList = XmlDomDoc.getElementsByTagName("State")

				    // Clear states option select
				    StatesDropDown.options.length = 0;
    				
    				// Loop state nodelist
				    for (var i = 0; i < StatesNodeList.length; i++)
				    {
					    // Get state values state node
					    stateID = StatesNodeList[i].getElementsByTagName("ID")[0].childNodes[0].nodeValue;  
					    stateName = StatesNodeList[i].getElementsByTagName("Name")[0].childNodes[0].nodeValue;
    												
					    // Insert options in states option select
					    StatesDropDown.options[i] = new Option(stateName,stateID);
				    }
    			
    				// Show the states option select if any active states exists, otherwise hide it
				    if(StatesDropDown.options.length==0)
				    {
				       StatesDropDown.style.display='none';
				    }
				    else
				    {
				      StatesDropDown.style.display='';
				    }
    				
				    // Clean up
				    XmlDomDoc = null;
				    objReq = null;

			    }
		    };
	    objReq.open("GET", RequestPage,true);
	    objReq.send(null);
	
	}
	catch(e)
	{
	}
}

function HideAllProductFeeLayers(activeDiv) {
    var divs = document.getElementsByTagName("div");
    for (var i = 0; i < divs.length; i++) {
        if (activeDiv == null || activeDiv.id != divs[i].id) {
            if (divs[i].id.indexOf("TotalPricePopup_DIV_") > -1) {
                divs[i].style.display = 'none';
            }
        }
    }
}



function DisplayFeesForProduct(productID,callerContainer,amount,caller) {

    // Url to ajaxwrapper wrapper page
    var RequestPage = '/shop/ajaxwrapper.asp?FC=GetMethodFees&ProdID=' + productID + "&Amount=" + amount;

    // Create XMLhttp object
    var objReq = CreateXmlHttpObj();

    if (caller == null) {
        caller = '';
    }

    objReq.onreadystatechange = function() {
        // Request data ready
        if (objReq.readyState == 4) {

            if (callerContainer != null) {

                

                var feediv = document.getElementById('TotalPricePopup_DIV_' + productID + '_' + caller);

                if (feediv == null) {

                    // Create div layer for the popup
                    var feecontainer = document.createElement("div");

                    feecontainer.id = 'TotalPricePopup_DIV_' + productID + '_' + caller;
                    feecontainer.className = "TotalPricePopup_DIV TotalPricePopup_DIV_DropShadow";
                    feecontainer.innerHTML = objReq.responseText

                    // Append the div layer to the caller object
                    callerContainer.appendChild(feecontainer);

                    HideAllProductFeeLayers(feecontainer);
                    
                }
                else {

                    HideAllProductFeeLayers(feediv);
                
                    if (feediv.style.display == '') {
                        feediv.style.display = 'none';
                    }
                    else {
                        feediv.style.display = '';
                    }
                }
            }
            else {
                alert(totalFee);
            }
        }
    }
    objReq.open("GET", RequestPage, true);
    objReq.send(null);
}


/*
************************
Creates a XMLhttp object
************************
*/
function CreateXmlHttpObj()
{
    var objReq;
    
    // for Mozilla, Firefox, Safari, and Netscape
    if (window.XMLHttpRequest) objReq = new XMLHttpRequest();

    // for Internet Explorer
    if (window.ActiveXObject) objReq = new ActiveXObject("microsoft.xmlhttp");
    
    return  objReq;
}

document.getElementsByClassName = function(cl, tags) {

    var tagspattern = tags == undefined ? "*" : tags;
    var retnode = [];
    var myclass = new RegExp('\\b' + cl + '\\b');
    var elem = this.getElementsByTagName(tagspattern);

    for (var i = 0; i < elem.length; i++) {
        var classes = elem[i].className;
        if (myclass.test(classes)) retnode.push(elem[i]);
    }
    return retnode;
};


/*
************************
Adds overlay images to the specified list of images
************************
*/
function AddImageOverlay(targetImageArray,overlayImage,isMediaViewer,imageIdPrefix) 
{

    try {

        if (isMediaViewer == undefined) {
            isMediaViewer = false;
        }
        if (imageIdPrefix == undefined) {
            imageIdPrefix = "";
        }

        // Product info media viewer renders in a different way - so special logics apply here
        if (isMediaViewer) {

            var viewerCanvas = document.getElementById('Canvas');
            var parentdiv = viewerCanvas.parentNode;
            parentdiv.innerHTML = "<div class='Productinfo_Specialoffer_Overlay_DIV' style=';position:absolute;z-index:1;'><img class='Productinfo_Specialoffer_Overlay_IMG' src='" + overlayImage + "'></div>" + parentdiv.innerHTML
            parentdiv.appendChild(overlayImg);
  
        }
        else {

            // Write css style
            document.write("<style type='text/css'>");
            document.write(".Specialoffer_Overlay_DIV {");
            document.write("position:relative;");
            document.write("display:block;");
            document.write("}");
            document.write("img.Specialoffer_Overlay_IMG {");
            document.write("position: absolute;")
            document.write("top: 0px;");
            document.write(" left: 0px;");
            document.write("}");
            document.write("</style>");

            // ID's of the images to apply overlay to
            targetImageArray = targetImageArray.split(",");

            for (x in targetImageArray) {
                var productimage = document.getElementById(imageIdPrefix+targetImageArray[x])
                if(productimage != undefined) {

                    // Create image used for special offer overlay
                    var overlayImg = document.createElement('img');
                    overlayImg.setAttribute('src', overlayImage);
                    overlayImg.className = "Specialoffer_Overlay_IMG";
                    overlayImg.setAttribute('class', 'Specialoffer_Overlay_IMG');
                    overlayImg.setAttribute('border', '0');

                    // Create div container used to store product image and overlayimage
                    var overlayDiv = document.createElement('div');
                    overlayDiv.className = "Specialoffer_Overlay_DIV";
                    overlayDiv.setAttribute('class', 'Specialoffer_Overlay_DIV');
                    overlayDiv.appendChild(productimage.cloneNode(true));
                    overlayDiv.appendChild(overlayImg);

                    // For browsers that support the outerHTML
                    if (productimage.outerHTML) {
                        productimage.outerHTML = overlayDiv.outerHTML;
                    }

                    // For Other browsers
                    else {
                        productimage.parentNode.replaceChild(overlayDiv, productimage);
                    }
                   
                }
            }
        }
    }
    catch (e) {
    }
}




