var calc;var Calculator=Class.create();Calculator.prototype={map:null,initialize:function(opt){Object.extend(this,opt||{});var centerPointJSON=null;var calculation=null;var mapzoomlevel=19;if(calculation){if(calculation.zoomlevel){mapzoomlevel=calculation.zoomlevel}}this.map=new RoofRayMap("map",(centerPointJSON?eval("("+centerPointJSON+")"):null),{tilt:24,solarToDC:solarToDC,name_field:$("name-field"),tiltField:this.tilt,polygonList:$("polygon-list"),zoomLevel:mapzoomlevel});this.map.dom.observe("r:newpolygon",this.newPolygon.bind(this));this.map.dom.observe("r:dragend",function(e){var cp=this.map.map.getCenter();var coord="["+cp.lat()+","+cp.lng()+"]";Cookie.set("center",coord);if(e.memo>100||!e.memo){this.updateLocalData()}}.bind(this));try{initMap(this.map)}catch(e){if(!(typeof console=="undefined")){console.log(e)}}this.tiltSlider=new Slider($("tilt_slider"),0,60,300,this.tilt,(calculation?calculation.tilt:this.map.tilt),{onChange:function(tilt){this.map.tilt=tilt;this.map.dom.fire("r:change")}.bind(this)});$("remove-point").observe("click",this.map.removePoint.bind(this.map));if(calculation){this.map.loadCalculation(calculation);if(calculation.tilt){this.tiltSlider.set(calculation.tilt)}}this.map.dom.observe("r:change",function(e){Cookie.set("calculation",this.map.json());var tilt=this.tilt.getValue();for(var i=0;i<this.map.polygons.length;i++){var p=this.map.polygons[i];if(!p){break}var watts=p.watts(tilt);var squareFeet=p.area(tilt)/0.0929;var wpsf=watts/squareFeet;p.areaNode.innerHTML=parseInt(squareFeet)+" Sq. Ft";var orientation=p.getOrientation();if(orientation){p.orientation.innerHTML=round(orientation)+"&deg; "+p.compassLetter(orientation)}else{p.orientation.innerHTML="?"}var oPot=(180-Math.abs(orientation-180))/180;if(isNaN(oPot)){oPot=1}var centerPoint=this.map.polygons[i].centerPoint();if(centerPoint){var tPot=(90-Math.abs(parseFloat(tilt)-centerPoint.lat()))/90;var potential=((oPot+tPot)/2);p.wattsNode.innerHTML=round(watts*potential)+" Watts DC";p.potentialNode.innerHTML=parseInt(potential*100)+"%";p.powerPerNode.innerHTML=(isNaN(wpsf)?0:round(wpsf*potential))+" Watts DC"}}this.loadArrayGraph();if(this.map.activePolygon){}else{}}.bind(this));$("new-calculation-link").observe("click",function(){calc.map.clearPolygons();$("polygon-list").innerHTML=""});$("save-link").observe("click",function(){if(!this.map.polygons.length>0){alert("Please draw a solar array first");return }if($("save-link").hasClassName("save-in-progress")){alert("save is in progress...");return }var updateParams={json:this.map.json(),authenticity_token:authenticityToken,zoomlevel:this.map.map.getZoom(),name:$F("q_address")+" "+$F("q_city_state"),avg_bill:$F("avg_bill"),bill_change:$F("bill_change")};if(this.map.id){updateParams.id=this.map.id}if($("prop-details").visible()){updateParams.sq_feet=$("square_feet").innerHTML;updateParams.beds=$("bed_rooms").innerHTML;updateParams.baths=$("bath_rooms").innerHTML;updateParams.prop_value=$F("prop_value");updateParams.pool=($F("pool")=="1")?"1":"0";updateParams.yr_built=$("year_built").innerHTML}new Ajax.Request("/mass_modeling/save",{method:"post",parameters:updateParams,onLoading:function(){$("save-link").addClassName("save-in-progress")},onComplete:function(){$("save-link").removeClassName("save-in-progress")},onFailure:function(){},onSuccess:function(t){var id=parseInt(t.responseText);if(id){var div=Builder.node("div",{className:"notice"},"RoofRay Massmodel Saved!");$("main").insert({top:div});window.setTimeout(function(){Effect.Fade(div,{duration:3})},1000);calc.map.id=id}else{alert("No data was returned from the server. The save operation may not have completed successfully.")}}})}.bind(this));$("shout-link").observe("click",function(){this.send_friend()}.bind(this));$("shout_link").observe("click",function(){this.send_friend()}.bind(this));$("local-search").observe("click",function(){var updateParams={json:this.map.json(),authenticity_token:authenticityToken,zoomlevel:this.map.map.getZoom(),q_address:$F("q_address"),q_city_state:$F("q_city_state")};if(this.map.id){updateParams.id=this.map.id}new Ajax.Request("/mass_modeling/local_search",{parameters:updateParams,onFailure:function(){return },onSuccess:function(t){Element.update("polygon-list","");Element.update("calculation-graph","")}})}.bind(this));this.updateLocalData()},send_friend:function(){if(!this.map.polygons.length>0){alert("Please draw a solar array first");return }var A={json:this.map.json(),authenticity_token:authenticityToken,zoomlevel:this.map.map.getZoom(),name:$F("q_address")+" "+$F("q_city_state"),avg_bill:$F("avg_bill"),bill_change:$F("bill_change")};if(this.map.id){A.id=this.map.id}if($("prop-details").visible()){A.sq_feet=$("square_feet").innerHTML;A.beds=$("bed_rooms").innerHTML;A.baths=$("bath_rooms").innerHTML;A.prop_value=$F("prop_value");A.pool=($F("pool")=="1")?"1":"0";A.yr_built=$("year_built").innerHTML}new Ajax.Request("/mass_modeling/save",{method:"post",parameters:A,onComplete:function(){},onFailure:function(){},onSuccess:function(B){var C=parseInt(B.responseText);if(C){calc.map.id=C;Modalbox.show("/sharemodel.html",{title:"Send this model to a friend",width:600});return false}else{alert("No data was returned from the server. The save operation may not have completed successfully.")}}})},expireReports:function(){this.savings.expire();this.analysis.expire()},updatePowerRates:function(E){var F=E.options[E.selectedIndex];var A=F.power_rates;var C={"current-power-rate":"defaultStandardRate","solar-power-rate":"defaultSolarRate"};for(var D in C){var G=$(D);G.innerHTML="";if(A){for(var H=0;H<A.length;H++){var B=Builder.node("option",{value:A[H].name},A[H].name);G.appendChild(B)}G.setValue(F[C[D]]);if(G.cookieName){Cookie.set(G.cookieName,G.value)}}}},updateCustomRate:function(B){var A=this.calcCustomRate();if(A){this.customRateString.innerHTML="$"+A.toFixed(3)+" per kWh"}},calcCustomRate:function(){var B=parseFloat(this.customRateCost.getValue());var A=parseFloat(this.customRateUsed.getValue());if(B&&A){return B/A}},customRate:function(){if(this.averageRateSelector.checked){return this.averageStateRate.getValue()}else{if(this.customRateSelector.checked){return this.calcCustomRate()}}},mergeRateParams:function(A){A.zip_code=this.zipCode.getValue();A.average_electric_bill=this.averageBill.getValue();if(this.selectRateBlock.visible()){A.current_power_rate=this.currentPowerRateField.getValue();A.solar_power_rate=this.solarPowerRateField.getValue();A.power_company_id=this.powerCompanyField.getValue()}else{if(Cookie.get("selectRate")=="true"){A.current_power_rate=Cookie.get("currentPowerRateField");A.solar_power_rate=Cookie.get("solarPowerRateField");A.power_company_id=Cookie.get("powerCompanyField")}else{A.custom_rate=this.customRate()}}},updateLocalData:function(url){var pci=this.powerCompanyField;var qpci=this.quotePowerCompanyField;qpci.innerHTML="";pci.innerHTML="";var center=this.map.map.getCenter();new Ajax.Request(this.findLocalDataURL,{parameters:{latitude:center.lat(),longitude:center.lng(),authenticity_token:authenticityToken},onSuccess:function(t){var data=eval("("+t.responseText+")");this.zipCode.setValue(data.digits);this.noRebate=!data.rebate;removeChildrenFromNode(pci);if(data.power_companies){for(var i=0;i<data.power_companies.length;i++){var pc=data.power_companies[i];if(pc.power_rates.length){var pco=Builder.node("option",{value:pc.id},pc.name);pco.power_rates=pc.power_rates;pco.defaultSolarRate=pc.default_solar_rate;pco.defaultStandardRate=pc.default_standard_rate;pci.appendChild(pco)}var qpco=Builder.node("option",{value:pc.id},pc.name);qpci.appendChild(qpco)}}var other=Builder.node("option",{value:""},"Other/None");qpci.appendChild(other);if(pci.options.length>0){Cookie.set("selectRate","true");this.rateInfoString.innerHTML="Utility Rates Found for this Location - Click Next to Continue";this.averageRateBlock.hide();this.enterRateBlock.hide();this.selectRateBlock.show();pci.setValue(pci.options[0].value);qpci.setValue(qpci.options[0].value);if(pci.cookieName){Cookie.set(pci.cookieName,pci.value)}this.updatePowerRates(pci)}else{if(data.average_rate){this.averageRateString.innerHTML=data.average_rate.state+" @ $"+data.average_rate.average.rate.toFixed(3)+" per kWh";this.averageStateRate.value=data.average_rate.average.rate;this.averageRateSelector.checked=true;this.averageRateBlock.show()}else{this.customRateSelector.checked=true}Cookie.set("selectRate","false");this.rateInfoString.innerHTML="We don't have the Utility Rate for this location yet. Please select from the following options.";this.selectRateBlock.hide();this.enterRateBlock.show()}}.bind(this)})},newPolygon:function(H){var B=H.memo.polygon;var D=Builder.node("td");var E=Builder.node("td");var C=Builder.node("td");var F=Builder.node("td");var A=Builder.node("td");var G=Builder.node("input",{type:"checkbox"});var I=Builder.node("img",{src:"/images/trash-icon.png"});B.dom=Builder.node("tr",[Builder.node("td",[Builder.node("div",{className:"poly-color",style:"background-color:"+B.polyColor})]),D,E,C,F,A,Builder.node("td",[I]),Builder.node("td",[G])]);if(B.rrmap.polygonList.visible()){B.dom.style.display="none";B.rrmap.polygonList.appendChild(B.dom);Effect.Appear(B.dom)}else{B.rrmap.polygonList.appendChild(B.dom);Effect.Appear(B.rrmap.polygonList)}G.setAttribute("checked",true);Event.observe(G,"click",function(J){J.cancelBubble=true;this.rrmap.dom.fire("r:change")}.bind(B));Event.observe(I,"click",function(J){this.dom.fire("r:destroy");J.cancelBubble=true}.bind(B));Event.observe(B.dom,"mouseover",function(J){this.addClassName("on")});Event.observe(B.dom,"mouseout",function(J){this.removeClassName("on")});Event.observe(B.dom,"click",function(J){this.rrmap.selectActivePolygon(this)}.bind(B));B.potentialNode=D;B.powerPerNode=E;B.areaNode=C;B.wattsNode=A;B.calculateNode=G;B.orientation=F;B.dom.observe("r:destroy",function(J){this.rrmap.polygonList.removeChild(this.dom);this.rrmap.clearPolygon(this)}.bind(B))},loadArrayGraph:function(){var closedPolys=0;for(var i=0;i<this.map.polygons.length;i++){var p=this.map.polygons[i];var orientation=p.getOrientation();if(orientation){closedPolys+=1}}var tilt=24;var activePolygons=this.map.polygons.select(function(p){return p.calculateNode.checked});if(!activePolygons[0]){return }var centerPoint=activePolygons[0].centerPoint();if(!centerPoint){return }var latitude=centerPoint.lat();var longitude=centerPoint.lng();var params={latitude:latitude,longitude:longitude,authenticity_token:authenticityToken,start_date:"Jan 1 2008",end_date:"Dec 31 2008"};this.mergeRateParams(params);for(var i=0;i<activePolygons.length;i++){var poly=activePolygons[i];params["polygons["+i+"][tilt]"]=tilt;params["polygons["+i+"][area]"]=poly.area(tilt);params["polygons["+i+"][orientation]"]=poly.getOrientation()}new Ajax.Request("/calculator/analyze",{asynchronous:true,evalScripts:false,onLoading:function(){$("graph-loading").setStyle({display:"block"});$("pointer").setStyle({display:"none"})},onComplete:function(){$("graph-loading").setStyle({display:"none"});$("pointer").setStyle({display:""})},onSuccess:function(t){addedCalcs=0;calcs=eval("("+t.responseText+")");var headers=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];$("calculation-graph").innerHTML="";new Graph($("calculation-graph"),{negative:true,headers:headers,totals:calcs,className:"savings",prefix:"$"});Element.update("quick_calc_value",t.responseText);for(i=0;i<calcs.length;i++){addedCalcs+=calcs[i]}var pointer_position=1;var pixel=0;var result=Math.round(addedCalcs/12);Element.update("calc_result",result);var model_seeds_avg_bill=$F("avg_bill");Element.update("avg_bill_value",model_seeds_avg_bill);var percent_of_result_in_avg_bill=(result/Math.round(model_seeds_avg_bill))*100;if(result<=0){$("bill_change").setValue(1)}else{$("bill_change").setValue(1-(result/Math.round(model_seeds_avg_bill)))}if(Math.round((percent_of_result_in_avg_bill/100)*410)>=0){var pixs=410-(Math.round((percent_of_result_in_avg_bill/100)*410))}else{var pixs=410}$("pointer").setStyle({left:pixs+"px"});var hash_mark_count=10;var model_seeds_bill_change=$F("reduction_goal");Element.update("bill_change",model_seeds_bill_change);var target_bill=0;var far_left=model_seeds_avg_bill;Element.update("far_left",far_left);var far_right=0;target_bill=Math.round(model_seeds_bill_change*model_seeds_avg_bill);if(model_seeds_bill_change==0){far_right=-(model_seeds_avg_bill)}else{far_right=Math.round((target_bill-(far_left-target_bill)))}Element.update("far_right",far_right);var center_line=Math.round(target_bill);Element.update("center_value",center_line);Element.update("state_avg_db",$F("state_avg"));var hash_mult=((far_left-center_line)/hash_mark_count);var left_hash_mark=[];for(var i=1;i<10;i++){left_hash_mark[i]=(far_left-(hash_mult*i));if(result<=left_hash_mark[i]){pointer_position+=1}}Element.update("left_marks",left_hash_mark);if(result<=center_line){pointer_position+=1}var right_hash_mark=[];for(var i=1;i<10;i++){right_hash_mark[i]=(center_line-(hash_mult*i));if(result<=right_hash_mark[i]){pointer_position+=1}}Element.update("right_marks",right_hash_mark);Element.update("pc_id",$("power-company").value);Element.update("zip_id",$("zip-code").getValue());if(pointer_position<=10){pixel=29.6;if(pointer_position>1){pixel=(pixel+1.6)+((pointer_position-1)*2)}}else{if(pointer_position==11){pixel=49.2}else{pixel=51.7;if(pointer_position>12){pixel=(pixel)+((pointer_position-12)*2)}}}},onFailure:function(){},parameters:params,requestHeaders:{Accept:"application/json"}})}};function submitLead(){var E=$("quote-form");var A=$("quote-form-container");var F=$("quote-status");var C=Builder.node("div",{width:"80%",className:"loading body"},"...");$("lead-calculation-id").setValue(calc.map.id);$("lead-data-dump").setValue(calc.map.json());$("name").setValue($F("q_address")+$F("q_city_state"));var H=$("quote-power-company");var I=[];for(var D=0;D<H.options.length;D++){I.push([H.options[D].text,H.options[D].value])}var G=H.options[H.selectedIndex].value;var B=function(J){if(J){F.appendChild(C)}else{F.removeChild(C)}};new Ajax.Request("/leads",{asynchronous:true,evalScripts:true,parameters:Form.serialize(E),onComplete:function(){B(false)},onFailure:function(J){A.innerHTML=J.responseText;H=$("quote-power-company");I.each(function(K){H.appendChild(Builder.node("option",{value:K[1]},K[0]))});H.setValue(G)},onSuccess:function(J){$("get-a-quote-submit").remove();var K=Builder.node("div",{className:"body"},"");K.innerHTML=J.responseText;Element.hide(A);F.appendChild(K)},onLoading:function(){B(true)}})}Event.observe(window,"load",function(){calc=new Calculator({findLocalDataURL:"/calculator/find_local_data",tilt:$("tilt"),customRateString:$("custom-rate"),customRateUsed:$("custom-rate-kwh-used"),customRateCost:$("custom-rate-cost"),averageRateSelector:$("use-state-average"),averageStateRate:$("average-state-rate"),customRateSelector:$("use-custom-rate"),zipCode:$("zip-code"),averageBill:$("avg_bill"),selectRateBlock:$("select-rate-info"),powerCompanyField:$("power-company"),currentPowerRateField:$("current-power-rate"),solarPowerRateField:$("solar-power-rate"),quotePowerCompanyField:$("quote-power-company"),averageRateBlock:$("average-state-rate-info"),averageRateString:$("state-average-rate"),rateInfoString:$("rate-info"),enterRateBlock:$("enter-rate-info")})});function changeAvgBill(){var A;if($F("pool")=="1"){A=0.5037}else{A=0.4379}$("avg_bill").value=calcAverageBill(A,$F("state_avg"),$("square_feet").innerHTML);$("avg_bill_view").innerHTML=calcAverageBill(A,$F("state_avg"),$("square_feet").innerHTML);calc.loadArrayGraph()}function inlineEditStart(){$("avg_bill").setStyle({display:""});$("avg_bill_view").setStyle({display:"none"});$("edit-link").setStyle({display:"none"});$("avg_bill").focus()}function inlineEditClose(){$("avg_bill").setStyle({display:"none"});$("avg_bill_view").innerHTML=$F("avg_bill");$("avg_bill_view").setStyle({display:""});$("edit-link").setStyle({display:""})};