var aGetValues = [];
var aCompare = [];
var aCompareTitles = [];
var brands = [];
var models = [];
var sCompareUrl = '';
var sCurrentBodyClass = 'default';
var sCurrentUrl = location.href;

function initSearch() {
	if(strpos(sCurrentUrl, '?') !== false){
		var aUrlParts = explode('?', sCurrentUrl);		
		aUrlParts = explode('&', aUrlParts[1]);
		for(var i=0; i<aUrlParts.length; i++){
			aUrlPart = explode('=', aUrlParts[i]);
			var value = scanValue(aUrlPart[0], urldecode(aUrlPart[1]));
			if(!empty(value)){
				var aVal = [ aUrlPart[0], value ];
				aGetValues.push(aVal);
			}
		}
		removeGetValue('search');
		removeGetValue('show');
		doSearchRequest();
	}
}

function getSideCompare() {
	var sSideCompare = '';

	for ( var i = 0; i < aCompare.length; i++) {
		sSideCompare += '<div class="item">';
		sSideCompare += aCompareTitles[i];
		sSideCompare += '<img width="14" height="14" title="Deze selectie verwijderen" alt="Verwijderen" src="/template/images/ico-delete.gif" onclick="removeCompare(\'' + aCompare[i] + '\');">';
		sSideCompare += '</div>';
	}
	if (!empty(sSideCompare)) {
		sSideCompare = '<div class="item">Geselecteerde auto\'s:</div>' + sSideCompare;
	}
	$('sidebarCompare').innerHTML = sSideCompare;
}

function addCompare(obj) {
	var sHexonId = substr(obj.id,1);
	var iIndex = aCompare.indexOf(sHexonId);
	if (iIndex > -1) {
		removeCompare(sHexonId);
	} else {
		if (aCompare.length < 2) {
			aCompare.push(sHexonId);
			aCompareTitles.push($('carTitle' + sHexonId).innerHTML);
			$(obj).addClass(sCurrentBodyClass + '-' + aCompare.length);
			setCompare(sHexonId, 'add');
		} else {
			AlertBox.alert('U kunt maximaal 2 occasions tegelijk vergelijken! Verwijder eerst een andere occasion.');
		}		
	}
}

function removeCompare(p_sHexonId) {

	for ( var i = 0; i < aCompare.length; i++) {
		if (aCompare[i] == p_sHexonId) {
			aCompare.splice(i, 1);
			aCompareTitles.splice(i, 1);
		}
	}

	if (document.getElementById('i'+p_sHexonId)) {
		var obj = document.getElementById('i'+p_sHexonId);
		var aClasses = explode(' ', obj.className);
		var aClass = explode('-', aClasses[1]);

		$(obj).removeClass(aClasses[1]);

		if (aCompare.length == 1 && aClass[1] == 1) {
			if ($('i'+aCompare[0])) {
				$('i'+aCompare[0]).removeClass(
						aClass[0] + '-' + ((aClass[1] == 1) ? 2 : 1)).addClass(
						aClass[0] + '-' + ((aClass[1] == 1) ? 1 : 2));
			}
		}
	}
	setCompare(p_sHexonId, 'remove');
}

function updateTotalOccasions(fieldName, pos){
	updateInputField(fieldName + '_min', (pos.minpos));
	updateInputField(fieldName + '_max', (pos.maxpos));
	doSearchRequest();
}

function updateModels(){
	// save the selected value
	var brandName = $('merk').options[$('merk').selectedIndex].value;
	
	if (empty(brandName)) {
		brandId = 0;
	} else {
		brandId = brands.indexOf(brandName);
	}
		
	if (!brandId) {
		var brandId = 0;
	} 
	
	// clear the current options
	$('model').options.length = 0;

	for (var j = 0; j < models[brandId].length; j++) {
		$('model').options[$('model').options.length] = new Option(models[brandId][j], models[brandId][j]);
		// set the selected value
		if (models[brandId][j] == sSelectedModel) {
			$('model').options[$('model').options.length - 1].selected = true;
		}
	}
}

/*
function updateModels(value){
	selectModelObj.clearOptions();
	if (!value) {
		brandId = 0;
	} else {
		brandId = brands.indexOf(value);
	}
	first = true;
	$each(models[brandId], function(model) {
		newOption = new Element('option');
		newOption.text = model;
		newOption.value = model;
		if(first) {
			newOption.set('selected','selected');
			first = false;
		}
		//alert(newOption);
		selectModelObj.addOption(newOption);
	});
}
*/

function updateBouwjaar(){

	var iBouwjaarMin = document.getElementById('bouwjaar_min').value;
	var iBouwjaarMax = document.getElementById('bouwjaar_max').value;
	
	if (empty(iBouwjaarMin)) {
		iBouwjaarMin = (oDate.getFullYear() - 20);
	} 
	
	if (empty(iBouwjaarMax)) {
		iBouwjaarMax = oDate.getFullYear();
	}
	 
	iBouwjaarMin = parseInt(iBouwjaarMin);
	iBouwjaarMax = parseInt(iBouwjaarMax);
	
	// clear the current options
	$('bouwjaar_min').options.length = 0;
	$('bouwjaar_max').options.length = 0;
	
	var ii=0;
	for (var i=(oDate.getFullYear() - 20); i<=oDate.getFullYear(); i++){
		$('bouwjaar_min').options[ii] = new Option(i, i);
		$('bouwjaar_max').options[ii] = new Option(i, i);
		
		if (parseInt(sBouwjaarMin) == i || (empty(sBouwjaarMin) && iBouwjaarMin == i)) {
			$('bouwjaar_min').options[ii].selected = true;
		}
		
		if (parseInt(sBouwjaarMax) == i || iBouwjaarMax == (oDate.getFullYear() - 20) || (empty(sBouwjaarMax) && iBouwjaarMax == i)) {
			$('bouwjaar_max').options[ii].selected = true;
		}
		
		if(iBouwjaarMin > i) {
			$('bouwjaar_max').options[ii].disabled = true;
			$('bouwjaar_max').options[ii].style.color = '#cccccc';
		}
		
		if(iBouwjaarMax < i) {
			$('bouwjaar_min').options[ii].disabled = true;
			$('bouwjaar_min').options[ii].style.color = '#cccccc';
		}
		
		ii++;
	}
	sBouwjaarMin = '';
	sBouwjaarMax = '';	
}

function updatePrijs(){
	iStep = typeof iPriceSelectStep != 'undefined' && !empty(iPriceSelectStep) ? iPriceSelectStep : 250;
	iMax = typeof iPriceSelectMax != 'undefined' && !empty(iPriceSelectMax) ? iPriceSelectMax : 50000;
	
	var iPrijsMin = document.getElementById('prijs_min').value;
	var iPrijsMax = document.getElementById('prijs_max').value;

	if (empty(iPrijsMin)) {
		iPrijsMin = 0;
	} 
	
	if (empty(iPrijsMax)) {
		iPrijsMax = iMax;
	}

	iPrijsMin = parseInt(iPrijsMin);
	iPrijsMax = parseInt(iPrijsMax);
	
	// clear the current options
	$('prijs_min').options.length = 0;
	$('prijs_max').options.length = 0;
	//debugger;
	var ii=0;
	for (var i=0; i<=iPrijsMax; i+=iStep){
		$('prijs_min').options[ii] = new Option(i, i);
		$('prijs_max').options[ii] = new Option(i, i);
		
		if (parseInt(sPrijsMin) == i || (empty(sPrijsMin) && iPrijsMin == i)) {
			$('prijs_min').options[ii].selected = true;
		}
		
		if (parseInt(sPrijsMax) == i || iPrijsMax == 0 || (empty(sPrijsMax) && iPrijsMax == i)) {
			$('prijs_max').options[ii].selected = true;
		}
		
		if(iPrijsMin > i) {
			$('prijs_max').options[ii].disabled = true;
			$('prijs_max').options[ii].style.color = '#cccccc';
		}
		
		if(iPrijsMax < i) {
			$('prijs_min').options[ii].disabled = true;
			$('prijs_min').options[ii].style.color = '#cccccc';
		}
		
		ii++;
	}
	sPrijsMin = '';
	sPrijsMax = '';	
}

function updateKm(){

	var iKmMin = document.getElementById('kilometers_min').value;
	var iKmMax = document.getElementById('kilometers_max').value;

	if (empty(iKmMin)) {
		iKmMin = 0;
	} 
	if (empty(iKmMax)) {
		iKmMax = 160000;
	}
	
	iKmMin = parseInt(iKmMin);
	iKmMax = parseInt(iKmMax);
	
	// clear the current options
	$('kilometers_min').options.length = 0;
	$('kilometers_max').options.length = 0;
	
	var ii=0;
	for (var i=0; i<=160000; i+=1000){
		$('kilometers_min').options[ii] = new Option(i, i);
		$('kilometers_max').options[ii] = new Option(i, i);
		
		if (parseInt(sKilometersMin) == i || (empty(sKilometersMin) && iKmMin == i)) {
			$('kilometers_min').options[ii].selected = true;
		}
		if (parseInt(sKilometersMax) == i || iKmMax == 0 || (empty(sKilometersMax) && iKmMax == i)) {
			$('kilometers_max').options[ii].selected = true;
		}
		
		if(iKmMin > i) {
			$('kilometers_max').options[ii].disabled = true;
			$('kilometers_max').options[ii].style.color = '#cccccc';
		}
		
		if(iKmMax < i) {
			$('kilometers_min').options[ii].disabled = true;
			$('kilometers_min').options[ii].style.color = '#cccccc';
		}		
		ii++;
	}
	sKilometersMin = '';
	sKilometersMax = '';
}

function scanValue(naam, value){
	if(naam == 'bouwjaar_min') {
		aCurrentSearch[0] = parseInt(value);	
		if (value == (oDate.getFullYear()-20)) {
			value = '';
		}
	}
	if(naam == 'bouwjaar_max'){	
		aCurrentSearch[1] = parseInt(value);	
		if (value == oDate.getFullYear()) {
			value = '';
		}
	}
	
	if(naam == 'prijs_min') { 
		aCurrentSearch[2] = parseInt(value);
		if (value == 0) {
			value = '';
		}
	}
	
	if(naam == 'prijs_max') {
		aCurrentSearch[3] = parseInt(value);
		if (value == 50000) {
			value = '';
		}
	}
	
	if(naam == 'kilometers_min'){
		aCurrentSearch[4] = parseInt(value);
		if (value == 0) {
			value = '';
		}
	}
	if(naam == 'kilometers_max'){
		aCurrentSearch[5] = parseInt(value); 
		if (value == 160000) {
			value = '';
		}
	}
	
	if(naam == 'model'){
		if (value == 'Alle modellen') {
			value = '';
		}
	}
	return value;	
}

function updateInputField(naam, value) {
	// if brand update, update models pulldown
	if (naam == 'merk') {
		updateModels();
	}

	removeGetValue(naam); // remove prev select search
	value = scanValue(naam, value);
	if (!empty(value)) {		
		addGetValue(naam, value);		
	}
	doSearchRequest(); 
}

function updateCheckbox(obj) {
	if (obj.checked) {
		addGetValue(obj.name, obj.value);
	} else {
		removeGetValue(obj.name);
	}
	doSearchRequest();
}

/**
 * Add a get param to array
 * 
 * @param {Object}
 *            p_sKey The input/select/checkbox field name
 * @param {Object}
 *            p_sValue The value
 */
function addGetValue(p_sKey, p_sValue) {
	var aVal = [ p_sKey, p_sValue ];
	aGetValues.push(aVal);
}

/**
 * Remove a get param to array
 * 
 * @param {Object}
 *            p_sKey The input/select/checkbox field name
 */
function removeGetValue(p_sKey) {
	for ( var i = 0; i < aGetValues.length; i++) {
		if (aGetValues[i][0] == p_sKey) {
			aGetValues.splice(i, 1);
		}
	}
}


// bufferfunction to prevent multiple simultaneous requests
var requestPending=false;
function doSearchRequest() {
	// new request received
	//document.getElementById('iTotalMatchesFound').innerHTML = '?';
	if(requestPending) {
		// cancel previous request
		clearTimeout(requestPending);
	}
	// wait 250ms before doing actual request
	requestPending = setTimeout('doActualSearchRequest()', 250);
}

function doActualSearchRequest() {
	var sUrl = '';
	// convert to string
	for ( var i = 0; i < aGetValues.length; i++) {
		sUrl += ((i == 0) ? '' : '&') + aGetValues[i][0] + '='
				+ aGetValues[i][1];
	}
	if (!empty(sUrl)) {
		var jsonRequest = new Request.JSON(
				{
					url : "/template/front_search_rpc.php",
					onSuccess : function(aData) {
						document.getElementById('iTotalMatchesFound').innerHTML = aData.iMatchedFound;
						if ($('iTotalMatchesFoundHolder')) {
							$('iTotalMatchesFoundHolder').set('styles', {'display' : 'block'});
						}
					}
				}).get( {
			'occasions' : sUrl
		});
	} else {
		var mTotals = document.getElementById('iTotalMatchesFound').innerHTML;
		if(mTotals == 0 || mTotals == 'Alle'){
			document.getElementById('iTotalMatchesFound').innerHTML = 'Alle';
		} else {
			document.getElementById('iTotalMatchesFound').innerHTML = mTotals;
		}		
	}
}

function setCompare(p_sHexonId, p_sAction) {

	var sUrl = 'hid=' + p_sHexonId;

	var jsonRequest = new Request.JSON( {
		url : "/template/front_search_rpc.php",
		onSuccess : function(aData) {
			getSideCompare();
		}
	}).get( {
		'compare' : sUrl,
		'action' : p_sAction
	});
}

//function updateOccasionModels() {
//	var merk = document.getElementById('merk').value;
//	var model = document.getElementById('model');
//	var idxMerk = array.indexOf(merk);
//
//	for ( var i = 0; i < merken[idxMerk].length; i++) {
//		model.options[i] = new Option(merken[idxMerk][i], i);
//	}
//}

window.addEvent('domready',function() {
	
	updateModels();
	updateBouwjaar();
	updatePrijs();
	
	sCurrentBodyClass = document.getElementById('bodyPage').className;
	
	if ($('contentColumn') && $('contentColumn').hasClass('occasions')) {
		var jsonRequest = new Request.JSON( {
			url : "/template/front_search_rpc.php",
			onSuccess : function(aData) {
				if (!empty(aData)) {
					if (!empty(aData.id1)) {
						aCompare.push(aData.id1);
						aCompareTitles.push(aData.title1);
					}
					if (!empty(aData.id2)) {
						aCompare.push(aData.id2);
						aCompareTitles.push(aData.title2);
					}
					sCompareUrl = aData.url;
					getSideCompare();
				}
			}
		}).get( {
			'compare' : '',
			'action' : ''
		});
	}

	if ($('showCompare')) {
		$('showCompare').addEvent('click',function() {
			if (aCompare.length == 2) {
				document.location.href = sCompareUrl;
			} else {
				AlertBox
						.alert('U dient 2 occasions te selecteren voor een vergelijking.');
			}
		});
	}
});

