
var Fl_CompareModel=new Class({compared:[],initialize:function(){this.cookieOptions=cookieOptions;this.loadCompared();},loadCompared:function(){Cookie.read('cf-compare')?this.compared=JSON.decode(Cookie.read('cf-compare')):'';},storeCompared:function(){this.countProducts()?cookieContent=JSON.encode(this.compared):cookieContent='';Cookie.write('cf-compare',cookieContent,this.cookieOptions);},removeProduct:function(productId){var product=productId;this.compared.filter(function(x){x&&x.productId==product?this.compared.erase(x):'';});this.storeCompared();return false;},addProduct:function(product){this.compared.push({productId:product['productId'],clientName:product['clientName'],clientSlug:product['clientSlug'],productSlug:product['productSlug'],customFolder:product['customFolder'],searchZip:product['searchZip']});this.storeCompared();},getProducts:function(){if(this.compared.length>=1){return this.compared;}
return false;},countProducts:function(){return this.compared.length;},getCoremetricsString:function(){var cmStr=Cookie.read('cf-zipcode')+"-_-";this.compared.each(function(cmItem,i){cmStr+=(i?"|":"")+cmItem.clientName.replace(/\+/gi,' ');});return cmStr;}});var Fl_CompareController=new Class({initialize:function(){this.comparePop=new Fl_Lightbox(new Element('a'),'<img src="/media/images/loader.gif" alt="Loading..." />',{'w':650,'h':400,onClose:function(lightbox){lightbox.innerHTML='<img src="/media/images/loader.gif" alt="Loading..." />';}});$('enabled-compare').addEvent('click',function(){this.displayCompare();}.bind(this));this.compareModel=new Fl_CompareModel();this.compareSidebar=$('compareSidebar');this.compareSidebar.getElements('.remove-compare-button').each(function(item,i){item.addEvent('click',function(){var onPageItem=null;if(onPageItem=$(item.getParent('li').getElement('input').get('value'))){onPageItem.getElement('div.compare input').set('checked','');this.compareModel.removeProduct(onPageItem.getElement('div.compare input').get('value'));this.updateCompare();}else{this.compareModel.removeProduct(item.getParent('li').getElement('input').get('value'));this.updateCompare();}
return false;}.bind(this));},this);},addCompareItem:function(compareItem){product=products.filter(function(x){if(x.productId==compareItem.get('value'))return x;})[0];this.compareModel.addProduct(product);this.updateCompare();},removeCompareItem:function(compareItem){this.compareModel.removeProduct(compareItem.get('value'));this.updateCompare();},updateCompare:function(initialization){var checked=compareForm.getElements('input[type=checkbox]:checked');var numChecked=this.compareModel.countProducts();compareForm.getElements('.compare input[type=checkbox]').each(function(input){if(numChecked>=3){if(input.getProperty('checked')===true){input.setProperty('disabled',false);}
else{input.setProperty('disabled',true);}}
else{input.setProperty('disabled',false);}}.bind(this));var compareBoxes=this.compareSidebar.getElements('.content ul li');compareBoxes.each(function(item){item.removeClass('on');item.getChildren('.compareDiv').each(function(i){i.destroy();});});this.createCompareDivs();$('disabled-compare').hide();$('enabled-compare').hide();if(numChecked==2||numChecked==3){$('enabled-compare').show();}
else{$('disabled-compare').show();}
if(numChecked>=3&&!initialization){this.displayCompare();}
return true;},displayCompare:function(){var numChecked=this.compareModel.countProducts();if(numChecked==2||numChecked==3){var params={};params.Fl_popup=true;if($('balanceInput').value>0){params.avgBalance=$('balanceInput').value;}
this.comparePop.open();var request=new Request.HTML({'url':compareForm.getProperty('action'),onSuccess:function(tree,elems,htm,js){this.comparePop.lightbox.innerHTML=htm;this.prepareSaverCompare();if(typeof cmCreateElementTag!='undefined'){cmCreateElementTag("CF:TOOLS:COMPARE","CF:TOOLS",this.compareModel.getCoremetricsString());}}.bind(this)}).post(params);}
else{alert('Please select 2 or 3 products to compare.');}},prepareSaverCompare:function(){var saverTrigger=$('saverTrigger');if(saverTrigger){saverTrigger.addEvent('click',function(){saverTrigger.getParent('table').toggleClass('saverActive');if(saverTrigger.get('text')=='Show'){saverTrigger.set('text','Hide');}
else{saverTrigger.set('text','Show');}
return false;});}
var explanationTrigger=$('explanationTrigger');if(explanationTrigger){var explanation=$$('.explanation')[0];explanationTrigger.toggleClass('hide');explanationTrigger.getParent('tr').toggleClass('explanationActive');explanation.getParent('tr').toggleClass('explanationRow');explanationTrigger.addEvent('click',function(){explanationTrigger.getParent('tr').toggleClass('explanationActive');explanation.getParent('tr').toggleClass('explanationRow');if(explanationTrigger.get('text')=='Show Explanation'){explanationTrigger.set('text','Hide Explanation');}
else{explanationTrigger.set('text','Show Explanation');}
return false;});}
$$('#comparePopup a.closeButton')[0].addEvent('click',function(){this.comparePop.close();}.bind(this));},createCompareDivs:function(){var compareBoxes=$('compareSidebar').getElements('.content ul li');if((compared=this.compareModel.getProducts()))compared.each(function(comparedProduct,i){var compareDiv=new Element('div',{'class':'compareDiv'});var detailsLink=new Element('a',{href:'/details/'+comparedProduct.clientSlug+'/'+comparedProduct.productSlug+'?zipcode='+Cookie.read('cf-zipcode')});var fiLogo=new Element('img',{src:'/media/fi/'+comparedProduct.customFolder+'/cf_logo.gif','class':"fiLogo",alt:comparedProduct.clientName});hiddenInputValue=comparedProduct.productId;products.filter(function(x,index){if(x.productId==comparedProduct.productId)hiddenInputValue='searchResult'+(index+1);});var hiddenInput=new Element('input',{type:'hidden',value:hiddenInputValue});compareDiv.adopt(detailsLink.adopt(fiLogo));compareBoxes[i].adopt(compareDiv.adopt(hiddenInput));compareBoxes[i].addClass('on');});}});var Fl_PageController=new Class({initialize:function(){this.searchResultElements=$$('#compareForm li.result');this.searchResultsElement=$('searchResults');this.compare=new Fl_CompareController();this.compareModel=JSON.decode(Cookie.read('cf-compare'));if(Cookie.read('cf-showQuals')=='true'){this.searchResultsElement.addClass('qualsOn');}
else{this.searchResultsElement.removeClass('qualsOn');}
this.searchResultElements.each(function(resultElement){var helpLinkElement=resultElement.getElement('.helpLink');helpLinkElement.addEvent('click',function(){this.closeHelp();$$('.resultsNavTools').setStyle("z-index","20");resultElement.addClass('helpOn');return false;}.bind(this));resultElement.getElement('.hideQuals').addEvent('click',function(){this.searchResultsElement.removeClass('qualsOn');Cookie.write('cf-showQuals',false,cookieOptions);return false;}.bind(this));resultElement.getElement('.qualLink').addEvent('click',function(){this.searchResultsElement.addClass('qualsOn');helpLinkElement.fireEvent('click');Cookie.write('cf-showQuals',true,cookieOptions);return false;}.bind(this));resultElement.getElement('.close').addEvent('click',function(){this.closeHelp();}.bind(this));var saverAvailableButton=resultElement.getElement('.saverAvailable');if(saverAvailableButton){saverAvailableButton.addEvent('click',function(evt){var e=new Event(evt);e.stop();resultElement.toggleClass('saverActive');return false;});}
var compareCheckbox=resultElement.getElement('.compare input[type=checkbox]');compareCheckbox.addEvent('click',function(e){e.target.get('checked')?this.compare.addCompareItem(e.target):this.compare.removeCompareItem(e.target);}.bind(this));resultElement.cfProductId=compareCheckbox.get('value');resultElement.cfProduct=products.filter(function(x){return x.productId==resultElement.cfProductId;})[0];if(this.compareModel)this.compareModel.filter(function(x){if(x.productId==resultElement.cfProductId)compareCheckbox.set('checked',true);});resultElement.getElements('.compareResultsLink').each(function(item){item.addEvent('click',function(){this.compare.displayCompare();}.bind(this));}.bind(this));},this);this.compare.updateCompare(true);},calculatedReturn:function(avgBalance,product){if(!product){throw"Invalid product!";}
avgBalance=Math.max(avgBalance,0);var estimatedAnnualInterest=0;if((product.bonusCap>0&&avgBalance<=product.bonusCap)||product.bonusCap==0){estimatedAnnualInterest=avgBalance*product.bonusAPY/100;}
else if((product.secondTierCap>0&&avgBalance>product.bonusCap&&avgBalance<=product.secondTierCap)||(product.secondTierCap==0&&avgBalance>product.bonusCap)){estimatedAnnualInterest=product.bonusCap*product.bonusAPY/100+(avgBalance-product.bonusCap)*product.secondTierAPY/100;}
else{estimatedAnnualInterest=0;}
return Math.round(estimatedAnnualInterest);},updateCalculatedResults:function(balance){if(balance>0){this.searchResultsElement.addClass('calculatorOn');this.searchResultsElement.getChildren('li.result').each(function(item){var product=item.cfProduct;if(product){var returnAmount=this.calculatedReturn(balance,product);item.getElement('.estimatedReturn strong').set({'styles':{'background-color':'#FF0'},'tween':{duration:'long'},'text':'$'+addCommas(returnAmount)});item.getElement('.estimatedReturn strong').tween('background-color','#FFF');product.estimatedReturn=returnAmount;}
else{throw"Missing product ID for "+item.getProperty('id');}},this);}
else{this.searchResultsElement.removeClass('calculatorOn');}},closeHelp:function(){this.searchResultElements.removeClass('helpOn');$$('.resultsNavTools').setStyle("z-index","30");return false;}});var Fl_CalculatorController=new Class({initialize:function(){this.balanceInput=$('balanceInput');this.balanceEditLink=$('balanceEditLink');this.balanceLink=$('balanceLink');this.balanceScale=$('balanceScale');this.balanceSlider=$('balanceSlider');this.calculatorForm=$('calculatorForm');this.avgBalanceSlider=new Slider(this.balanceScale,this.balanceSlider,{range:[0,100000],wheel:true,snap:true,steps:1000,onChange:function(val){$('balanceLink').set('text',addCommas(val));this.balanceInput.setProperty('value',addCommas(val));this.checkSliderClearButton();}.bind(this),onComplete:function(step){if(!isFirstBalanceSliderLoad){this.updateEstimatedReturn();}
isFirstBalanceSliderLoad=false;}.bind(this)});this.restoreSavedState();$('calculatorHelpLink').addEvent('click',function(){$$('.sideBar').setStyle('z-index','30');$('calculatorHelpSection').addClass('helpOn');return false;}.bind(this));$('calculatorHelpClose').addEvent('click',function(){$('calculatorHelpSection').removeClass('helpOn');$$('.sideBar').setStyle('z-index','10');return false;}.bind(this));$('enabled-clear-button').addEvent('click',function(){this.avgBalanceSlider.set(0);$('searchResults').removeClass('calculatorOn');return false;}.bind(this));this.balanceEditLink.addEvent('click',function(){this.balanceInput.setProperty('value',addCommas(this.balanceInput.getProperty('value')));this.balanceLink.setStyle('display','none');this.balanceEditLink.getParent('fieldset').addClass('calculatorInputActive');return false;}.bind(this));this.calculatorForm.addEvent('submit',function(){this.calculatorForm.getElements('fieldset').each(function(item){item.removeClass('calculatorInputActive');});this.avgBalanceSlider.set(removeCommas(this.balanceInput.value));this.balanceLink.setStyle('display','inline');return false;}.bind(this));},checkSliderClearButton:function(){if(removeCommas($('balanceInput').getProperty('value'))>0){$('disabled-clear-button').hide();$('enabled-clear-button').show();}
else{$('disabled-clear-button').show();$('enabled-clear-button').hide();}},getAvgBalanceBucket:function(avgBalance){switch(true){case avgBalance<1000:return"0 - 999";case avgBalance<5000:return"1,000 - 4,999";case avgBalance<10000:return"5,000 - 9,999";case avgBalance<20000:return"10,000 - 19,999";case avgBalance<30000:return"20,000 - 29,999";case avgBalance<50000:return"30,000 - 49,999";case avgBalance<100000:return"50,000 - 99,999";default:return"100,000+";}},restoreSavedState:function(){isFirstBalanceSliderLoad=true;this.cfAvgBalanceCookie=Cookie.read('cf-avgBalance');this.avgBalanceSlider.set(this.cfAvgBalanceCookie);},updateEstimatedReturn:function(){var balance=removeCommas($('balanceInput').value);Cookie.write('cf-avgBalance',balance,cookieOptions);Page.updateCalculatedResults(balance);}});
