
var motorsWidget=(function(w,d){"use strict";var options={};function trim(str){if(str){var str=str.replace(/^\s\s*/,''),ws=/\s/,i=str.length;while(ws.test(str.charAt(--i)));return str.slice(0,i+1);}}
function ieFixEvent(){var e,el;if(!e){e=w.event;}
if(e.target){el=e.target;}else if(e.srcElement){el=e.srcElement;}
if(el.nodeType===3){el=el.parentNode;}
return el;}
function getNs(el){var elNs,retVal=false;if(el&&el.id){elNs=el.id.split('-');elNs.pop();retVal=elNs.join('-');}
return retVal;}
function validate(el,method,compareTo){var valid,compareEl,val1,val2,returnVal;if(!el.tagName){el=ieFixEvent();}
if(method==='withinbound'){compareEl=d.getElementById(getNs(el)+'-'+compareTo);val1=parseInt(el.options[el.selectedIndex].value,10);val2=parseInt(compareEl.options[compareEl.selectedIndex].value,10);if(!isNaN(val1*val2)){if(compareTo==='maxprice'&&val1>val2){el.value=compareEl.options[(compareEl.selectedIndex-1>=0)?compareEl.selectedIndex-1:compareEl.selectedIndex].value;alert('Minimum price must be lower than the maximum price');}else if(compareTo==='minprice'&&val1<val2){el.value=compareEl.options[(compareEl.selectedIndex+1<=compareEl.options.length)?compareEl.selectedIndex+1:compareEl.selectedIndex].value;alert('Maximum price must be greater than minimum price');}}
return false;}else{var valid=options.config.validate[method].test(trim(el.value));if(!valid){if(el.className.indexOf("invalid")<1)
el.className+=" invalid";}else{el.className=trim(el.className.replace(/\binvalid\b/g,''));}
return valid;}}
var getCriteria=function(el){var nodeList,panelNode,field,fieldEl,errorEl,val=false,fail=false,i;options.search={};if(!el.tagName)
el=ieFixEvent();panelNode=el.parentNode;options.search.type=panelNode.id.split(options.config.nameSpace)[1];nodeList=panelNode.childNodes;for(i=0;i<nodeList.length;i++){fieldEl=nodeList[i];errorEl=d.getElementById(fieldEl.id+'-error');if(fieldEl.nodeType!==3){if(fieldEl.className.indexOf('invalid')>-1){fieldEl.focus();if(fieldEl.title){if(!errorEl){errorEl=d.createElement('span');errorEl.setAttribute('id',fieldEl.id+'-error');errorEl.className='error';if(fieldEl.nextSibling){fieldEl.parentNode.insertBefore(errorEl,fieldEl.nextSibling);}else{fieldEl.parentNode.appendChild(errorEl);}
errorEl.innerHTML=fieldEl.title;}else{errorEl.style.display='block';}}
fail=true;}else{if(errorEl)
errorEl.style.display='none';}
if(fieldEl.tagName=="SELECT"){val=fieldEl.options[fieldEl.selectedIndex].value;}else if(fieldEl.tagName=="INPUT"&&fieldEl.type!=="button"){val=fieldEl.value;}
if(val)
options.search[fieldEl.id.split(el.parentNode.id+'-')[1]]=val;val=false;}}
if(!fail)
w.location.href=buildURL();}
function getModels(){var el=document.getElementById(options.config.nameSpace+'UsedCarSearch-make'),targ=document.getElementById(options.config.nameSpace+'UsedCarSearch-model'),i=el.selectedIndex,opt=el.options,val=opt[i].value;if(val==='Any'){targ.innerHTML='<option value="Any">Any</option>';}else{targ.innerHTML="";targ.options[0]=new Option('Any','Any');var make=carData[val];for(var a=1;a<=make.length;a++){targ.options[a]=new Option(make[a-1],make[a-1]);}}}
function getMakes(){var make,el=d.getElementById(options.config.nameSpace+'UsedCarSearch-make'),count=1;if(carData&&el){el.innerHTML="";el.options[0]=new Option('Any','Any');for(make in carData){el.options[count]=new Option(make,make);count++;}}}
options={"config":{"makesURL":"http://www.motors.co.uk/Ajax/AllMakesModels.ashx","motorsURL":"http://www.motors.co.uk/search/","carsourceURL":"http://api.carsource.co.uk/json-models-list.php","referrer":(function(){var pHost=w.location.host+'/',pUrl=w.location.href.split('?')[0],pRef;if(pHost!==pUrl&&w.location.host!==pUrl){pRef=pUrl.split(pHost)[1];if(pRef)
pRef=pHost+pRef.substr(0,pRef.indexOf('/')+1);}
return((pRef)?pRef:w.location.host);}()),"nameSpace":"mot-","showTabs":true,"showLabels":true,"wrapperId":"motorsPanel","baseAnchor":null,"eventMethod":(function(){var r="onevent";if(w.addEventListener){r="addEventListener";}else if(w.attachEvent){r="attachEvent";}
return r;}()),"tabCache":[],"panelCache":[],"validate":{"pcode":/(GIR 0AA|[A-PR-UWYZ]([0-9][0-9A-HJKPS-UW]?|[A-HK-Y][0-9][0-9ABEHMNPRV-Y]?) {0,1}[0-9][ABD-HJLNP-UW-Z]{2})/i}},"structure":{"Used Car Search":{"tag":{"type":"h2","value":"Find a used car"},"location":{"type":"text","label":"Postcode","title":"Please enter your full postcode","elClass":"postcode invalid","event":[{"type":"onkeyup","fn":function(){validate(this,'pcode')}}]},"distance":{"type":"select","value":["1","10","20","30","40","50","60","100","200","1000"],"transform":"{{value}} miles","label":"Distance"},"make":{"type":"select","label":"Make","event":[{"type":"onchange","fn":function(){getModels()}}]},"model":{"type":"select","label":"Model"},"minprice":{"type":"select","value":["500","1000","2000","3000","4000","5000","10000"],"transform":"\u00A3{{value}}","label":"From &pound;","event":[{"type":"onchange","fn":function(){validate(this,'withinbound','maxprice')}}]},"maxprice":{"type":"select","value":["500","1000","2000","3000","4000","5000","10000","100000"],"transform":"\u00A3{{value}}","label":"To &pound;","event":[{"type":"onchange","fn":function(){validate(this,'withinbound','minprice')}}]},"search":{"type":"button","value":"Search","event":[{"type":"onclick","fn":function(){getCriteria(this)}}]}},"Used Car Dealer":{"tag":{"type":"h2","value":"Find a car dealer"},"location":{"type":"text","label":"Postcode","title":"Please enter your full postcode","elClass":"postcode invalid","event":[{"type":"onkeyup","fn":function(){validate(this,'pcode')}}]},"distance":{"type":"select","value":["1","10","20","30","40","50","60","100","200","1000"],"transform":"{{value}} miles","label":"Distance"},"dealerName":{"type":"text","label":"Dealership"},"search":{"type":"button","value":"Search","event":[{"type":"onclick","fn":function(){getCriteria(this)}}]}}}};function eventBind(el,evt,fn){if(!el){el=w;}
if(evt==="onload"){el.onreadystatechange=function(){if(!this.readyState||this.readyState=="loaded"||this.readyState=='complete'){fn();}};}
switch(options.config.eventMethod){case"addEventListener":el.addEventListener(evt.replace(/on/,''),fn,false);break;case"attachEvent":el.attachEvent(evt,fn);break;default:switch(evt){case"onkeyup":el.onkeyup=fn;break;case"onload":el.onload=fn;break;default:el.onclick=fn;break;}}}
function extend(obj,extObj){var a;for(a in extObj){if(extObj.hasOwnProperty(a)){if(extObj[a]&&(typeof extObj[a]==='object')&&!(extObj[a]instanceof Array)){extend(obj[a],extObj[a]);}else{obj[a]=extObj[a];}}}
a=null;return obj;}
function getJsonp(url,fn){var scriptTag=d.createElement('script');scriptTag.setAttribute('src',url);if(fn){eventBind(scriptTag,"onload",fn);}
d.body.appendChild(scriptTag);}
function tabClick(el){var elId,tab,panel,i;if(!el.tagName){el=ieFixEvent();if(el.tagName!=='LI')
el=el.parentNode;}
elId=el.id.split(options.config.nameSpace+'tab-')[1];for(i=0;i<options.config.tabCache.length;i++){tab=options.config.tabCache[i];if(tab.className.indexOf('active')>-1)
tab.className=trim(tab.className.replace(/\bactive\b/g,''));}
el.className+=" active";for(i=0;i<options.config.panelCache.length;i++){panel=options.config.panelCache[i];if(panel.className.indexOf('active')>-1)
panel.className=trim(panel.className.replace(/\bactive\b/g,''));}
d.getElementById(options.config.nameSpace+elId).className+=" active";}
function buildURL(){var opt=options.search,a,url=options.config.motorsURL,price=['0',''];for(a in opt){if(opt.hasOwnProperty(a)){if(a==="minprice"||a==="maxprice"){if(opt[a]!=='Any'){price[(a==="minprice")?0:1]=opt[a];}}else{if(a==="type"){if(opt[a]==="UsedCarSearch"){url+='default.aspx?';var make="";var model="";if(options.search.model!=="Any")
model=','+options.search.model;if(options.search.make!=="Any")
url+=('makeModel='+options.search.make+model+'&');}else if(opt[a]==="UsedCarDealer"){url+='dealer/default.aspx?';}}else{if(a!=="make"&&a!=="model"){url+=(a+'='+escape(opt[a])+'&');}}}}}
if(price[0]!=="0"||price[1]!==""){url+=('price='+price.join(',')+'&');}
url+=('referring_site='+options.config.referrer);return url;}
function buildInput(targEl,fieldName,fieldObj){var fieldHtml,labelHtml,i=0,fieldId=targEl.id+'-'+fieldName;fieldHtml=d.getElementById(fieldId);if(!fieldHtml){if(fieldObj.type=="select"){fieldHtml=d.createElement('select');fieldHtml.options[0]=new Option('Any','Any');if(fieldObj.value){for(;i<fieldObj.value.length;i++){if(fieldObj.value[i]!=='undefined')
fieldHtml.options[i+1]=new Option(((fieldObj.transform)?fieldObj.transform.replace(/{{value}}/g,fieldObj.value[i]):fieldObj.value[i]),fieldObj.value[i]);}}}else if(fieldName=="tag"){targEl.innerHTML+='<'+fieldObj.type+'>'+fieldObj.value+'</'+fieldObj.type+'>';return false;}else{fieldHtml=d.createElement('input');fieldHtml.setAttribute('type',fieldObj.type);if(fieldObj.value)
fieldHtml.setAttribute('value',fieldObj.value);}
if(fieldObj.elClass)
fieldHtml.className=fieldObj.elClass;if(fieldObj.title)
fieldHtml.setAttribute('title',fieldObj.title);fieldHtml.setAttribute('id',fieldId);targEl.appendChild(fieldHtml);if(options.config.showLabels&&fieldObj.label){labelHtml=d.createElement('label');labelHtml.setAttribute('for',fieldId);targEl.insertBefore(labelHtml,fieldHtml);labelHtml.innerHTML=fieldObj.label;}}
if(fieldObj.event){for(i=0;i<fieldObj.event.length;i++){eventBind(fieldHtml,fieldObj.event[i].type,fieldObj.event[i].fn);}}}
function buildPanel(){var panel,field,panelEl,panelId,obj=options.structure;for(panel in obj){if(obj.hasOwnProperty(panel)){panelId=options.config.nameSpace+panel.replace(/\W/g,'');panelEl=d.getElementById(panelId);if(!panelEl){panelEl=d.createElement('div');panelEl.setAttribute('id',panelId);panelEl.className='panel';options.config.baseAnchor.appendChild(panelEl);}
for(field in obj[panel]){if(obj[panel].hasOwnProperty(field)){buildInput(panelEl,field,obj[panel][field]);}}
options.config.panelCache.push(panelEl);}}
options.config.panelCache[0].className+=' active';}
function buildTabs(){var tabHtml,tabEl,tabId,tab,obj=options.structure,objItem,objCount=0;for(objItem in obj){if(obj.hasOwnProperty(objItem))objCount++;}
if(objCount<2)
return false;options.config.baseAnchor.innerHTML+='<div id="'+options.config.nameSpace+'logo">Powered by <a href="http://www.motors.co.uk" target="_blank"><img alt="www.motors.co.uk used car website" src="http://cdn2.motors.co.uk/v2live/images/wl/logo-72x28.png"></a></div>';options.config.baseAnchor.innerHTML+='<ul id="'+options.config.nameSpace+'tabs"></ul>';tabEl=d.getElementById(options.config.nameSpace+'tabs');for(objItem in obj){tabId=options.config.nameSpace+'tab-'+objItem.replace(/\W/g,'');tab=d.getElementById(tabId);if(!tab){tab=d.createElement('li');tab.setAttribute('id',tabId);tabEl.appendChild(tab);tab.innerHTML='<a href="#motors_search">'+objItem+'</a>';}
eventBind(tab,'onclick',function(){tabClick(this)});options.config.tabCache.push(tab);}
options.config.tabCache[0].className+=' active';}
function initMotorsPanel(){options.config.baseAnchor=(function(){var ret=false,el=d.getElementById(options.config.wrapperId);if(el)
ret=el;return ret;}());if(options.config.baseAnchor){if(options.config.showTabs)
buildTabs();buildPanel();}
getJsonp(options.config.makesURL,getMakes);};if(typeof motorsOverride==='object')
extend(options,motorsOverride);eventBind(w,"onload",initMotorsPanel);return{search:options.search}}(this,document));
