var xmlHttp;
var currentaction = false;
var pagetoload = false;
var currentpage = false;
var isIE = false;
var divhtml = "";

var orderpage = "constructionpage.html";
var contactpage = "contactpage.html";
var homepage = "homepage.html";
var methodspage = "methodspage.html";
var errorpage = "errorpage.html";


/*******************************************************************
INITIALISE REAL SIMPLE HISTORY
*******************************************************************/
window.dhtmlHistory.create({toJSON: function(o) {return Object.toJSON(o);}, fromJSON: function(s) {return s.evalJSON();}});

function InitRSH()
{
	var loc = window.location.hash.replace( "#", "");
	window.dhtmlHistory.initialize();
	window.dhtmlHistory.addListener(theListener);
	if (loc =="") {window.location.hash = "#homepage";}
	else{theListener(loc, loc);	}

//changeWebPage("homepage")

}

function theListener(page1, page2){	changeWebPage(page1);}
/******************************************************************/


function createXmlHttpRequestObject()
{
	//check if firefox/safari etc
	try
	{
		xmlHttp = new XMLHttpRequest();
		isIE = false;
	}
	catch(ex)
	{
		try 
		{
				//Try IE 5
				xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");	
				isIE = true;			
		}
		catch(ex)
		{
			try
			{
			//try IE 6+
			xmlHttp =  new ActiveXObject("Msxml2.XMLHTTP");
			isIE = true;	
							
			}
			catch(ex)
			{				
				resetCurrentAction();
				alert("Your browser is very old and does not support AJAX please upgrade your browser in order to use this website.");
				xmlHttp = false;
			}
		}
	}
}



function findElement(elem, typestr, idstr)
{
    var divCollection = elem.getElementsByTagName(typestr);
        for (var i=0; i<divCollection.length; i++) 
        {
            if(divCollection[i].getAttribute("id") == idstr) 
            {
                return  divCollection[i];                
            } 
        }
}

function changeToOrdersPage()
{
    changeWebPage("orderpage");
}
function changeToHomePage()
{
    changeWebPage("homepage");
}
function changeToMethodsPage()
{    
    changeWebPage("methodspage");
}
function changeToContactPage()
{
    changeWebPage("contactpage");
}

function changeWebPage(page)
{
	
	try
	{
			var url;
			pagetoload =page;
			switch(page)
			{
				case "homepage": url = homepage; break;
				case "contactpage": url = contactpage; break;
				case "orderpage": url = orderpage;  break;
				case "methodspage": url = methodspage; break;
				default: pagetoload = "errorpage"; url = errorpage; break;
			}
			setCurrentAction("change page");
			if (currentpage != pagetoload)
			{
				sendAjaxRequest(url);			
			}						
	}
	catch(ex)
	{
		resetCurrentAction();
		alert("Cannot change to the selected web page");
	}
}

function runLoadEvents()
{

	if (pagetoload =="orderpage")
	{
		populateMaterialsCombo();
	}	
		
	Effect.Appear(pagetoload, { duration: 1 });
	
}

function implementPageSpecialConditions(elem)
{

    if (pagetoload == "contactpage")
    {
        //hide direction search for scriptaculous
        var temp = findElement(elem, "div", "getdirections");
        temp.style.display = "none";
    }

    
}

function readyStateChangeTriggered()
{	
	if(xmlHttp.readyState < 4)
	{
		if (currentaction == "change page")
		{			
			var loading ="<div id=\"homepage\" style=\"margin:auto;width:798px; height:443px;\"><img 	src=\"images/ajaxloader.gif\" name=\"loadingimage\" 	id=\"loadingimage\"></div>";					
			document.getElementById("BodyDiv").innerHTML = loading;		
		}
		
	}
	else if (xmlHttp.readyState == 4)
	{
		if (currentaction == "change page")
		{			
				var elem = document.createElement("div");
				elem.id = "tempdiv";
				elem.style.display = "none";
				elem.innerHTML = xmlHttp.responseText;				
				var bodydiv = findElement(elem, "div", "BodyDiv");
				var temp =findElement(bodydiv, "div", pagetoload);
				temp.style.display = "none";				
               
               	implementPageSpecialConditions(bodydiv);
    			divhtml = bodydiv.innerHTML;	
    			document.getElementById("BodyDiv").innerHTML = bodydiv.innerHTML;
							
			dhtmlHistory.add(pagetoload, pagetoload);
			currentpage = pagetoload
			try
			{
				var s = document.getElementById("scripts");
				execJS(s);
				
			}
			catch(ex)
			{
				//NO JAVASCRIPT TO LOAD
			}
			
			runLoadEvents();
			return false;
		
		}		
		else if(currentaction == "populate materials combo")
		{
			var xmldoc = xmlHttp.responseXML;
            		var root = xmldoc.getElementsByTagName("material");
		
			var combo = document.getElementById("materials");
			removeAllComboOptions(combo);
			for (var i = 0 ; i < root.length ; i++) 
			{
				//var material = root[i];
				var name = root[i].getElementsByTagName("name")[0].firstChild.nodeValue;
				var filename = root[i].getElementsByTagName("filename")[0].firstChild.nodeValue;
				var op = document.createElement('option');
				op.value = filename;
				op.text = name;
				combo.add(op, null);
			}			
			populateSizesCombo();
		}	
		else if (currentaction == "populate sizes combo")
		{

			
			var xmldoc = xmlHttp.responseXML;
			var root = xmldoc.getElementsByTagName("size");
			var combo = document.getElementById("sizes");
			removeAllComboOptions(combo);
			for (var i = 0 ; i < root.length ; i++) 
			{
				if(i == 0)
				{
					populateProductInformation(root[i]);
				}
				var desc = root[i].getElementsByTagName("title")[0].firstChild.nodeValue;
				var id = root[i].getElementsByTagName("id")[0].firstChild.nodeValue;
				var op = document.createElement('option');
				op.value = id;
				op.text = desc;
				combo.add(op, null);
			}						
		}
		else if ("load product information")
		{
			var xmldoc = xmlHttp.responseXML;
			var root = xmldoc.getElementsByTagName("size");			
			var index = document.getElementById("sizes").selectedIndex;
			var xml = root[index];
			populateProductInformation(xml);			
		}		
	}

}

function populateProductInformation(xml)
{
	//populate pictures
	var pic1 = xml.getElementsByTagName("picture1")[0].firstChild.nodeValue;
	var pic2 = xml.getElementsByTagName("picture2")[0].firstChild.nodeValue;
	var pic3 = xml.getElementsByTagName("picture3")[0].firstChild.nodeValue;
	document.getElementById("orderpicture1").src = pic1;
	document.getElementById("orderpicture2").src = pic2;
	document.getElementById("orderpicture3").src = pic3;
}

function sendAjaxRequest(url)
{	
	try
	{		
		createXmlHttpRequestObject();
		xmlHttp.onreadystatechange = readyStateChangeTriggered;			
		xmlHttp.open("GET", url);
		xmlHttp.send(null);								
	}
	catch(e)
	{
		//alert("An exception occurred in the script. Error name: " + e.name + ". Error message: " + e.message); 
		alert("Browser does not support AJAX and XMLHTTP...PLease upgrade your browser!")
	}
}

function populateMaterialsCombo()
{
	try
	{
		
		var url = "xml/materials.xml";
		setCurrentAction("populate materials combo");
		sendAjaxRequest(url);
		
	}
	catch(ex)
	{
		resetCurrentAction();
		alert("Error populating materials list box!");
	}
}

function populateSizesCombo()
{
	var mcombo = document.getElementById("materials");
	var moption = mcombo.options[mcombo.selectedIndex];
	currentaction = "populate sizes combo";
	sendAjaxRequest(moption.value);
}

function loadProductPictures()
{
	var mcombo = document.getElementById("materials");
	var moption = mcombo.options[mcombo.selectedIndex];
	currentaction = "load product information";
	sendAjaxRequest(moption.value);	
}

function removeAllComboOptions(combo)
{
	var length = combo.length - 1;
	for (i = length; i >= 0; i--)
	{
		combo.remove(i);
	}
}

function resetCurrentAction(){currentaction = false;}
function setCurrentAction(task){currentaction = task;}

function execJS(node)
{
  var bSaf = (navigator.userAgent.indexOf("Safari") != -1);
  var bOpera = (navigator.userAgent.indexOf("Opera") != -1);
  var bMoz = (navigator.appName == "Netscape");

  if (!node) 
  {   
    return;
  }

  /* IE wants it uppercase */
  var st = node.getElementsByTagName("SCRIPT");
  var strExec;

  for(var i=0; i < st.length; i++)
  {
      if (bSaf) 
	{
      	strExec = st[i].innerHTML;
  	      st[i].innerHTML = "";
    	} 
	else if (bOpera) 
	{
      	strExec = st[i].text;
	      st[i].text = "";
    	} 
	else if (bMoz) 
	{
      	strExec = st[i].textContent;
	      st[i].textContent = "";
    	} 
	else 
	{
      	strExec = st[i].text;
	      st[i].text = "";
    	}

    	try 
	{
      	var x = document.createElement("script");
      	x.type = "text/javascript";

           	if ((bSaf) || (bOpera) || (bMoz))
		{	
        		x.innerHTML = strExec;
		}
		else
		{
			x.text = strExec;
		}

      	document.getElementsByTagName("head")[0].appendChild(x);
    	} 
	catch(e) 
	{
      	alert(e);
	}
  }
}

