var sort = {
	container:null,
	elems: Object,
	sorts:[],
	alphabeticaly: function() {
		this.sorts = this.sorts.sort();
		this.container.innerHTML = '';
		for (var i in this.sorts) {
			this.container.appendChild(this.elems[this.sorts[i]]);
		}
	},
	addElem: function(elem, id){
		this.elems[id] = elem;
		this.sorts.push(id);
	},
	unsort: function() {
		this.container.innerHTML = '';
		for (var i in this.elems) {
			this.container.appendChild(this.elems[i]);
		}
	}
}
var vastSearch = {

expandCollapse: function(onclick_elem, show_limit){
	var holder_elem = onclick_elem.parentNode;
	if (holder_elem.accrun){
		onclick_elem.innerHTML = '<div class="drill_morelessLinkHolder">More &raquo;</div>';
		var item_holder = holder_elem.getElementsByTagName('DIV')[0];
		item_holder.innerHTML = holder_elem.unsorter;
		holder_elem.accrun = false;
		var subs = item_holder.getElementsByTagName('DIV');
		for(var i=0; i<subs.length; i++) {
			if(i >= show_limit*3){subs[i].style.display = 'none';}
		}
	}else{
		onclick_elem.innerHTML = '<div class="drill_morelessLinkHolder">Less &laquo;</div>';
		var item_holder = holder_elem.getElementsByTagName('DIV')[0];
		var subs = item_holder.getElementsByTagName('DIV');
		for(var i=0; i<subs.length; i++) {
			if(i >= show_limit){
				subs[i].style.display = 'block';
			}
		}
		holder_elem.accrun = true;
		if (!holder_elem.sorter){
			holder_elem.unsorter = holder_elem.getElementsByTagName('DIV')[0].innerHTML;
			holder_elem.sorter = {};
			holder_elem.sorter.container = null;
			holder_elem.sorter.elems= Object;
			holder_elem.sorter.sorts=[];
			holder_elem.sorter.alphabeticaly = function() {
				this.sorts = this.sorts.sort();
				this.container.innerHTML = '';
				for (var i in this.sorts) {
					this.container.appendChild(this.elems[this.sorts[i]]);
				}
			}
			holder_elem.sorter.addElem = function(elem, id){
				this.elems[id] = elem.cloneNode(true);
				this.sorts.push(id);
			}
			holder_elem.sorter.unsort = function() {
				this.container.innerHTML = '';
				for (var i in this.elems) {
					this.container.appendChild(this.elems[i]);
				}
			}
			holder_elem.sorter.container = holder_elem.getElementsByTagName('DIV')[0];
			for (var i=0; i<holder_elem.sorter.container.childNodes.length; i++) {
				if (holder_elem.sorter.container.childNodes[i] != null && holder_elem.sorter.container.childNodes[i].nodeName == 'DIV' ) {
					var id = holder_elem.sorter.container.childNodes[i].getElementsByTagName('A')[0].innerHTML;
					holder_elem.sorter.addElem(holder_elem.sorter.container.childNodes[i], id);
				}
			}
			holder_elem.sorter.alphabeticaly();
			holder_elem.sorter = holder_elem.sorter.container.innerHTML;
		}else{
			holder_elem.getElementsByTagName('DIV')[0].innerHTML = holder_elem.sorter;
		}

	}
},




	expandCollapse1: function(node, drill_title) {
		var vis, div, divs, elem, drill_name, data_type;
		divs = node.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.getElementsByTagName('div')
		div = divs[0];
		//drill_title = divs[0].parentNode.parentNode.parentNode.firstChild.innerHTML;
		//alert(drill_title);
		elem = div.getElementsByTagName('div');
		for (var i=0; i<elem.length; i++) {
			if (elem[i].style.display == 'none') {
				elem[i].style.display = 'block';
				vis = true;
			}else if(elem[i].style.display == 'block'){
				vis = false;
				elem[i].style.display = 'none';
			}
		}
		if (vis) {
			node.firstChild.innerHTML = 'Less &laquo;';
			if (this.isSort(drill_title)) {
				if(_SARISSA_IS_SAFARI){ // || _SARISSA_IS_IE
					sort.container = div;
					for (var i=0; i<div.childNodes.length; i++) {
						if (div.childNodes[i] != null && div.childNodes[i].nodeName == 'DIV' ) {
							var id = div.childNodes[i].getElementsByTagName('a')[0].innerHTML;
							sort.addElem(div.childNodes[i], id);
						}
					}
					sort.alphabeticaly();
				}else{
					this.sort(div, '/DIV/DIV', 'normalize-space(DIV/A)');
				}
			}
		}else{
			node.firstChild.innerHTML = 'More &raquo;';
			if (this.isSort(drill_title)) {
				if(_SARISSA_IS_SAFARI){
					sort.unsort();
				}else{
					this.sort(div, "/DIV/DIV", "number(translate(DIV/SPAN, ',', ''))", "descending", "number");
				}
			}
		}
	},
	sort: function(node, what, by, order, data_type) {
		if (navigator.userAgent.indexOf('Opera')!=-1) {what = what.toLowerCase();by = by.toLowerCase();}
		if (!order) {order='ascending';}
		if (!what) {what='/child::node()/child::node()';}
		if (!by) {by='A';}
		if(!data_type) {data_type = 'text'}
		var xslStr = '<?xml version="1.0" encoding="UTF-8"?>'+
					'<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">'+
					'<xsl:output method="html" />'+
					'<xsl:template match="/">'+
					'<div style="{/child::node()/@style}" id="{/child::node()/@id}" class="{/child::node()/@class}">'+
					'<xsl:for-each select="'+what+'">'+
					'<xsl:sort select="'+by+'" data-type="'+data_type+'" order="'+order+'" />'+
					'<xsl:copy-of select="."/>'+
					'</xsl:for-each>'+
					'</div>'+
					'</xsl:template>'+
					'<xsl:template name="tolower"></xsl:template>'+
					'</xsl:stylesheet>';
		var processor = new XSLTProcessor();
		var xslDoc = Sarissa.getDomDocument();
		xslDoc = (new DOMParser()).parseFromString(xslStr, "text/xml");
		processor.importStylesheet(xslDoc);
		//processor.setParameter(null, "title", paramValue);
	    var xmlDoc = (new DOMParser()).parseFromString((new XMLSerializer()).serializeToString(node), "text/xml");
	   	var newDocument = processor.transformToFragment(xmlDoc, window.document);
	    node.parentNode.replaceChild(newDocument, node);
	    this.afterSort();
	},
	isSort: function(dt) {
		if (dt == "Price" || dt == "Salary" || dt == "Sleeps") {return false;}else{return true;}
	},
	afterSort: function() {
		var toend = Array('Other International', 'unknown');
		var a = document.getElementsByTagName('a');
		for (j=0; j<toend.length; j++) {
			for (var i=0; i<a.length; i++) {
				if (a[i].className == 'drillSubTitle') {
					if (a[i].innerHTML.indexOf(toend[j]) != -1) {
						var drill = a[i].parentNode.parentNode;
						var parent = drill.parentNode;
						var clone = drill.cloneNode(true);
						parent.appendChild(clone);
						parent.removeChild(drill);
						continue;
					}
				}
			}
		}
	},
	ajax: function(uri, data, target, todo) {
		uri = uri.replace(/\s+/gi, '+');
		var xmlhttp =  new XMLHttpRequest();
    	xmlhttp.open('POST', uri, true);
		xmlhttp.onreadystatechange= function() {
			if (xmlhttp.readyState == 4) {
				if (xmlhttp.status == 200){
					if (target) {
						if (typeof(target) == 'object') {
							switch(todo) {
								case 'replace':
									var span = document.createElement('span');
									span.innerHTML = xmlhttp.responseText;
									target.parentNode.replaceChild(span, target);
									break;
								case "replace_txt":
									var tnode = document.createTextNode(xmlhttp.responseText);
									target.parentNode.replaceChild(tnode, target);
									break;
								case "execute":
									eval(xmlhttp.responseText);
									break;
								default:
									target.innerHTML = xmlhttp.responseText;
							}
						}else if (target) {
							document.getElementById(target).innerHTML = xmlhttp.responseText;
						}
					}else{
				    	//alert(xmlhttp.responseText);
				    }
				}else{
				    //alert("Error occured!");
				}
			}
		}
		xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    	xmlhttp.send(data);
	},
	clear: function(id) {
		var el = document.getElementById(id);
		if (el) {
			el.value = '';
		}
	},
	compactDesc: function(customCharLimit) {
		if(customCharLimit) var charLimit = customCharLimit;
		else var charLimit = 300;
		var spans = document.getElementsByTagName('span');
		for(var i=0; i<spans.length; i++) {
			if (spans[i].getAttribute('name') == 'vDesc') {
				var desc = spans[i].innerHTML;
				if (desc.length > charLimit) {
					for(var g=0; g<40; g++){if (desc.charCodeAt(charLimit) != 32){charLimit++;}}charLimit++;
					var f = desc.substring(0,charLimit);
					var s = desc.substring(charLimit);
					var eSpan = document.createElement('span');
					eSpan.innerHTML = s;
					eSpan.style.display = 'none';
					var eLnk = document.createElement('a');
					eLnk.onclick = function() {vastSearch.expandDesc(this);}
					eLnk.setAttribute('href', "javascript:void(0)");
					eLnk.innerHTML = ' more&nbsp;details&nbsp;&raquo;<br>';
					eLnk.className = "resultsContentType";
					spans[i].innerHTML = f;
					spans[i].appendChild(eSpan);

					if (spans[i].nextSibling != null && spans[i].nextSibling.nextSibling != null) {
						var parent = spans[i].nextSibling.parentNode;
						var sSpan = document.createElement('span');
						sSpan.innerHTML = "<strong style=\"color:black;\">"+spans[i].nextSibling.data+"</strong>"+spans[i].nextSibling.nextSibling.innerHTML;
						sSpan.style.display = 'none';
						parent.removeChild(spans[i].nextSibling.nextSibling);
						parent.removeChild(spans[i].nextSibling);
						spans[i].appendChild(sSpan);
					}
					spans[i].appendChild(eLnk);
				}
			}
		}
		//vastSearch.higlightKeywords();
		this.initSettings();
	},
	/* below is a copy of above, changed for the purpose of Case 41000 (Case 41000:   Vast & Cobrands: Valid xhtml for result details ) */
	compactDescForClassName: function(customCharLimit) {
		if(customCharLimit) var charLimit = customCharLimit;
		else var charLimit = 300;
		var spans = $(".vDesc, .v_Desc");
		for(var i=0; i<spans.length; i++) {
			var desc = spans[i].innerHTML;
			if (desc.length > charLimit) {
				for(var g=0; g<40; g++){if (desc.charCodeAt(charLimit) != 32){charLimit++;}}charLimit++;
				var f = desc.substring(0,charLimit);
				var s = desc.substring(charLimit);
				var eSpan = document.createElement('span');
				eSpan.innerHTML = s;
				eSpan.style.display = 'none';
				var eLnk = document.createElement('a');
				eLnk.onclick = function() {vastSearch.expandDesc(this);}
				eLnk.setAttribute('href', "javascript:void(0)");
				eLnk.innerHTML = ' more&nbsp;details&nbsp;&raquo;<br>';
				eLnk.className = "resultsContentType";
				spans[i].innerHTML = f;
				spans[i].appendChild(eSpan);

				if (spans[i].nextSibling != null && spans[i].nextSibling.nextSibling != null) {
					var parent = spans[i].nextSibling.parentNode;
					var sSpan = document.createElement('span');
					sSpan.innerHTML = "<strong style=\"color:black;\">"+spans[i].nextSibling.data+"</strong>"+spans[i].nextSibling.nextSibling.innerHTML;
					sSpan.style.display = 'none';
					parent.removeChild(spans[i].nextSibling.nextSibling);
					parent.removeChild(spans[i].nextSibling);
					spans[i].appendChild(sSpan);
				}
				spans[i].appendChild(eLnk);
			}
		}
		//vastSearch.higlightKeywords();
		this.initSettings();
	},	
	initSettings: function() {
		var example_location = 'e.g., Chicago, 94105, Texas, Motown';
		var location_box = document.getElementsByName('tlocation')[0];
		if (location_box.value == '') {
			if (initialText) {
				location_box.value = initialText;
			}else{
				location_box.value = example_location;
			}
		}
	},
	expandDesc: function(elem) {
		var elems = elem.parentNode.getElementsByTagName('span');
		for (var i=0; i<elems.length; i++) {
			if (elems[i].style.display == 'none') {
				elems[i].style.display = 'inline';
			}else{
				elems[i].style.display = 'none';
			}
		}
		if (elem.innerHTML.indexOf('more&nbsp;details')!=-1) {elem.innerHTML = ' less details &laquo;<br>'}else{elem.innerHTML = 'more&nbsp;details&nbsp;&raquo;<br>'}
	},
	higlightKeywords: function() {
		var kw = window.location.href.match(/keywords=(.+?)\&/i);
		//alert(typeof kw);
		if (kw[1]) {
			this.doHighlight(document, kw[1]);
		}
	},
	doHighlight: function(elem, kw) {
		if (elem.nodeType == 3) {
			var it = elem.nodeValue;
			var regex = new RegExp(kw, "i");
			var cHtm = it.replace(regex, '<span style="background-color:#fff000;margin:0px;">'+kw+'</span>');
			if (cHtm != it) {
				var newElem = document.createElement('span');
				newElem.innerHTML = cHtm;
				elem.parentNode.replaceChild(newElem, elem);
			}
		}else if (elem.childNodes.length > 0) {
			for (var i=0; i<elem.childNodes.length; i++) {
				this.doHighlight(elem.childNodes[i], kw);
			}
		}
	},
	report: function(elem, id, vertical, val) {
		this.ajax('/used-car-sales/ajax/incorrect', 'report='+id+'\t'+vertical+'\t'+val, elem, 'replace');
	},
	details: function(elem, id, vertical, domain, uacct) {
		var regex = new RegExp("http://([a-zA-Z0-9\.]+)(\/{0,1}.*)", "i");
		var matched = regex.exec(window.location.href);
		var pre = elem.href;
		var preIn = elem.innerHTML;			
		var detailed = regex.exec(elem.href);
		elem.href = '';
		if (matched) {
 			var query = matched[0];
 			var val = 'Details';
 			//this.ajax('merix/details', 'details='+id+'\t'+vertical+'\t'+domain+'\t'+query+'\t'+val);
 			if(uacct) { _uacct = uacct; }
			else { _uacct = 'UA-230795-1'; }
			if(window.urchinTracker){
 				urchinTracker(detailed[2]);
			}
		}
		elem.href = pre;
		if (preIn.toLowerCase().match('<img')!='<img') { elem.innerHTML = preIn; }			
	},
	fieldClear: function(obj, fieldClass, initialText){
		if(initialText!="" && obj.value == initialText){
			obj.value = "";
			obj.className = fieldClass;
		}
	},
	fieldPrepare: function(obj, fieldName, initialText){
		if(initialText == obj[fieldName].value){
			obj[fieldName].value = "";
		}
		return true;
	},
	showHide: function() {
		var allLinks = document.getElementsByTagName('a');
		for(var i=0; i<allLinks.length; i++) {
			if (allLinks[i].className == 'home_more') {
				allLinks[i].onclick = function() {
					if(this.title == 'CLICK for more') this.colapsed=1; else this.colapsed=0;
					var allLinks2 = document.getElementsByTagName('a');
					for(var i=0; i<allLinks.length; i++)
					if (allLinks2[i].className == 'home_more' && allLinks2[i]) {
						allLinks2[i].innerHTML = "more &raquo;";
						allLinks2[i].title = "CLICK for more";
					}
					var allULs = document.getElementsByTagName('ul');
					for(i=0;i<allULs.length; i++)
						if(allULs[i].className=='showhide'){
							$target = allULs[i];
							$target.style.display='none';
						}

					var chNodes = this.parentNode.childNodes;
					for(i=0;i<chNodes.length; i++)
						if(chNodes[i].className=='showhide')
							$target = chNodes[i];
					$target.style.display = (this.colapsed)?'none':'block';
					vastSearch.switchCssValue('display','block','none',$target);
					this.innerHTML 	= ($target.style.display=="none")?"more &raquo;":" &laquo; less ";
					this.title 		= ($target.style.display=="none")?"CLICK for more":"CLICK for less";
				}
			}
		}
		//vastSearch.higlightKeywords();
	},
	switchCssValue: function (what,val1,val2,e){
		e.style[what]=(e.style[what]==val1)?val2:val1;
	},
	showHideGraph: function(elem, uri) {
		var graph_holder = document.getElementById('graph_tr_id');
		var graph_one_result = document.getElementById('graphs_one_result');
		var separator = document.getElementById('topLine');
		var button = document.getElementById('graph_button_id');
		if (!graph_holder.childNodes[0]) {
			button.innerHTML = 'hide graph';
			separator.style.width = "731px";
			vastSearch.setCookie('show_graph', 'true');
			this.doRequest(uri);
		}else{
			button.innerHTML = 'graph these results';
			vastSearch.setCookie('show_graph', 'false');
			graph_holder.innerHTML = '';
			graph_one_result.innerHTML = '';
			separator.style.width = "731px";
			//this.doRequest('/merix/closeGraph');
		}
	},
	parseGraph: function(data) {
		var graph_holder = document.getElementById('graph_tr_id');
		var js = data.match(/<script.*?>(.*?)<\/script>/i);
		if (js) {
			data = data.replace(/<script.*?>(.*?)<\/script>/i, '');
			graph_holder.innerHTML = data;
			eval(js[1]);
		}else{
			graph_holder.innerHTML = data;
		}
	},
	doRequest: function(uri) {
		//this.removeOldRequest();
		this.insertScript({'id':'current_request', 'src':uri, 'language':'JavaScript', 'text':'void(0)'});
	},
	removeOldRequest: function() {
		var old_req = document.getElementById('current_request');
		if (old_req) {
			old_req.parentNode.removeChild(old_req);
		}
	},
	insertScript: function(params) {
		if (params) {
			var scr = document.createElement('script');
			for (var i in params) {
				if (i == 'innerHTML') {
					scr.innerHTML = params[i];
				}else{
					scr.setAttribute(i, params[i]);
				}
			}
			var head = document.getElementsByTagName('head')[0];
			head.appendChild(scr);
		}
	},
	deleteCookie: function(name) {
		var exp = new Date();
		exp.setTime (exp.getTime() - 1);
		var cval = this.getCookie (name);
		document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString();
	},
	getCookie: function(name) {
		var nameEQ = name + "=";
		var ca = document.cookie.split(';');
		for(var i=0;i < ca.length;i++) {
			var c = ca[i];
			while (c.charAt(0)==' ') c = c.substring(1,c.length);
			if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
		}
		return false;
	},
	setCookie: function(name, value) {
		var datum = new Date();
		datum.setTime(datum.getTime()+31536000000); //year
		var expires = "expires="+datum.toGMTString();
		document.cookie = name+'='+value+'; '+expires+'; path=/';
	}
}
var vastGraph = {
	showResult: function(params) {
		var callback = 'vastGraph.showPointResult';
		var url = '';
		var hi, lo;
		for (var i in params) {
			switch(i) {
				case 'year':
					url += '/'+i+'-'+params[i]+'.'+params[i];
					break;
				case 'mileage':
				case 'price':
					lo = Math.round(((params[i]/1)/100)*95);
					hi = Math.round(((params[i]/1)/100)*105);
					url += '/'+i+'-'+lo+'.'+hi;
					break;
				case 'make':
				case 'model':
					url += '/'+i+'-'+params[i];
					break;
				default:
					url += '/'+i+'-'+params[i];
			}
		}
		var root = window.location.href.match(/http:\/\/[\w\.\-]+\//i);
		url = '/' + 'graphs/point'+url+'?callback='+callback;
		document.getElementById('graphs_one_result').innerHTML = '<div style="padding:5px;"><div style="margin-left:10px;">Loading result...</div></div>';
		vastSearch.doRequest(url);
	},
	showPointResult: function(data) {
		document.getElementById('graphs_one_result').innerHTML = data;
	}
}

function fieldClear(obj, fieldClass, initialText){
	if(initialText!="" && obj.value == initialText){
		obj.value = "";
		obj.className = fieldClass;
	}
}
function fieldPrepare(obj, fieldName, initialText){

	if(initialText == obj[fieldName].value){
		obj[fieldName].value = "";
	}
	return true;
}

function checkTemplate(){
	if(vastSearch.getCookie('v_tpl_first')){
		//alert('TPL FIRST DELETING');
		vastSearch.deleteCookie('v_tpl_first');
		//document.location.href = document.location;
		window.location.reload()
	}else{
		//alert('NO TPL FIRST');
	}
}

function urchTrack(url,uacct) {
	try{
	if(uacct) { _uacct = uacct; }
	else { _uacct = 'UA-230795-1'; }
	urchinTracker(url);
	}catch(e){}

}
function MoreCats() {
	var more = document.getElementById('more_categories');
	var moreL = document.getElementById('more_categoriesL');
	var moreR = document.getElementById('more_categoriesR');
	var autos = document.getElementById('autos');
	var autosInner = document.getElementById('autosInner');
	var autosL = document.getElementById('autosL');
	var autosR = document.getElementById('autosR');
	var moreCat = document.getElementById('moreCat');
	if (more.className=='tBtnC') {
		more.className = 'tBtnCActive';
		moreL.className = 'tBtnL2';
		moreR.className = 'tBtnR2';
		autos.className = 'tBtnC2BgInactive';
		autosInner.className = 'tBtnC2Inactive';
		autosL.className = 'tBtnL';
		autosR.className = 'tBtnR';
		moreCat.style.display = 'block';
	} else {
		more.className = 'tBtnC';
		moreL.className = 'tBtnL';
		moreR.className = 'tBtnR';
		autos.className = 'tBtnC2Bg';
		autosInner.className = 'tBtnC2';
		autosL.className = 'tBtnL2';
		autosR.className = 'tBtnR2';
		moreCat.style.display = 'none';
	}
}

function toggleFooterCats(e){
    vastSearch.switchCssValue('backgroundColor','','#eee',e);
    d = document.getElementById('footerCats');
    if(!d) return false;
    vastSearch.switchCssValue('display','block','none',d);
    return false;
}

function vrand(from,to){
	return Math.floor(Math.random()*to+from);
}

