/*
* name: at.search.js
* author: RAJF
* notes: Functions taken from the existing Top Marques or Autot Trader sites.
*/

// new cars search popup
function popupCapTechSpec(id, partner, hideLinks)
{
	var baseUrl = 'http://nvs.autotrader.co.uk/CapTechSpec?advertid=' + id;
	var partnerParam = '&partner=' + partner;
	var hideLinksParam = hideLinks != '' ? '&hidelinks=' + hideLinks : '';

	var url = baseUrl + partnerParam + hideLinksParam;
	var capTechSpec = window.open(url, id, 'directories=no,location=no,menubar=no,scrollbars=yes,status=no,toolbar=no,resizable=yes,width=714,height=670,screenX=15,screenY=15,top=15,left=15');
	capTechSpec.focus();
}

function resetDropDown(fieldId)
{
	var dropDownField = document.getElementById(fieldId);				
	
	if (dropDownField != null)
	{
		dropDownField.selectedIndex = -1;
		emptyStoredFieldData(fieldId);
	}
}
		
function emptyStoredFieldData(fieldId)
{
	if (storedFormData != null)
	{
		for (var i = 0; i < storedFormData.length; i++)
		{
			if (storedFormData[i] != null && storedFormData[i][0] == fieldId)
			{
				storedFormData[i][1] = '';
			}
		}
	}	
}

function resetDropDowns(dropDownType)
{
		storedFormData = null;	
	
	var dynamicFieldIds = getDynamicFieldIds(dropDownType);
  	for (var i = 0; i < dynamicFieldIds.length; i++)
		{
 			resetDropDown(dynamicFieldIds[i]);
 		}	  	   		
  	var url = mainURL(dropDownType);
	url += '&action=dropdowndata';
	headScript(url);
}


/* NVS advanced  - used for dropdowns */
var storedDropDownURL = null;
var storedResultsURL = null;
var storedFormData = null;
                                      
var uvlDynamicFieldIds = new Array('colour', 'transmissionid', 'fuelid', 'bodyid', 'min_mileage', 'max_mileage', 'min_pr', 'max_pr', 'min_age', 'max_age');

var nvsDynamicFieldIds = new Array('make', 'model', 'variant', 'derivative');

function getInlineServlet(dropDownType)
{
	return 'http://nvs.autotrader.co.uk/js/' + dropDownType + '/InlineServlet.js';
}

		  	
function updateInline(dropDownType, dataTypes)
{	  		  		
	var url = constructURL(dropDownType, dataTypes);
	storeURL(dropDownType, dataTypes, url);
headScript(url);
}

function storeURL(dropDownType, dataTypes, url)
{
if (contains(dataTypes, 'dropdowndata'))
{
	storedDropDownURL = url;
}

if (!contains(dataTypes, 'searchform') && contains(dataTypes, 'dropdowndata'))
{
	storedDropDownURL += '&action=searchform';
}

if (contains(dataTypes, 'searchresults') || contains(dataTypes, 'defaultresults'))
{
	storedResultsURL = url;
	storeFieldData(dropDownType);
}
else if (contains(dataTypes, 'searchresultspage'))
{
	storedResultsURL = url;
}
}

function contains(dataTypes, dataType)
{
for (var i = 0; i < dataTypes.length; i++)
{
	if (dataTypes[i] == dataType)
	{
		return true;
	}
}
return false;
}

function headScript(url)
{
headElement = document.getElementsByTagName("head").item(0);
  var scriptTag = document.createElement("script");

  scriptTag.setAttribute("id", "JSONDynamic");
  scriptTag.setAttribute("type", "text/javascript");
  scriptTag.setAttribute("src", url);
  
  headElement.appendChild(scriptTag);   
}

function constructURL(dropDownType, dataTypes)
{	
var dynamicFieldIds = getDynamicFieldIds(dropDownType);

	var url = mainURL(dropDownType);

for (var i = 0; i < dataTypes.length; i++)
{					    
	if (dataTypes[i] == 'defaultresults')
	{	
		url += '&action=searchresults'; 
		url = appendPostcode(url, '');
	} 
	else
	{ 
		url += '&action=' + dataTypes[i]; 
	}
	
	if (dataTypes[i] == 'searchresults')
	{
			url = appendFieldsWithAnyCheck(dynamicFieldIds, url);
		url = appendFields(extraFieldIds, url);
	}
	
	if (dataTypes[i] == 'dropdowndata')
	{	
		url = appendFields(dynamicFieldIds, url);
	}
	
	if (dataTypes[i] == 'featuredresult')
	{	
		url = appendPostcode(url, '');
	}
	
	if (dataTypes[i] == 'requiresselected' && location.search.length > 0)
	{
		url += '&' + location.search.substring(1);
	}
}
return url;
}

function mainURL(dropDownType)
{
var startQueryString = '?';
var url = getInlineServlet(dropDownType) + startQueryString;
url += (startQueryString == '?' ? '' : '&') + 'dropdowntype=' + dropDownType;
url = appendE2W(url, '');
url = appendPartner(url, 'TOP_MARQUES');

return url;
}

function appendFields(dynamicFieldIds, url)
{
	for (var i = 0; i < dynamicFieldIds.length; i++)
	{		   		    
		url = appendField(url, document.getElementById(dynamicFieldIds[i]));
	}	   		
	return url;
}

function appendField(url, field)
{
if (field != null && field.value != '' && (field.type != 'checkbox' || field.checked))
{
	url += '&' + field.name + '=' + field.value;
}
return url;
}		

function appendPostcode(url, postcode)
{
var pc = postcode != '' ? postcode : '';
if (pc != '')
{
	url += '&postcode=' + pc;	
}
return url;
}		

function appendE2W(url, id)
{
if (id != '')
{
	url += '&e2w=' + id;
}
return url;
}
					
function appendPartner(url, partner)
{
if (partner != '')
{
	url += '&partner=' + partner;	
}
return url;
}		

function appendFieldsWithAnyCheck(dynamicFieldIds, url)
{
	for (var i = 0; i < dynamicFieldIds.length; i++)
	{		   
		var field = document.getElementById(dynamicFieldIds[i]);
		if (field != null)
		{
 			if ('ANY' == getSelectedDDValue(field) && field.length > 1)
    		{
    			url += '&' + field.name + '=' + getConfigAnyValue(field);
    		}
    		else if ('ALL' == getSelectedDDValue(field))
    		{    		
    		}
    		else
    		{	
    			url = appendField(url, field);
    		}
    	}
	}	   		
	return url;
}
		
function getConfigAnyValue(field)
{
		var multiValue = '';
		if (field.name.indexOf('min_') == 0)
		{
			multiValue = '0';
		}
		else if (field.name.indexOf('max_') == 0)
		{
			var greatestVal = 0;
			for (var i = 0; i < field.length; i++)
			{
				if (field[i].value > greatestVal)
				{
					greatestVal = field[i].value;
				}
			}
			multiValue = greatestVal;
		}
		else
		{	      					      			
			for (var j = 0; j < field.length; j++)
			{
				if (j != field.selectedIndex)
				{			      				
					multiValue = multiValue + "," + field[j].value;
				}
			}	
		}  				      			
		return multiValue; 		      			
}

function isFieldDisplayed(fieldId)
{
var field = document.getElementById(fieldId);

if (field != null && field.style.display == 'block')
{
	return true;
}
return false;
}

function resetDropDown(fieldId)
{
var dropDownField = document.getElementById(fieldId);				

if (dropDownField != null)
{
	dropDownField.selectedIndex = -1;
	emptyStoredFieldData(fieldId);
}
}
	
function emptyStoredFieldData(fieldId)
{
if (storedFormData != null)
{
	for (var i = 0; i < storedFormData.length; i++)
	{
		if (storedFormData[i] != null && storedFormData[i][0] == fieldId)
		{
			storedFormData[i][1] = '';
		}
	}
}	
}



function getDynamicFieldIds(dropDownType)
{
var dynamicFieldIds = null;
if (dropDownType == 'uvl')
	{
		dynamicFieldIds = uvlDynamicFieldIds;
	}
	else if (dropDownType == 'nvs')
	{
		dynamicFieldIds = nvsDynamicFieldIds;
	}
	return dynamicFieldIds;
}

function setSelectedData(dropDownType)
{
	if (location.search.length < 1)
	{	
		return;
	}
	
	var queryString = location.search.substring(1);
	queryString = unescape(queryString);
	queryString = queryString.replace(/\+/g, ' ');
	
	var params = queryString.split('&');
	for (var i = 0; i < params.length; i++)
	{
		var param = params[i].split('=');
		var field = document.getElementById(param[0])
		if (field != null)
		{
			for (var j = 0; j < field.length; j++)
  				{
  					if (field[j].value == param[1])
  					{
  						field.selectedIndex = j;
  					}
  				}
		}
	}
}

function populateNVSSearch(searchForm, dropDownData, requiresSelected, searchResults) 
{
/*
	if (searchForm.searchform != null)
	{
		document.getElementById(idFirst).innerHTML = searchForm.searchform;
	}
*/
	if (dropDownData != null)
	{
		populateDropDown(dropDownData.make, 'make');
		populateDropDown(dropDownData.model, 'model');
		populateDropDown(dropDownData.variant, 'variant');
		populateDropDown(dropDownData.derivative, 'derivative');
	}

	handleNVSDisplay();
	
	if (requiresSelected != null && requiresSelected)
	{
		setSelectedData();
	}
	
}
	

function populateDropDown(fieldData, fieldId)
{
var dropDownField = document.getElementById(fieldId);	    
if (dropDownField == null)
{
	return;
}

var currentSelected = getSelectedDDValue(dropDownField);
clearDropDown(dropDownField);

if (fieldData != null)
{
	for (var i = 0; i < fieldData.length; i++)
	{						
		dropDownField.options[i] = new Option(fieldData[i][0], fieldData[i][1]);
							
		if ((currentSelected != '' && currentSelected == fieldData[i][1]) || fieldData[i].length == 3)
		{
			dropDownField.selectedIndex = i;
		}	
	}
}
}

function getSelectedDDValue(dropDownField)
{
var selected = '';
if (dropDownField.selectedIndex > -1)
{
	selected = dropDownField[dropDownField.selectedIndex].value;
}
else
{
	selected = getStoredValue(dropDownField.id);
}

return selected;
}

function getStoredValue(fieldId)
{
if (storedFormData == null)
{
	return '';
}
 for (var i = 0; i < storedFormData.length; i++)
 {
 		if (storedFormData[i] != null && storedFormData[i][0] == fieldId)
 		{
 			return storedFormData[i][1];
 		}
 }
 return '';
}

function clearDropDown(dropDownField)
	{
	while (dropDownField.options.length)
	{
		dropDownField.options[0] = null;
	}  
}

function handleNVSDisplay()
{
	var model = document.getElementById('model');
	if (model != null)
	{
		var hasModelValue = model.value != '';
		setDisplay('bodyid', !hasModelValue);
		setDisplay('variant', hasModelValue);
	}

	var variant = document.getElementById('variant');
	if (variant != null)
	{
		var hasVariantValue = variant.value != '';
		setDisplay('doors', !hasVariantValue);
		setDisplay('derivative', hasVariantValue);
	}
}

function setDisplay(fieldId, show)
{
	var field = document.getElementById(fieldId);
	if (field != null)
	{
		field.style.display = show ? 'inline' : 'none';
	}
}
/* end NVS advanced */