var Favorites={};Favorites.data={};Favorites.favorite_queue=[];Favorites.renderers=[];Favorites.error_zip="Please enter a valid U.S. ZIP Code";Favorites.login_fav_error_id="fav.error";Favorites.createActionMap=function(){Favorites.action_map={add_favorite:{remote:{url:"/index.php/Favorites",method:"post",parameters:{action:"add"},onSuccess:Favorites.actionSuccess,onFailure:Favorites.actionFailure}},validate_create_account:{remote:{url:"/ajax/validateForm.php",method:"post",parameters:{},onSuccess:Favorites.validateCreateAccountSuccess,onFailure:Favorites.validateCreateAccountFailure}},validate_zip:{remote:{url:"/ajax/validateForm.php",method:"post",parameters:{},onSuccess:Favorites.validateZipSuccess,onFailure:Favorites.validateZipFailure}},validate_submit_quote:{remote:{url:"/ajax/validateForm.php",method:"post",parameters:{},onSuccess:Favorites.validateSubmitQuoteSuccess,onFailure:Favorites.validateSubmitQuoteFailure}},create_account:{remote:{url:"/index.php/Favorites",method:"post",parameters:{action:"create_useraccount"},onSuccess:Favorites.loginSuccess,onFailure:Favorites.actionFailure}},get_favorites:{remote:{url:"/index.php/Favorites",method:"post",parameters:{action:"get_favorites"},onSuccess:Favorites.actionSuccess,onFailure:Favorites.actionFailure}},logout:{remote:{url:"/index.php/Favorites",method:"post",parameters:{action:"logout"},onSuccess:Favorites.logoutSuccess,onFailure:Favorites.actionFailure}},"":{execute:Com.noop},show_login:{execute:Favorites.showLogin},show_list:{execute:Favorites.showList},submit_login:{remote:{url:"/index.php/Favorites",method:"post",parameters:{action:"login"},onSuccess:Favorites.loginSuccess,onFailure:Favorites.actionFailure}},remove_favorite:{remote:{url:"/index.php/Favorites",method:"post",parameters:{action:"remove"},onSuccess:Favorites.actionSuccess,onFailure:Favorites.actionFailure}},rank_favorites:{remote:{url:"/index.php/Favorites",method:"post",parameters:{action:"update_ranks"},onSuccess:Favorites.updateRankSuccess,onFailure:Favorites.actionFailure}},update_favorite_note:{remote:{url:"/index.php/Favorites",method:"post",parameters:{action:"update_note"},onSuccess:Favorites.updateNoteSuccess,onFailure:Favorites.updateNoteFailure}},update_zip:{remote:{url:"/index.php/Favorites",method:"post",parameters:{action:"update_zip"},onSuccess:Favorites.updateZipSuccess,onFailure:Favorites.actionFailure}}}};Favorites.initialize=function(a){Favorites.createActionMap();if(a===undefined){Favorites.getFavorites();return}Favorites.start(a)};Favorites.start=function(a){Favorites.data=Favorites.scrubData(a);Favorites.action_map[Favorites.getAction()].execute()};Favorites.addFavorite=function(f,b,c,e,d,a){Favorites.resetError();var g=Favorites.action_map.add_favorite.remote;g.parameters.year=f;g.parameters.make_name=b;g.parameters.model_name=c;g.parameters.bodystyle=e;g.parameters.style=d;g.parameters.origin=a;Favorites.ajaxRequest(g)};Favorites.createAccount=function(d,c,a){Favorites.resetError();var b=Favorites.action_map.create_account.remote;b.parameters.username=d;b.parameters.password1=c;b.parameters.password2=a;Favorites.ajaxRequest(b)};Favorites.getFavorites=function(){Favorites.resetError();var a=Favorites.action_map.get_favorites.remote;Favorites.ajaxRequest(a)};Favorites.login=function(c,a){Favorites.resetError();var b=Favorites.action_map.submit_login.remote;b.parameters.username=c;b.parameters.password=a;Favorites.ajaxRequest(b)};Favorites.logout=function(){Favorites.resetError();Favorites.ajaxRequest(Favorites.action_map.logout.remote);Favorites.render("hide")};Favorites.removeFavorite=function(e,d,a,c,b){Favorites.resetError();var f=Favorites.action_map.remove_favorite.remote;f.parameters.year=e;f.parameters.make_name=d;f.parameters.model_name=a;f.parameters.bodystyle=c;f.parameters.style=b;Favorites.ajaxRequest(f)};Favorites.rerankFavorites=function(a){Favorites.resetError();var b=Favorites.action_map.rank_favorites.remote;b.parameters.rank_map=Com.serializeJSON(a);Favorites.ajaxRequest(b)};Favorites.submitQuote=function(g,f,a,e,d,c){var h,b=Favorites.createIdentifier_fromParams(g,f,a,e,d);h=Com.$(b+"_submit_zip");h.value=c;Com.$(b+"_submit").submit()};Favorites.updateFavoriteNote=function(f,e,a,d,c,b){Favorites.resetError();var g=Favorites.action_map.update_favorite_note.remote;g.parameters.year=f;g.parameters.make_name=e;g.parameters.model_name=a;g.parameters.bodystyle=d;g.parameters.style=c;g.parameters.note=b;Favorites.ajaxRequest(g)};Favorites.updateUserZip=function(a){Favorites.resetError();var b=Favorites.action_map.update_zip.remote;b.parameters.zip=a;Favorites.ajaxRequest(b)};Favorites.validateCreateAccount=function(e,d,b){var c=Favorites.action_map.validate_create_account.remote,a={username:e,password1:d,password2:b};Favorites.resetError();Favorites.ajaxRequest_external(c,a)};Favorites.validateSubmitQuote=function(g,f,e,b,d,c){var h=Favorites.action_map.validate_submit_quote.remote,a={year:f,make_name:e,model_name:b,bodystyle:d,style:c,zipcode:g};h.parameters.fld_zipcode=g;Favorites.resetError();Favorites.ajaxRequest_external(h,a)};Favorites.attemptAddFavorite=function(f,b,c,e,d,a){if(!Favorites.isLoggedIn()&&Favorites.data&&Favorites.data.list&&Favorites.data.list.length>=1){Favorites.popupLogin()}Favorites.addFavorite(f,b,c,e,d,a);Favorites.render("create",[true])};Favorites.attemptCreateAccount=function(){var c=Com.$("fav.create_username").value,b=Com.$("fav.create_password").value,a=Com.$("fav.create_password2").value;Favorites.validateCreateAccount(c,b,a)};Favorites.validateAndSubmitZip=function(){var b=Favorites.getCarZipCode(),c=Favorites.action_map.validate_zip.remote,a;a={zipcode:b};c.parameters.fld_zipcode=b;Favorites.resetError();Favorites.ajaxRequest_external(c,a)};Favorites.validateZipFailure=function(a,b){alert("We apologize, but we are unable to update your ZIP code at this time.  Please try again in a few seconds.")};Favorites.validateZipSuccess=function(a,b){if(!a.zipcode){alert(Favorites.error_zip);return}Favorites.updateUserZip(b.zipcode)};Favorites.attemptLogin=function(){var b=Com.$("fav.username").value,a=Com.$("fav.password").value;Favorites.login(b,a)};Favorites.attemptRemoveFavorite=function(e,d,a,c,b){if(confirm("Are you sure you want to remove this car from your Favorites?")){Favorites.removeFavorite(e,d,a,c,b)}};Favorites.attemptSubmitQuote=function(f,e,a,d,c,b){b=Favorites.getCarZipCode();Favorites.validateSubmitQuote(b,f,e,a,d,c)};Favorites.replaceClassWith=function(e,d,c){var b,a,f=[];if(!e){return}if(!d){return}a=e.className.split(" ");for(b=0;b<a.length;b+=1){if(d===a[b]){if(c!==null){f.push(c)}}else{f.push(a[b])}}e.className=f.join(" ")};Favorites.getCarZipCode=function(){return Com.$("zipcode_field").value};Favorites.ajaxRequest=function(b){var a=new Com.Ajax();a.ok=Favorites.recordNewData(b.onSuccess,b.parameters);a.er=function(){b.onFailure(b)};a.ex({url:b.url,method:b.method,query:Favorites.paramsToQueryString(b.parameters)})};Favorites.paramsToQueryString=function(b){var c="action="+b.action,a;for(a in b){if(a!=="action"){c+="&";c+=a+"="+encodeURIComponent(b[a])}}return c};Favorites.ajaxRequest_external=function(c,a){var b=new Com.Ajax();b.ok=Favorites.externalAjaxResponder(c.onSuccess,a);b.er=function(){c.onFailure(c)};b.ex({url:c.url,method:c.method,query:Favorites.paramsToQueryString_external(c.parameters)})};Favorites.paramsToQueryString_external=function(b){var a,c="";for(a in b){if(b.hasOwnProperty(a)){c+=a+"="+encodeURIComponent(b[a]);c+="&"}}c=c.substr(0,(c.length-1));return c};Favorites.externalAjaxResponder=function(b,a){return function(f){try{var d=Com.evalJSON(f.responseText)}catch(c){}b(d,a)}};Favorites.recordNewData=function(b,a){return function(f){try{var d=Com.evalJSON(f.responseText);Favorites.data=Favorites.scrubData(d)}catch(c){Favorites.data=Favorites.generateErrorData()}b(a)}};Favorites.actionSuccess=function(){Favorites.action_map[Favorites.getAction()].execute();Favorites.showError()};Favorites.actionFailure=function(){Favorites.data=Favorites.generateErrorData();Favorites.showError()};Favorites.loginSuccess=function(){Favorites.action_map[Favorites.getAction()].execute();Favorites.showError();if(Favorites.login_popup&&Favorites.isLoggedIn()){Favorites.destroyLoginPopup();Favorites.render("create",[true])}};Favorites.logoutSuccess=function(){Favorites.action_map[Favorites.getAction()].execute();Favorites.data=undefined;Favorites.render("refresh")};Favorites.updateRankSuccess=function(){Favorites.render("refreshListRanks");if(Favorites.getAction()!=="show_list"){Favorites.action_map[Favorites.getAction()].execute()}Favorites.showError()};Favorites.updateNoteSuccess=function(a){if(Favorites.data!==undefined&&Favorites.data.parameters!==undefined&&Favorites.data.parameters.car_identity!==undefined){Favorites.HtmlPage.unfreezeNoteFieldFromParams(Favorites.data.parameters.car_identity)}if(Favorites.getAction()!=="show_list"){Favorites.action_map[Favorites.getAction()].execute()}Favorites.showError()};Favorites.updateZipSuccess=function(a){Com.$("zipcode_submit").disabled=true;if(Favorites.getAction()!=="show_list"){Favorites.action_map[Favorites.getAction()].execute()}Favorites.showError()};Favorites.updateNoteFailure=function(a){Favorites.actionFailure();Favorites.HtmlPage.unfreezeNoteFieldFromParams(a)};Favorites.validateCreateAccountFailure=function(a,b){alert("We apologize, but we are unable to create your account at this time.  Please try again in a few seconds.")};Favorites.validateCreateAccountSuccess=function(a,b){Favorites.createAccount(b.username,b.password1,b.password2)};Favorites.validateSubmitQuoteFailure=function(a,b){alert("We apologize, but we are unable to submit your quote at this time.  Please try again in a few seconds.")};Favorites.validateSubmitQuoteSuccess=function(a,b){if(!a.zipcode){alert(Favorites.error_zip);return}Favorites.submitQuote(b.year,b.make_name,b.model_name,b.bodystyle,b.style,b.zipcode)};Favorites.showLogin=function(){Favorites.render("showLogin")};Favorites.showList=function(){Favorites.render("refresh")};Favorites.showError=function(){if(Favorites.data.errors===undefined||Favorites.data.errors.length===0){return false}if(Favorites.login_popup){alert(Favorites.data.errors.join("\\n"));return true}Favorites.render("showError",[Favorites.data.errors]);return true};Favorites.gotoUrl=function(a){window.location.href="/"+a};Favorites.popupLogin=function(a){Favorites.render("hide");if(Com.$("fav.canvas")&&Com.$("fav.username")&&(!Favorites.data||!Favorites.data.list||Favorites.data.list.length===0)){}else{if(Favorites.login_popup){Favorites.login_popup.style.display="block";if(Favorites.login_iframe){Favorites.login_iframe.style.display="block"}}else{Favorites.login_popup=document.createElement("div");Favorites.login_popup.id="fav.login_popup";Favorites.login_popup.style.background="#fcfcfc";Favorites.login_popup.style.position="absolute";Favorites.login_popup.style.border="thin solid black";Favorites.login_popup.innerHTML=Favorites.generateLoginPopupHtml();Favorites.setLoginCoordinates(Favorites.login_popup);if(Com.isIE6()){Favorites.login_iframe=document.createElement("iframe");Favorites.login_iframe.id="fav.login_iframe";Favorites.login_iframe.style.position="absolute";Favorites.login_iframe.style.width="958px";Favorites.login_iframe.style.height="500px";Favorites.setLoginCoordinates(Favorites.login_iframe);document.body.appendChild(Favorites.login_iframe)}document.body.appendChild(Favorites.login_popup)}}if(a==="create"){Com.$("fav.create_username").focus()}if(a==="login"){Com.$("fav.username").focus()}};Favorites.setLoginCoordinates=function(a){var b=Favorites.findPos(Com.$("container_tablehdr"));a.style.left=b[0]+"px";a.style.top="65px"};Favorites.generateLoginPopupHtml=function(){return'<table border=1 cellspacing=10 width=958><tr><td><table cellpadding="10" cellspacing="10">  <tr>    <td align="center">      <font style="text-decoration: none; color:#0066cc; font-weight:bold; font-size:18pt;                  font-family:verdana,arial,helvetica,sans-serif;                  letter-spacing:0px;">        Welcome to Favorites      </font>      <br /><br />      <font style="text-decoration: none; color:#black; font-weight:bold; font-size:10pt;                  font-family:verdana,arial,helvetica,sans-serif;                  letter-spacing:0px;">      Please log in or create an account to save your Favorites!      </font>    </td>  </tr>  <tr>    <td align="center">'+Favorites.generateLoginHtml()+'    </td>  </tr>  <tr>    <td align="right">      <a style="font-family:verdana,arial,helvetica,sans-serif; letter-spacing:0px;                color: red; cursor: pointer; font-weight:bold; font-size:11pt"         onmouseover="style.color=\'#666666\';"         onmouseout="style.color=\'red\';"         onclick="Favorites.cancelLogin()">Close</a>    </td>  </tr></table></td></tr></table>'};Favorites.generateLoginHtml=function(){var a='<center><table border=0 width=100%>  <tr>  <td align="center" colspan="2">    <div id="'+Favorites.login_fav_error_id+'" class="FAV_Error">&nbsp</div>  </td>  </tr><tr><td><img src="/images/favorites/fav_login_reasons.png" /></td><td><table border=0 cellspacing="10"><tbody><tr>  <td valign="top">  <form name="login_form" onsubmit="Favorites.attemptLogin(); return false;">  <table border=0 cellspacing=1 bgcolor="white">  <tr>    <td valign="top" height=100%>  <table cellspacing=8 border=0>  <tr>    <td colspan="2"><h1 style="color:#0066cc;">Already have an account?</h1><p><h3 style="color:#6f4500">Please sign in to view your Favorites    </h3><p></td>  </tr>  <tr>    <td align="right">      Username:</td><td> <input id="fav.username" type="text" />    </td>  </tr>  <tr>    <td align="right">      Password:</td><td> <input id="fav.password" type="password" />    </td>  </tr>  <tr>    <td align="right">      </td><td><input id="fav.submit_login" type="image" src="/images/favorites/fav_btn_login.gif" alt="Submit button" />    </td>  </tr>  </table>  </td>  </tr>  </table>  </form>  </td>  <td> &nbsp;  </td><td width=1 bgcolor="gray"></td>  <td valign="top" height="100%">  <form onsubmit="Favorites.attemptCreateAccount(); return false;">  <table border=0 cellspacing=1 bgcolor=white>  <tr>    <td>  <table cellspacing=8>  <tr>    <td colspan="2"><h1 style="color:#0066cc;">Is this your first time here?</h1><p><h3 style="color:#6f4500">      Please create a Favorites account    </h3><p></td>  </tr>  <tr>    <td align="right">      Username:</td><td> <input id="fav.create_username" type="text" autocomplete="off"/>    </td>  </tr>  <tr>    <td align="right">      Password:</td><td><input id="fav.create_password" type="password" />    </td>  </tr>  <tr>    <td align="right">      Verify Password:</td><td><input id="fav.create_password2" type="password" />    </td>  </tr>  <tr>    <td align="right">      </td><td><input id="fav.create_account"  type="image" src="/images/favorites/fav_btn_signup.gif" alt="Submit button" />    </td>  </tr>  </table>  </td>  </tr>  </table>  </form></td></tr></tbody></table></td></tr></table></center>';return a};Favorites.cancelLogin=function(){Favorites.favorite_queue=[];Favorites.destroyLoginPopup()};Favorites.destroyLoginPopup=function(){if(Favorites.login_popup){Favorites.login_popup.style.display="none";if(Favorites.login_iframe){Favorites.login_iframe.style.display="none"}}};Favorites.findPos=function(b){var c=0,a=0;if(b.offsetParent){do{c+=b.offsetLeft;a+=b.offsetTop;b=b.offsetParent}while(b);return[c,a]}return[0,0]};Favorites.formatCarPrice=function(a){if(a.available===false||a.msrp.length===0){return"Not Available"}if(a.msrp.length===1||(a.msrp.length>1&&a.msrp[0]===a.msrp[1])){return Favorites.formatCurrency(a.msrp[0])}return Favorites.formatCurrency(a.msrp[0])+" - "+Favorites.formatCurrency(a.msrp[1])};Favorites.formatCarInvoice=function(a){if(a.available===false||a.invoice.length===0){return"Not Available"}if(a.invoice.length===1||(a.invoice.length>1&&a.invoice[0]===a.invoice[1])){if(0===parseInt(a.invoice[0],10)){return"Not Available"}else{return Favorites.formatCurrency(a.invoice[0])}}return Favorites.formatCurrency(a.invoice[0])+" - "+Favorites.formatCurrency(a.invoice[1])};Favorites.formatCarArray=function(e,d){var a,c,b=[];if(undefined===d){d=Favorites.formatNumberEx}for(a in e){if(e.hasOwnProperty(a)){c=d(e[a]);if(c){b[a]=c}}}if(b.length===0){b.push("Not available")}return b};Favorites.formatCurrency=function(a){if(a===undefined||a===0){return"Not available"}a=parseInt(a,10).toString();if(isNaN(a)){return"Not Available"}for(var b=0;b<Math.floor((a.length-(1+b))/3);b+=1){a=a.substring(0,a.length-(4*b+3))+","+a.substring(a.length-(4*b+3))}if(0===a){return"Not available"}return"$"+a};Favorites.formatNumber=function(a){if(a===undefined||a===0){return"0"}a=parseInt(a,10).toString();if(isNaN(a)){return"Not Available"}return a};Favorites.formatStyle=function(h,b){if(h===""&&b===""){return""}var e,a,g=[],f=b.toLowerCase(),d=[],j={sedan:[],"coupe/hatchback":["coupe","hatchback"],convertible:[],wagon:[],suv:["sport+utility","sport+activity"],"minivan/van":["van","wagon","minivan"],truck:[]},c=["sport utility","sport activity"];for(e=0;e<c.length;e+=1){f=f.replace(c[e],c[e].replace(" ","+"))}d=f.split(" ");g=j[h.toLowerCase()];g=(g===undefined)?[]:g;g.unshift(h.toLowerCase());if(Favorites.doArraysIntersect(d,g)){return b}return b+" "+h};Favorites.doArraysIntersect=function(b,a){var c,d={};for(c=0;c<b.length;c+=1){d[b[c]]=1}for(c=0;c<a.length;c+=1){if(d[a[c]]!==undefined){return true}}return false};Favorites.formatNumberEx=function(a){if(a===undefined||a===0){return null}a=parseInt(a,10).toString();if(isNaN(a)){return null}return a};Favorites.formatCarNote=function(a){var b=a.note;if(b===null||(b.length!==undefined&&0===Com.trim(b).length)){b="Write a note..."}return b};Favorites.carIdentifier=function(a){return Favorites.createIdentifier_fromParams(a.year,a.make_name,a.model_name,a.bodystyle,a.style)};Favorites.createIdentifier_fromParams=function(e,d,a,c,b){var f=""+e+";"+d+";"+a+";"+c+";"+b;f=f.replace(/ /g,"_");return f};Favorites.legacyUrl=function(a){return""+a.urlified_values.make_name+"/"+a.urlified_values.model_name+"/"+a.urlified_values.year+"/index.html"};Favorites.carChooserUrl=function(a){return""+a.urlified_values.year+"/"+a.urlified_values.make_name+"/"+a.urlified_values.model_name+"/"+a.urlified_values.bodystyle};Favorites.resetError=function(){Favorites.render("resetError")};Favorites.scrubData=function(a){if(a.action===undefined){return Favorites.generateErrorData()}return a};Favorites.generateErrorData=function(){return{action:"show_list",errors:["We apologize for the inconvenience.  We have encountered an internal error and cannot access your Favorites."]}};Favorites.getAction=function(){return Favorites.data.action};Favorites.getUserZipCode=function(){if(Favorites.data.zip_code!==undefined&&Favorites.data.zip_code!==null){return Favorites.data.zip_code}return""};Favorites.isLoggedIn=function(){return(Favorites.data!==undefined&&Favorites.data.list!==undefined&&Favorites.data.username!=="")};Favorites.addRenderer=function(a){Favorites.renderers.push(a)};Favorites.render=function(a,b){var c,d;b=(b===undefined)?[]:b;for(c=0;c<Favorites.renderers.length;c+=1){d=Favorites.renderers[c];if(d.EXPORT[a]!==undefined){d[a].apply(this,b)}}};Favorites.getList=function(){if(Favorites.isLoggedIn()){return Favorites.data.list}if(Favorites.data&&Favorites.data.list){return Favorites.data.list}return[]};