var xmlHttp;

//var config= new ConfigReader("jsConfig");
//var serviceUrl = GetConfigValue("YachtTradeWebServiceURL").toString();

var element = document.getElementById("jsConfig");
var serviceUrl = '';
if (element != null)
{
    var keysAndValues = element.innerHTML;
    var arrKeysAndValues = keysAndValues.split('|');
	serviceUrl = arrKeysAndValues[1];
}

var GetPaintSubTypesURL = serviceUrl + "/GetPaintSubTypes";
var GetSchemesURL = serviceUrl + "/DoSchemeSearchGetHTML";
var GetProductsURL = serviceUrl + "/DoProductSearchGetHTML";
var GetPackShotsURL = serviceUrl + "/DoPackShotSearchGetHTML";
var GetPackShotsProductTypeChangedURL = serviceUrl + "/PackShotsProductTypeChanged";
var GetPackShotsProductChangedURL = serviceUrl + "/PackShotsProductChanged";

var functionNameCalled = "";

// Gets the XML HTTP Request object
function GetXMLObject()
{

    if(window.ActiveXObject) 
    { 
        try 
        { 
            xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); 
        } 
        catch(e) 
        { 
            try 
            { 
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
            } 
            catch(e) 
            { 
                xmlHttp = false; 
            } 
        } 
    } 
    else if(window.XMLHttpRequest) 
    {     	
        try 
        { 
            xmlHttp = new XMLHttpRequest();             
        } 
        catch(e) 
        {         	
            xmlHttp = false; 
        }
    } 
    
    var wer = window.location;
    
}

// performs the web service call
function CallFunction(functionName)
{    
	GetXMLObject();
    // if object is not null
    
    if(xmlHttp)
    {    		
    	if(functionName)
    	{
    		switch(functionName)
    		{
    			case 'SchemeSearch':  				
    				xmlHttp.onreadystatechange = OnReadyStateChangeEvent; 
			        xmlHttp.open("POST",GetSchemesURL,true); 
			        xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
			      				      	
					var params = GetSchemesQueryString();		
					xmlHttp.setRequestHeader("Content-length", params.length);						
					xmlHttp.send(params);
								
    				break;
    				
    			case 'ProductPaintSubType':
    				xmlHttp.onreadystatechange = OnReadyStateChangeEvent;    									   				
    				xmlHttp.open("POST",GetPaintSubTypesURL,true);    				   				
		        	xmlHttp.setRequestHeader('X-FunctionName','ProductPaintSubType'); 
		        	xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 

		        	var params = GetPaintSubTypeQueryString();		
					xmlHttp.setRequestHeader("Content-length", params.length);						
					xmlHttp.send(params);
					
					break;
					
				case 'ProductSearch':													
					xmlHttp.onreadystatechange = OnReadyStateChangeEvent; 					
	        		xmlHttp.open("POST",GetProductsURL,true);			        	
	        		xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
			      				      	
					var params = GetProductQueryString();						
					xmlHttp.setRequestHeader("Content-length", params.length);																					
					xmlHttp.send(params);					
					break;
					
				case 'PackShotSearch':
					xmlHttp.onreadystatechange = OnReadyStateChangeEvent; 											
					xmlHttp.open("POST",GetPackShotsURL,true);						
			        xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 
			      				      	
					var params = GetPackShotsQueryString();					
    				xmlHttp.setRequestHeader("Content-length", params.length);						
    				
					xmlHttp.send(params);
    				break;
    			case 'PackShotsProductTypeChanged':
    				xmlHttp.onreadystatechange = OnReadyStateChangeEvent;    									   				
    				xmlHttp.open("POST",GetPackShotsProductTypeChangedURL,true);    				   				
		        	xmlHttp.setRequestHeader('X-FunctionName','PackShotsProductTypeChanged'); 
		        	xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 

		        	var params = GetPackShotsProductTypeChangedQueryString();		
					xmlHttp.setRequestHeader("Content-length", params.length);						
					xmlHttp.send(params);
    				break;
				case 'PackShotsProductChanged':
    				xmlHttp.onreadystatechange = OnReadyStateChangeEvent;    									   				
    				xmlHttp.open("POST",GetPackShotsProductChangedURL,true);    				   				
		        	xmlHttp.setRequestHeader('X-FunctionName','PackShotsProductChanged'); 
		        	xmlHttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded"); 

		        	var params = GetPackShotsProductChangedQueryString();		
					xmlHttp.setRequestHeader("Content-length", params.length);						
					xmlHttp.send(params);
    				break;
				default:
    				break;
    		}
		}        
		else
		{
	        
		}      
    }
    
}

// event handler for the xml HTTP request
function OnReadyStateChangeEvent()
{	
	
	if(xmlHttp.readyState==4)
    	{    
		if(xmlHttp.status == 200)
		{	
    			var functionName = xmlHttp.getResponseHeader('X-FunctionName');
    			switch (functionName)
			{
			case 'ProductPaintSubType':
				PopulateDropDown(xmlHttp.responseText);
    			   
				break;
			case 'SchemeSearch':
				document.getElementById('SearchMessage').style.visibility = "hidden";  							
				var result = GetResultStringFromSOAP(xmlHttp.responseText);
	        		result = ReplaceEscapeCharacters(result);           
	        		document.getElementById('SearchResults').innerHTML = result;
	        	
				break;
			case 'ProductSearch':
				document.getElementById('SearchMessage').style.visibility = "hidden";  							
				var result = GetResultStringFromSOAP(xmlHttp.responseText);
	        		result = ReplaceEscapeCharacters(result);           
	        		document.getElementById('SearchResults').innerHTML = result;
				
				break;
			case 'PackShotSearch':				
				document.getElementById('SearchMessage').style.visibility = "hidden";    							
	        		var result = GetResultStringFromSOAP(xmlHttp.responseText);			
				result = ReplaceEscapeCharacters(result);   
				document.getElementById('SearchResults').innerHTML = result;
				
				break;	
			case 'PackShotsProductTypeChanged':	
			    var prods = GetPackShotsResultStringFromSOAP(xmlHttp.responseText,1);
			    var imagetypes = GetPackShotsResultStringFromSOAP(xmlHttp.responseText,2);
			    
			    PopulatePackShotsDropDowns(prods,imagetypes);
				break;
			case 'PackShotsProductChanged':	
			    var imagetypes = GetResultStringFromSOAP(xmlHttp.responseText);
			    PopulatePackShotsDropDowns('',imagetypes);
				break;
			default:
				document.getElementById('SearchMessage').style.visibility = "hidden";			
	        	break;
			}
		}
		else if(xmlHttp.status == 500)
		{
			document.getElementById('SearchMessage').style.visibility = "hidden";
			document.getElementById('SearchResults').innerHTML = 'Search request timed out. Try selected more specific criteria.'
		}
	
    	}    
	
}

// parse the result string from the soap response
// Gets a single string
function GetResultStringFromSOAP(response)
{ 
    var index = response.indexOf('>',0);
    index = response.indexOf('>',index+1);
    var lastindex = response.indexOf('<',index+1);

    return response.substring(index+1,lastindex);
}

// parse the result string from the soap response
// Get the specified parameter from an array of strings (1 based not zero based)
function GetPackShotsResultStringFromSOAP(response, count)
{ 
    var counter = 1;
    var index = response.indexOf('>',0);
    
    index = response.indexOf('>',index+1);
    index = response.indexOf('>',index+1);
    
    while(counter<count)
    {
        index = response.indexOf('>',index+1);        
        index = response.indexOf('>',index+1);
        counter++;
    }
    var lastindex = response.indexOf('<',index+1);

    return response.substring(index+1,lastindex);
}

function PopulatePackShotsDropDowns(prods, imagetypes)
{
    if(prods.length != 0)
    {
        PopulateDropDown2('ddlProduct', prods);
        document.getElementById("ddlProduct").disabled = false;    
    }
    if(imagetypes.length != 0)
    {
        PopulateDropDown2('ddlImageType', imagetypes);
        document.getElementById("ddlImageType").disabled = false;
    }
}

function PopulateDropDown2(ddlName, result)
{
    var strings = result.split(',');
    if(strings.length != 0)
    {
	    document.getElementById(ddlName).options.length = 0;
        for (var i = 0; i < strings.length; i++)
        {
            var opt = document.createElement("option"); 
            // Add an Option object to Drop Down/List Box
            document.getElementById(ddlName).options.add(opt);
            opt.text = strings[i];
        }
    }
    
    if (document.getElementById(ddlName).options == 2)
    {
        document.getElementById(ddlName).selectedIndex = 1;
    }
}

// parse comma delimited string and populate drop down
function PopulateDropDown(response)
{ 
    var result = GetResultStringFromSOAP(response);
    var strings = result.split(',');

	if (strings.length != 0)
	{
	    document.getElementById("ddlPaintSubType").options.length = 0;
	    for (var i = 0; i < strings.length; i++)
	    {
	        var opt = document.createElement("option"); 
	        // Add an Option object to Drop Down/List Box
	        document.getElementById("ddlPaintSubType").options.add(opt);
	        opt.text = strings[i];
	    }
	    document.getElementById("ddlPaintSubType").disabled = false;
    }
    else
    {
    	document.getElementById("ddlPaintSubType").options.length = 0;    
    	var opt = document.createElement("option"); 
        // Add an Option object to Drop Down/List Box
        document.getElementById("ddlPaintSubType").options.add(opt);
        opt.text = "All Paint Sub Types";
        document.getElementById("ddlPaintSubType").disabled = false;
    }
}

function GetSchemesQueryString()
{
	var ddlSubstrates = document.getElementById('ddlSubstrates');
	var ddlVesselArea = document.getElementById('ddlVesselArea');
	//var ddlSchemeSystem = document.getElementById('ddlSchemeSystem');
	var ddlProducts = document.getElementById('ddlProducts');
	
	var QueryString = 'Label=' + GetLabelFromURL() +
		'&Substrate='+ escape(ddlSubstrates.value) +
		'&VesselArea=' + escape(ddlVesselArea.value) + 
		'&SchemeSystem=' + //escape(ddlSchemeSystem.value) +
		'&Product=' + escape(ddlProducts.value); 
	
	return QueryString;
}

function GetPackShotsQueryString()
{    
	var ddlProductType= document.getElementById('ddlProductType');
	var ddlProduct= document.getElementById('ddlProduct');
	var ddlImageType= document.getElementById('ddlImageType');
		
	var QueryString = 'Label=' + GetLabelFromURL() +
		'&PaintType='+ escape(ddlProductType.options[ddlProductType.selectedIndex].text) +
		'&Product=' + escape(ddlProduct.options[ddlProduct.selectedIndex].text) + 
		'&ImageType=' + escape(ddlImageType.options[ddlImageType.selectedIndex].text);		 
	
	return QueryString;

}

function GetProductQueryString()
{
	var ddlProduct = document.getElementById('ddlProduct');
	var ddlProductType = document.getElementById('ddlProductType');
	var ddlPaintSubType = document.getElementById('ddlPaintSubType');
	var ddlVesselArea = document.getElementById('ddlVesselArea');
	
	
	var QueryString = 'Label=' + GetLabelFromURL() +
		'&Product=' + escape(ddlProduct.options[ddlProduct.selectedIndex].text) +
		'&PaintType=' + escape(ddlProductType.options[ddlProductType.selectedIndex].text) +
		'&PaintSubType='+ escape(ddlPaintSubType.options[ddlPaintSubType.selectedIndex].text) +		
		'&VesselArea=' + escape(ddlVesselArea.options[ddlVesselArea.selectedIndex].text);
	
	return QueryString;

}

function GetPaintSubTypeQueryString()
{
	var ddl = document.getElementById("ddlProductType");		
					
	var QueryString = "Label=" + GetLabelFromURL() +
		"&PaintType=" + escape(ddl.value.toString());
	
	return QueryString;
}

function GetPackShotsProductTypeChangedQueryString()
{
    var ddl = document.getElementById("ddlProductType");		
					
	var QueryString = "Label=" + GetLabelFromURL() +
		"&ProductType=" + encodeURI(ddl.value.toString());
	
	return QueryString;
}

function GetPackShotsProductChangedQueryString()
{
    var ddlProductType = document.getElementById("ddlProductType");		
	var ddlProduct = document.getElementById("ddlProduct");		
					
	var QueryString = "Label=" + GetLabelFromURL() +
		"&ProductType=" + encodeURI(ddlProductType.value.toString()) +
		"&Product=" + encodeURI(ddlProduct.options[ddlProduct.selectedIndex].text);
	
	return QueryString;
}

function ReplaceEscapeCharacters(value)
{
	var result = '';
	result = value.replace(/&lt;/g,'<');
	result = result.replace(/&gt;/g,'>');
	return result;
}

function GetLabelFromURL()
{	
	var strUrl = "" ;
	
	strUrl = window.location.href; 			
	// remove the "http://"		
	strUrl = strUrl.substr(7);	
	// remove domain
	strUrl = strUrl.substr(strUrl.indexOf("/")+1);	
	// get sub string to first occurence of "/"
	strUrl = strUrl.substr(0,strUrl.indexOf("/"));
		
	return strUrl ;
}

// event handler for the product type drop down change event
function ddlProductType_Changed()
{
	document.getElementById("ddlPaintSubType").disabled = true;    
    CallFunction('ProductPaintSubType');
}

function ddlPackShotProductType_Changed()
{
    document.getElementById("ddlProduct").disabled = true;
    document.getElementById("ddlImageType").disabled = true;
    CallFunction('PackShotsProductTypeChanged');
}

function ddlPackShotProduct_Changed()
{
    document.getElementById("ddlImageType").disabled = true;
    CallFunction('PackShotsProductChanged');
}

function btnSearch_Click(searchtype)
{
	switch(searchtype)
	{
		case 'SchemeSearch':									
			document.getElementById('SearchMessage').style.visibility = "visible";
			CallFunction(searchtype);			
			break;
		case 'ProductSearch':			
			document.getElementById('SearchMessage').style.visibility = "visible";
			CallFunction(searchtype);
			break;
		case 'PackShotSearch':			
			document.getElementById('SearchResults').innerHTML = "";	
			document.getElementById('SearchMessage').style.visibility = "visible";
			CallFunction(searchtype);
			break;
		default:				
			break;
	}
	return false;
}


