var WebSerivceUrl;
var req;

var CurrentFunction;
var CurrentSelectionElement;

var CurrentDivElement;
var XCount;
var XBrand;
var XBrand2;
var XModel;
var XModel2;
var XModel3;
var XFastener;
var XScrewSize;
var XSpacer;
var MountDetailUrl;
var ModelID;
var Count = 0;

var ModelNumber;
var ModelSelectedUrl;
var CountReturned = false;
var ListReturned = false;

function requestReturned(req)
{
	switch(CurrentFunction)
	{
		case 'loadBrand':
			loadBrandRet(req);
			break;
		case 'selectedBrandChanged':
			selectedBrandChangedRet(req);
			break;
		case 'loadMountsByModelID':
			CurrentDivElement.appendChild(buildList(req));
			parseModelSpecificInfo(req);
			break;
		case 'loadModelsByModelNumber':
			CurrentDivElement.appendChild(buildModelList(req));
			break;
	}
}


function GetNodeValue(Tags, index, TagName)
{
	if(Tags[index] && Tags[index].getElementsByTagName(TagName)[0] && Tags[index].getElementsByTagName(TagName)[0].firstChild)
	{
		return Tags[index].getElementsByTagName(TagName)[0].firstChild.nodeValue;
	}
	return '';
}

function loadBrand(sel,url)
{
	CurrentFunction = 'loadBrand';
	CurrentSelectionElement = sel;
	
	loadXMLDoc(url + '?Service=GetBrands');
}

function loadBrandRet(req)
{
	clearlistbox(CurrentSelectionElement);
	var optn = document.createElement("OPTION");
	optn.text = "-- Select Brand --";
	optn.value = "-1";
	CurrentSelectionElement.options.add(optn);
	
	var xml = req.responseXML;

	var Brands = xml.getElementsByTagName('Brands');
	for(var index = 0; index < Brands.length; index++)
	{
		optn = document.createElement("OPTION");
		optn.text = GetNodeValue(Brands, index, 'Name')
		optn.value = GetNodeValue(Brands, index, 'BrandID')
		if(optn.text.length > 0)
			CurrentSelectionElement.options.add(optn);
	}
}

function selectedBrandChanged(sender, models, url)
{
	var val = sender.options[sender.selectedIndex].value;
	
	if(val =="-1")
	{
		clearlistbox(models);
		var optn = document.createElement("OPTION");
		optn.text = "-- Select Model --";
		optn.value = "-1";
		models.options.add(optn);
	
		return false;
	}
	CurrentFunction = 'selectedBrandChanged';
	CurrentSelectionElement = models;
	
	loadXMLDoc(url + '?Service=GetModels&BrandID=' + val);
}

function selectedBrandChangedRet(req)
{
	clearlistbox(CurrentSelectionElement);
	var optn = document.createElement("OPTION");
	optn.text = "-- Select Model --";
	optn.value = "-1";
	CurrentSelectionElement.options.add(optn);
	
	var xml = req.responseXML;

	var Models = xml.getElementsByTagName('Models');
	for(var index = 0; index < Models.length; index++)
	{
		optn = document.createElement("OPTION");
		optn.text = GetNodeValue(Models, index, 'ModelNumber')
		optn.value = GetNodeValue(Models, index, 'ModelID')
		if(optn.text.length > 0)
			CurrentSelectionElement.options.add(optn);
	}
}

function selectedModelChanged(sender, url)
{
	var val = sender.options[sender.selectedIndex].value;
	
	if(val =="-1")
	{
		return false;
	}
	CurrentFunction = 'selectedModelChanged';
	CurrentSelectionElement = null;
	
	if(url.indexOf('?') > -1)
	{
		document.location = url + '&ModelSelected=true&ModelID=' + val;
	}
	else
	{
		document.location = url + '?ModelSelected=true&ModelID=' + val;
	}
	return false;
}

function clearlistbox(sel)
{
	for (var index=sel.options.length-1; index>=0; index--)
	{
		sel.options[index] = null;
	}
	sel.selectedIndex = -1;
}

function searchModels(txt, url)
{
	if(txt.value.length > 0)
	{
		if(url.indexOf('?') > -1)
		{
			document.location = url + '&SearchModel=' + txt.value;
		}
		else
		{
			document.location = url + '?SearchModel=' + txt.value;
		}
	}
	return false;
}

function lostFocus(sender)
{
	if(sender.value == '' || sender.value == ' ')
	{
		sender.value = 'Enter Model Number';
		sender.style.color = '#888888';
	}
}

//**************************************************************************************************************************

function loadMountsByModelID(div,count,brand,brand2,model,model2,model3,fastener,screwSize,spacer,MdlID,ServiceUrl,MountUrl)
{
	CurrentFunction = 'loadMountsByModelID';
	
	CurrentDivElement = div;
	XCount = count;
	XBrand = brand;
	XBrand2 = brand2;
	XModel = model;
	XModel2 = model2;
	XModel3 = model3;
	XFastener = fastener;
	XScrewSize = screwSize;
	XSpacer = spacer;
	ModelID = MdlID;
	WebSerivceUrl = ServiceUrl;
	MountDetailUrl = MountUrl;
	
	loadXMLDoc(WebSerivceUrl + '?Service=GetMountsForModel&ModelID=' + ModelID);
	return false;
}

function parseModelSpecificInfo(req)
{
	var xml = req.responseXML;
	var Models = xml.getElementsByTagName('Mounts');
	XCount.innerHTML = Count;
	XBrand.innerHTML = GetNodeValue(Models, 0, 'Brand');
	XBrand2.innerHTML = GetNodeValue(Models, 0, 'Brand');
	XModel.innerHTML = GetNodeValue(Models, 0, 'Model');
	XModel2.innerHTML = GetNodeValue(Models, 0, 'Model');
	XModel3.innerHTML = GetNodeValue(Models, 0, 'Model');
	XFastener.innerHTML = GetNodeValue(Models, 0, 'Fastener');
	XScrewSize.innerHTML = GetNodeValue(Models, 0, 'ScrewSize');
	XSpacer.innerHTML = GetNodeValue(Models, 0, 'Spacer');
	
}

function buildList(req)
{
	var List = document.createElement("ul");
	
	var xml = req.responseXML;

	var Mounts = xml.getElementsByTagName('Mounts');
	for(var index = 0; index < Mounts.length; index++)
	{
		var str = GetNodeValue(Mounts, index, 'Mount');
		var li = document.createElement('li');
		var a = document.createElement('a');
		var img = document.createElement('img');
		var nameSpan = document.createElement('span');
		var descSpan = document.createElement('span');
	
		descSpan.className = 'sltext';
		descSpan.innerHTML = GetNodeValue(Mounts, index, 'Description');
		nameSpan.innerHTML = GetNodeValue(Mounts, index, 'Mount') + "<br/>";
//old non-pro method		img.src = 'http://omnimount.com/products/side.' + GetNodeValue(Mounts, index, 'MountID') + '.jpg';
		img.src = 'http://www.omnimountpro.com/'+ GetNodeValue(Mounts, index, 'imageUrl');
		img.style.width = '50px';
		img.style.height = '50px';
		img.style.styleFloat = 'left';	//IE
		img.style.cssFloat = 'left';	//Firefox/Mozilla
		img.style.display = 'inline';
		img.style.marginRight = '10px';
		img.style.paddingTop = '3px';
//old method		a.href= MountDetailUrl + '?ProductID=' + GetNodeValue(Mounts, index, 'MountID');
		
		//new way to search for mount - strips off ampersand and replaces "+" with OR
		str = str.replace("&","");
		str = str.replace("+","OR");
		a.href = MountDetailUrl + str;
		a.appendChild(img);
		a.appendChild(nameSpan);
		a.appendChild(descSpan);
		li.appendChild(a);
		
		List.appendChild(li);
		Count = index + 1;
	}
	return List
}

//**************************************************************************************************************************

function loadModelsByModelNumber(div,count,ModelNum,ServiceUrl,ModelUrl)
{
	CurrentFunction = 'loadModelsByModelNumber';

	CurrentDivElement = div;
	XCount = count;
	ModelNumber = ModelNum;
	WebSerivceUrl = ServiceUrl;
	ModelSelectedUrl = ModelUrl;
	
	loadXMLDoc(WebSerivceUrl + '?Service=GetModelsByModelNumber&ModelNumber=' + ModelNumber);
	return false;
}

function buildModelList(req)
{
	var List = document.createElement("ul");
	var xml = req.responseXML;

	var Models = xml.getElementsByTagName('Models');
	XCount.innerHTML = Models.length;
	for(var index = 0; index < Models.length; index++)
	{
		var li = document.createElement('li');
		var a = document.createElement('a');
		
		a.href= ModelSelectedUrl + '?ModelID=' + GetNodeValue(Models, index, 'ModelID');
		a.innerHTML = GetNodeValue(Models, index, 'Brand') + " " + GetNodeValue(Models, index, 'Model');
		li.appendChild(a);
		
		List.appendChild(li);
	}
	return List;
}

//**************************************************************************************************************************

function writeQueryStringParams()
{
	var qry = window.location.search.substring(1); 
	if(qry.length == 0) 
	{
		document.write( 'No data submitted' ); 
	}
	else
	{
		var pars = qry.split( '&' ); 
		var idx = 0; 
		for ( var i=0; i<pars.length; i++)
		{
			idx = pars[i].indexOf('='); 
			if(idx >= 0)
			{
				document.write( '<p>Parameter n.'+(i+1)+':<br/> name = "'+ pars[i].substring(0, idx) ); 
				document.write( '", value = "'+ pars[i].substring(idx+1) + '"</p>' ); 
			}
		}
	}
}

function getQueryStringValue(aName)
{
	var qry = window.location.search.substring(1); 
	if(qry.length == 0) 
	{
		document.write( 'No data submitted' );
	}
	else
	{
		var pars = qry.split( '&' ); 
		var idx = 0; 
		for ( var i=0; i<pars.length; i++)
		{
			idx = pars[i].indexOf('='); 
			if(idx >= 0)
			{
				if(pars[i].substring(0, idx) == aName)
				{
					return pars[i].substring(idx+1); 
				}
			}
		}
		return "null";
	}
}

//**************************************************************************************************************************

function processReqChange() 
{
    // only if req shows "loaded"
    if (req.readyState == 4) 
    {
        // only if "OK"
        if (req.status == 200) 
        {
			requestReturned(req);
        }
        else 
        {
            alert("There was a problem retrieving the XML data:\n" + req.statusText);
        }
    }
}

function loadXMLDoc(url) {
	req = false;
    // branch for native XMLHttpRequest object
    if(window.XMLHttpRequest && !(window.ActiveXObject)) 
    {
    	try 
    	{
			req = new XMLHttpRequest();
        }
        catch(e) 
        {
			req = false;
        }
    // branch for IE/Windows ActiveX version
    }
    else if(window.ActiveXObject) 
    {
       	try 
       	{
        	req = new ActiveXObject("Msxml2.XMLHTTP");
      	}
      	catch(e) 
      	{
        	try 
        	{
          		req = new ActiveXObject("Microsoft.XMLHTTP");
        	}
        	catch(e) 
        	{
          		req = false;
        	}
		}
    }
	if(req) 
	{
		req.onreadystatechange = processReqChange;
		req.open("GET", url, true);
		req.send("");
	}
}

