var Favorites={};Favorites.data={};Favorites.Facebook={};Favorites.favorite_queue=[];Favorites.renderers=[];Favorites.error_zip="Please enter a valid U.S. ZIP Code";Favorites.login_fav_error_id="fav.error";Favorites.note_field_default="Write a note...";Favorites.inited_with_data=false;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},show_guest_list:{execute:Favorites.showGuestList,func_params:Favorites.getLists},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){if(!Favorites.isLoggedInWithFacebook()){Favorites.getFavorites()}return}Favorites.inited_with_data=true;Favorites.start(a)};Favorites.start=function(b){Favorites.data=Favorites.scrubData(b);var a=Favorites.action_map[Favorites.getAction()];if(undefined!==a.func_params){a.execute(a.func_params())}else{a.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){var d;try{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(){if(undefined!==Favorites.action_map&&undefined!==Favorites.action_map[Favorites.getAction()]){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={};Favorites.inited_with_data=false;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");if(Favorites.onFavPage===true){stButtons.makeButtons()}};Favorites.showGuestList=function(a){Favorites.render("refreshGuestView",a)};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.className="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)}}Account.Facebook.parseXFBML("xfbml_login_button");if(a==="create"){Com.$("fav.create_username").focus()}if(a==="login"){Com.$("fav.username").focus()}};Favorites.setLoginCoordinates=function(a){};Favorites.generateLoginPopupHtml=function(){return'<table 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(){return'         <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>           </table>         </center>         <div class="FAV_mainColumnLeft">           <div class="FAV_usingBox_top"></div>           <div class="FAV_usingBox_mid">             <h2>Using Favorites is easy and it\'s FREE!</h2>             <ul>               <li>Save specific models you discover and like on NewCars.com.</li>               <li class="FAV_usingItem_2">Write yourself a note about each of your Favorites.</li>               <li class="FAV_usingItem_3">Create a personalized and printable list of your Favorites to assist you in your new car buying experience.</li>               <li class="FAV_usingItem_4">Share your list with your Facebook friends and get their opinions on your choices!</li>             </ul>             <h3>Start building your <strong>Favorites</strong> today!</h3>           </div>           <div class="FAV_usingBox_bottom"></div>         </div>         <div class="FAV_mainColumnRight">           <div class="FAV_mainFB">             <div class="FAV_mainFB_top"></div>             <div class="FAV_mainFB_mid">               <h1>Already Have a Facebook Account?</h1>               <div class="FAV_mainFB_arrow" title="This way to Facebook Login"></div>               <div class="FAV_mainFB_login_box">                 <div id="fb-root"></div>                 <span id="xfbml_login_button">'+Favorites.Facebook.login_button+'</span>               </div>             </div>             <div class="FAV_mainFB_bottom"></div>           </div>         <form name="login_form" onsubmit="Favorites.attemptLogin(); return false;">           <div class="FAV_mainLogin">             <h3>Sign in if you already have a newcars.com account!</h3>             <fieldset>               <label for="fav.username">Username:</label>               <input type="text" id="fav.username" />             </fieldset>             <fieldset>               <label for="fav.password">Password:</label>               <input type="password" id="fav.password" />             </fieldset>             <input type="image" alt="Login Button" title="Click to Login" src="http://images.newcars.com/images/btn-login.png" id="fav.submit_login" />           </div>        </form>         <form onsubmit="Favorites.attemptCreateAccount(); return false;">           <div class="FAV_mainSignup">             <h3>Don\'t have a Facebook account, no<br />problem, sign up for a newcars.com<br />account here!</h3>             <fieldset>               <label for="fav.create_username">Username:</label>               <input type="text" autocomplete="off" id="fav.create_username" />             </fieldset>             <fieldset>               <label for="fav.create_password">Password:</label>               <input type="password" id="fav.create_password" />             </fieldset>             <fieldset>               <label for="fav.create_password2">Verify Password:</label>               <input type="password" id="fav.create_password2" />             </fieldset>             <input type="image" alt="Sign Up Button" title="Click to Sign Up" src="http://images.newcars.com/images/btn-sign-up.png" id="fav.create_account" />           </div>         </form>         </div>'};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.formatMPGArrays=function(d){var b,a,c=[];if(d instanceof Array){b=Math.max.apply(Math,d);a=Math.min.apply(Math,d);if(b>a){c=[a,b]}else{c=[a]}}return c};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,c){var b=a.note;if(undefined===c){c=Favorites.note_field_default}if(b===null||b===Favorites.note_field_default||(b.length!==undefined&&0===Com.trim(b).length)){b=c}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};Favorites.carChooserUrl=function(a){var b="/"+a.urlified_values.year+"/"+a.urlified_values.make_name+"/"+a.urlified_values.model_name;if(undefined!==a.urlified_values.bodystyle&&a.urlified_values.bodystyle!==""){b=b+"/"+a.urlified_values.bodystyle}return b};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.isLoggedInWithFacebook=function(){var c,a,e,d=document.cookie.split(";"),b="fbsr_"+Favorites.Facebook.application_id;for(c=0;c<d.length;c+=1){a=d[c].substr(0,d[c].indexOf("="));e=d[c].substr(d[c].indexOf("=")+1);a=a.replace(/^\s+|\s+$/g,"");if(a===b){return true}}return false};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.getLists=function(){var a={fav_list:Favorites.getList(),dd_list:Favorites.getDropdownList()};return new Array(a)};Favorites.getList=function(){if(undefined!==Favorites.data&&undefined!==Favorites.data.list){return Favorites.data.list}return[]};Favorites.getDropdownList=function(){if(undefined!==Favorites.data){if(undefined!==Favorites.data.users_list){return Favorites.data.users_list}return Favorites.data.list}return[]};
