var RoofRayPolygon=Class.create();RoofRayPolygon.prototype={polyColor:"#FFE596",dragIconFile:"/images/resize2.png",dragIconShadowFile:"/images/shadow.png",solarToDC:0.15,onChange:function(){},change:function(){this.changed=true;this.replaceOrientationMarker();this.onChange()},initialize:function(B,A){this.rrmap=B;this.polyPoints=[];this.polyMarkers=[];Object.extend(this,A||{});this.dragIcon=new GIcon();this.dragIcon.iconSize=new GSize(8,8);this.dragIcon.image=this.dragIconFile;this.dragIcon.shadow=this.dragIconShadowFile;this.dragIcon.shadowSize=new GSize(0,0);this.dragIcon.iconAnchor=new GPoint(3,3);this.build()},build:function(){this.poly=new GPolygon(this.polyPoints,"#03fe03",2,0.5,this.polyColor,0.5,{clickable:false});this.rrmap.map.addOverlay(this.poly)},hideMarkers:function(){for(var A=0;A<this.polyMarkers.length;A++){this.polyMarkers[A].hide()}if(this.orientationEndMarker){this.orientationEndMarker.hide()}},showMarkers:function(){for(var A=0;A<this.polyMarkers.length;A++){this.polyMarkers[A].show()}if(this.orientationEndMarker){this.orientationEndMarker.show()}},redraw:function(){this.rrmap.map.removeOverlay(this.poly);this.build();this.change()},destroy:function(){this.rrmap.map.removeOverlay(this.poly);for(var A=0;A<this.polyMarkers.length;A++){this.rrmap.map.removeOverlay(this.polyMarkers[A])}if(this.orientationEndMarker){this.rrmap.map.removeOverlay(this.orientationEndMarker);this.rrmap.map.removeOverlay(this.orientationLine)}},addPoint:function(A,C,B){A.index=this.polyPoints.length;A.poly=this;if(C){A.marker=C;C.points.push(A)}this.polyPoints.push(A);if(!this.polyMarkers.find(function(D){D==C})){this.polyMarkers.push(C)}if(!B){this.redraw()}},centerPoint:function(){var A=this.poly.getBounds();if(A){return A.getCenter()}},replaceOrientationMarker:function(){if(this.orientationStartPoint){var D=this.poly.getBounds();if(D){var E=this.orientationStartPoint;var C=D.getCenter();var A=this.orientationEndPoint;var B=C.lat()-E.lat();var G=C.lng()-E.lng();var F=new GLatLng(A.lat()+B,A.lng()+G);this.orientationStartPoint=C;this.orientationEndPoint=F;this.orientationEndMarker.setLatLng(F);this.drawOrientation()}else{if(this.orientationLine){this.rrmap.map.removeOverlay(this.orientationLine)}if(this.orientationEndMarker){this.rrmap.map.removeOverlay(this.orientationEndMarker)}}}},placeOrientationMarker:function(C){var D=this.poly.getBounds();var A=D.getCenter();var F=(D.getNorthEast().lat()-D.getSouthWest().lat());if(!C){C=new GLatLng(A.lat()-F,A.lng())}var E=new GMarker(C,{draggable:true,title:"Drag to change orientation",dragCrossMove:false,icon:this.dragIcon});if(this.orientationEndMarker){this.rrmap.map.removeOverlay(this.orientationEndMarker)}this.rrmap.map.addOverlay(E);this.orientationStartPoint=A;this.orientationEndPoint=C;this.orientationEndMarker=E;this.drawOrientation();var B=this;GEvent.addListener(E,"dragend",function(){B.orientationEndPoint=this.getLatLng();B.drawOrientation();B.change()});this.change()},drawOrientation:function(){if(this.orientationLine){this.rrmap.map.removeOverlay(this.orientationLine)}this.orientationLine=new GPolyline([this.orientationStartPoint,this.orientationEndPoint],"#FF0000",4,0.5,this.polyColor,0.5);this.rrmap.map.addOverlay(this.orientationLine)},getOrientation:function(){if(this.orientationStartPoint&&this.orientationEndPoint){var degreesPerRadian=180/Math.PI;var radiansPerDegree=Math.PI/180;var lat1=this.orientationStartPoint.latRadians();var lng1=this.orientationStartPoint.lngRadians();var lat2=this.orientationEndPoint.latRadians();var lng2=this.orientationEndPoint.lngRadians();with(Math){var angle=-atan2(sin(lng1-lng2)*cos(lat2),cos(lat1)*sin(lat2)-sin(lat1)*cos(lat2)*cos(lng1-lng2))}if(angle<0){angle+=Math.PI*2}angle=angle*degreesPerRadian;angle=angle.toFixed(1);return angle}else{return }},compassLetter:function(A){if(!A){A=this.getOrientation()}if(!A){return }if(A>315||A<45){return"(N)"}else{if(A>=45&&A<135){return"(E)"}else{if(A>=135&&A<225){return"(S)"}else{if(A>=225){return"(W)"}}}}},removeLastPoint:function(){var A=this.polyPoints.pop();var B=A.marker;B.points.pop();if(B.points.length==0){this.rrmap.map.removeOverlay(B)}this.redraw()},movePoint:function(B,A){this.polyPoints[B]=A;this.redraw()},area:function(A){if(A){return this.poly.getArea()*(1/Math.cos(parseInt(A)*(Math.PI/180)))}else{return this.poly.getArea()}},watts:function(A){return this.area(A)*1000*this.solarToDC},open:function(){if(this.polyPoints.length>1){if(this.polyPoints.last().equals(this.polyPoints[0])){return false}}return true},close:function(A){var C=this.polyPoints[0];var B=new GLatLng(C.lat(),C.lng());this.addPoint(B,C.marker);this.placeOrientationMarker(A)},json:function(C){var F="";var B=[];for(var E=0;E<this.polyPoints.length;E++){var G=this.polyPoints[E];B.push("["+G.lat()+","+G.lng()+"]")}F+="points: ["+B.join(",")+"]";if(this.id){F+=", id: "+this.id}if(this.orientationEndPoint){var A="["+this.orientationStartPoint.lat()+","+this.orientationStartPoint.lng()+"]";var D="["+this.orientationEndPoint.lat()+", "+this.orientationEndPoint.lng()+"]";F+=", orientation: {start: "+A+", end: "+D+", angle: "+this.getOrientation()+"}"}if(C){F+=", area: "+this.area(C)}return"{"+F+"}"}};var RoofRayMap=Class.create();RoofRayMap.prototype={zoomLevel:19,currentPolygon:null,dragIconFile:"/images/resize2.png",dragIconShadowFile:"/images/shadow.png",solarToDC:0.15,lastCoords:null,maxSurfaces:40,polyColors:["#FFE596","#715aa2","#68baa4","#ee7719","#5fd3d2","#0600ff","#ff00ae","#FFE596","#715aa2","#68baa4","#ee7719","#5fd3d2","#0600ff","#ff00ae","#FFE596","#715aa2","#68baa4","#ee7719","#5fd3d2","#0600ff","#ff00ae","#FFE596","#715aa2","#68baa4","#ee7719","#5fd3d2","#0600ff","#ff00ae"],initialize:function(B,C,A){Object.extend(this,A||{});this.dom=$(B);if(GBrowserIsCompatible()){this.polygons=[];this.markers=[];this.map=new GMap2(this.dom,{draggableCursor:"crosshair"});this.geocoder=new GClientGeocoder();if(!this.zoomControl){this.map.enableContinuousZoom();this.map.enableScrollWheelZoom();if(this.mapControl){this.mapControl=new this.mapControl()}else{this.mapControl=new GLargeMapControl()}this.map.addControl(this.mapControl)}this.dragIcon=new GIcon();this.dragIcon.iconSize=new GSize(8,8);this.dragIcon.image=this.dragIconFile;this.dragIcon.shadow=this.dragIconShadowFile;this.dragIcon.shadowSize=new GSize(0,0);this.dragIcon.iconAnchor=new GPoint(3,3);if(C){this.map.setCenter(new GLatLng(C[0],C[1]),this.zoomLevel,G_HYBRID_MAP)}else{this.map.setCenter(new GLatLng(37.4419,-122.1419),this.zoomLevel,G_HYBRID_MAP)}GEvent.bind(this.map,"click",this,this.click);GEvent.bind(this.map,"dragend",this,function(){var D=this.map.getCenter();var E=this.lastCoords?D.distanceFrom(this.lastCoords):null;this.dom.fire("r:dragend",E);this.lastCoords=D}.bind(this));this.lastCoords=this.map.getCenter();Event.observe(window,"unload",GUnload)}},centerCrossHair:function(){var A=this.map.getBounds();var C=A.getSouthWest();var B=A.getNorthEast();var E=C.lng()+(B.lng()-C.lng())/2;var D=C.lat()+(B.lat()-C.lat())/2;this.crossHair=[new GPolyline([new GPoint(E,B.lat()),new GPoint(E,C.lat())],"#FF00FF",1,0.5),new GPolyline([new GPoint(C.lng(),D),new GPoint(B.lng(),D)],"#FF00FF",1,0.5)];this.showCrossHair()},showCrossHair:function(){var A=this.map;this.crossHair.each(function(B){A.addOverlay(B)});this.crossHairVisible=true},hideCrossHair:function(){var A=this.map;this.crossHair.each(function(B){A.removeOverlay(B)});this.crossHairVisible=false},toggleCrossHair:function(){if(this.crossHairVisible){this.hideCrossHair()}else{this.showCrossHair()}},click:function(D,B){if(B){var F=this.map.getZoom();var C=G_NORMAL_MAP.getProjection();var E=C.fromLatLngToPixel(B,F);var A=C.fromPixelToLatLng(E,F);if(this.activePolygon&&this.activePolygon.polyPoints.length>=1&&A.distanceFrom(this.activePolygon.polyPoints[0])>300){alert("Your surface is too large or is too far spread out. Try creating a new calculation.");return false}this.addPoint(A)}},addPoint:function(A,C,B){if(!this.activePolygon||!this.activePolygon.open()){if(this.polygons.length>=this.maxSurfaces){alert("Models are currently limited to "+this.maxSurfaces+" surfaces");return false}this.createNewPolygon(null,true)}if(!C){var C=new GMarker(A,{draggable:true,title:"Drag to reposition",dragCrossMove:false,bouncy:false,icon:this.dragIcon});C.points=[];C.rrmap=this;GEvent.addListener(C,"dragend",this.dragEnd);GEvent.addListener(C,"click",this.markerClick);this.map.addOverlay(C);this.markers.push(C)}this.activePolygon.addPoint(A,C,B)},dragEnd:function(){var A=[];var B=this.getLatLng();this.points.each(function(C){var D=Object.clone(B);var E=C.poly.polyPoints[C.index];D.index=E.index;D.marker=E.marker;D.poly=E.poly;C.poly.polyPoints[C.index]=D;A.push(D);C.poly.redraw()});this.points=A},mapDragEnd:function(){},markerClick:function(){if(this.rrmap.activePolygon&&this.rrmap.activePolygon.open()){if(this.getLatLng()==this.rrmap.activePolygon.polyPoints[0]){this.rrmap.activePolygon.close();return }}this.rrmap.addPoint(Object.clone(this.getLatLng()))},removePoint:function(){this.activePolygon.removeLastPoint()},placeOrientationMarker:function(A){this.activePolygon.placeOrientationMarker(A)},json:function(){var E="";var A=[];var D=0;for(var C=0;C<this.polygons.length;C++){A.push(this.polygons[C].json(this.tilt));D+=this.polygons[C].area(this.tilt)}E+="polygons: ["+A.join(",")+"]";if(this.id){E+=", id: "+this.id}if(this.name_field){var B=this.name_field.getValue();if(B&&B!=""){E+=', name: "'+B+'"'}}if(this.tilt){E+=", tilt: "+this.tilt}E+=", total_area: "+D;return"{"+E+"}"},loadCalculation:function(A){for(var B=0;B<A.polygons.length;B++){this.loadPolygon(A.polygons[B]);if(A.id){this.id=A.id}if(this.name_field){this.name_field.setValue(A.name)}}},loadPolygon:function(D){var C=D.points;var B;if(C.length>0){if(this.activePolygon){this.closeActivePolygon()}this.createNewPolygon(D.id,true);B=this.activePolygon;for(var E=0;E<C.length;E++){var A=new GLatLng(C[E][0],C[E][1]);if(E>0&&E==(C.length-1)){if(C[E][0]==C[0][0]&&C[E][1]==C[0][1]){if(D.orientation&&D.orientation.end){var F=new GLatLng(D.orientation.end[0],D.orientation.end[1]);this.closeActivePolygon(F)}else{this.closeActivePolygon()}if(B){B.hideMarkers()}return }}this.addPoint(A,null,true)}}},closeActivePolygon:function(A){this.activePolygon.close(A);this.activePolygon=null},createNewPolygon:function(C,B){var A=this.selectActivePolygon(new RoofRayPolygon(this,{id:C,onChange:function(){this.dom.fire("r:change")}.bind(this),polyColor:this.polyColors[this.polygons.length],solarToDC:this.solarToDC}));this.polygons.push(this.activePolygon);this.dom.fire("r:newpolygon",{polygon:A,nochange:B});if(!B){this.dom.fire("r:change")}},clearPolygons:function(){for(var A=0;A<this.polygons.length;A++){this.polygons[A].destroy()}this.map.clearOverlays();this.polygons=[];this.activePolygon=undefined;this.dom.fire("r:change")},clearActivePolygon:function(){this.clearPolygon(this.activePolygon)},refresh:function(){this.map.checkResize();if(Cookie){var center=Cookie.get("center");if(center){center=eval("("+center+")");this.map.setCenter(new GLatLng(center[0],center[1]))}}},clearPolygon:function(B){var A=this.polygons.indexOf(B);if(A>=0){this.polygons.splice(A,1);if(this.activePolygon==B){if(this.polygons.length>0){this.selectActivePolygon(this.polygons.last())}else{this.activePolygon=undefined}}B.destroy();this.dom.fire("r:change")}else{}},selectActivePolygon:function(A){if(this.activePolygon){this.activePolygon.hideMarkers()}this.activePolygon=A;this.activePolygon.showMarkers();this.map.setCenter(this.activePolygon.centerPoint());this.dom.fire("r:change");return this.activePolygon},loadAddress:function(A){A=$(A);var B=A.getValue();this.geocoder.getLocations(B,function(C){if(!C||C.Status.code!=200){if(Effect){Effect.Shake(A,{distance:5})}Element.addClassName(A,"error-field");window.setTimeout(function(){Element.removeClassName(A,"error-field")},2000)}else{place=C.Placemark[0];var D=this.loadCoordinates(place.Point.coordinates[1],place.Point.coordinates[0]);var E=this.lastCoords?D.distanceFrom(this.lastCoords):null;this.lastCoords=D;this.dom.fire("r:dragend",E)}}.bind(this))},loadCoordinates:function(C,B){var A=new GLatLng(C,B);this.map.setCenter(A,this.zoomLevel);if(Cookie){var D="["+A.lat()+","+A.lng()+"]";Cookie.set("center",D)}this.reset();return A},reset:function(){this.clearPolygons();this.id=null;if(this.name_field){this.name_field.setValue("")}},loadAddressForm:function(C){var B=[C.address1.value,C.zip.value].join(" ");var A=this;this.geocoder.getLocations(B,function(E){if(!E||E.Status.code!=200){alert("Sorry, we were unable to geocode that address")}else{place=E.Placemark[0];var D=new GLatLng(place.Point.coordinates[1],place.Point.coordinates[0]);var F=new GMarker(D);A.map.addOverlay(F);A.map.setCenter(D,A.zoomLevel);F.openInfoWindow(A.buildMarkerDom(place))}})},activeArea:function(){if(this.activePolygon){return this.activePolygon.area()}else{return 0}},buildMarkerDom:function(A){d=document.createElement("div");d.appendChild(document.createTextNode(A.address));d.appendChild(document.createElement("br"));coords=document.createElement("b");coords.appendChild(document.createTextNode(A.Point.coordinates[1]+", "+A.Point.coordinates[0]));d.appendChild(coords);d.appendChild(document.createElement("br"));form=document.createElement("form");form.setAttribute("action","/calculator");form.setAttribute("method","post");h1=document.createElement("input");h1.setAttribute("type","hidden");h1.setAttribute("name","location[address1]");h1.setAttribute("value",A.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.Thoroughfare.ThoroughfareName);form.appendChild(h1);h2=document.createElement("input");h2.setAttribute("type","hidden");h2.setAttribute("name","location[city]");h2.setAttribute("value",A.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.LocalityName);form.appendChild(h2);h3=document.createElement("input");h3.setAttribute("type","hidden");h3.setAttribute("name","location[state]");h3.setAttribute("value",A.AddressDetails.Country.AdministrativeArea.AdministrativeAreaName);form.appendChild(h3);h4=document.createElement("input");h4.setAttribute("type","hidden");h4.setAttribute("name","location[zip]");h4.setAttribute("value",A.AddressDetails.Country.AdministrativeArea.SubAdministrativeArea.Locality.PostalCode.PostalCodeNumber);form.appendChild(h4);h5=document.createElement("input");h5.setAttribute("type","hidden");h5.setAttribute("name","location[longitude]");h5.setAttribute("value",A.Point.coordinates[0]);form.appendChild(h5);h6=document.createElement("input");h6.setAttribute("type","hidden");h6.setAttribute("name","location[latitude]");h6.setAttribute("value",A.Point.coordinates[1]);form.appendChild(h6);h7=document.createElement("input");h7.setAttribute("type","hidden");h7.setAttribute("name","authenticity_token");h7.setAttribute("value",authenticityToken);form.appendChild(h7);submit=document.createElement("input");submit.setAttribute("type","submit");submit.setAttribute("value","Calculate Solar Potential");submit.setAttribute("class","button");form.appendChild(submit);d.appendChild(form);return d}};

var Graph=Class.create();Graph.prototype={graphHeight:58,initialize:function(A,B){this.container=$(A);this.totals=[];this.negative=false;Object.extend(this,B||{});this.bars=[];this.initGraph();if(this.totals.length>0){this.resetGraph(this.totals)}},destroy:function(){this.container.innerHTML=""},initGraph:function(){var L=document.createElement("table");L.className="list sortable graph";L.cellspacing=1;L.style.width="100%";var K=document.createElement("thead");L.appendChild(K);var F=document.createElement("tr");K.appendChild(F);var G=document.createElement("tbody");L.appendChild(G);G.className="data";L.appendChild(G);var E=document.createElement("tr");E.className="top-row";G.appendChild(E);var D=document.createElement("tr");D.className="bot-row";G.appendChild(D);for(var H=0;H<this.headers.length;H++){var B=document.createElement("th");B.appendChild(document.createTextNode(this.headers[H]));var C=document.createElement("td");var J=document.createElement("div");J.style.height="0px";C.appendChild(J);C.box=J;F.appendChild(B);E.appendChild(C);if(this.negative){var I=document.createElement("td");var A=document.createElement("div");A.style.height="0px";I.appendChild(A);I.box=A;D.appendChild(I);this.bars.push([C,I])}else{this.bars.push([C])}}this.container.appendChild(L);if(this.className){Element.addClassName(L,this.className)}},resetGraph:function(C){this.totals=C;var E=C.inject(0,function(L,K){K=Math.abs(K);return(L>K?L:K)});for(var B=0;B<C.length;B++){try{var I=C[B];var G=(I==0?0:(Math.abs(I)/E));var D=this.formatNumber(I,this.prefix);var J=this.bars[B];for(var H=0;H<=(this.negative?1:0);H++){if(J[H].amount){for(var A=0;A<J[H].childNodes.length;A++){J[H].box.style.height="0px";if(J[H].childNodes[A].nodeType==3){Element.remove(J[H].childNodes[A])}}}}if(this.negative){if(I>=0){J[0].box.style.backgroundPosition="-"+(1200-(parseInt(G*12)*100))+"px bottom";J[0].box.style.height=(G*this.graphHeight)+"px";Element.insert(J[0],{top:D});J[0].amount=D}else{if(I<0){J[1].box.style.backgroundPosition="-"+(parseInt(G*11)*100)+"px top";J[1].box.style.height=(G*this.graphHeight)+"px";Element.insert(J[1],{bottom:D});J[1].amount=D}}}else{J[0].box.style.backgroundPosition="-"+(1200-(parseInt(G*12)*100))+"px bottom";J[0].box.style.height=(G*this.graphHeight)+"px";Element.insert(J[0],{top:D});J[0].amount=D}}catch(F){}}},formatNumber:function(F,B){if(!B){B=""}if(B=="$"){var G=Math.abs(F).toFixed(0)+""}else{var G=Math.abs(F).toFixed(0)+""}var A=G.split(".");var E=A[0];var C=A.length>1?"."+A[1]:"";var D=/(\d+)(\d{3})/;while(D.test(E)){E=E.replace(D,"$1,$2")}var H=E+C;return(F<0?("("+B+H+")"):(B+H))}};

var RoofRayPerformance=Class.create();RoofRayPerformance.prototype={headers:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],timeout:10000,initialize:function(A){this.start_date="Jan 1 2008";this.end_date="Dec 31 2008";Object.extend(this,A||{});this.graph=null;this.loadingIndicator=null},refresh:function(){this.loading("Determing your photovoltaic output");var A=this.tilt.getValue();var C=this.map.polygons.select(function(I){return I.calculateNode.checked});if(C.length<1&&this.graph){this.graph.destroy();this.graph=null;return false}else{if(C.length>=1){var H=C[0].centerPoint();var F=H.lat();var E=H.lng();var G={latitude:F,longitude:E,authenticity_token:authenticityToken,start_date:this.start_date,end_date:this.end_date};for(var B=0;B<C.length;B++){var D=C[B];G["polygons["+B+"][tilt]"]=A;G["polygons["+B+"][area]"]=D.area(A);G["polygons["+B+"][orientation]"]=D.getOrientation()}new Ajax.Request(this.url,{asynchronous:true,evalScripts:false,onFailure:this.reportError.bind(this),onSuccess:this.processResponse.bind(this),parameters:G})}}},processResponse:function(transport){var monthlyData=eval(transport.responseText);this.loadingComplete();if(this.graph){this.graph.resetGraph(monthlyData)}else{this.graph=new Graph(this.container,{headers:this.headers,totals:monthlyData,className:"result"})}},reportError:function(transport){window.location="#roof-area";var data=eval("("+transport.responseText+")");alert(data.message);this.loadingComplete()},loading:function(A){if(this.loadingIndicator){this.loadingIndicator.innerHTML=A;this.loadingIndicator.className="loading"}else{this.loadingComplete();this.loadingIndicator=document.createElement("div");this.loadingIndicator.className="loading";this.loadingIndicator.appendChild(document.createTextNode(A));new Insertion.Top(this.container,this.loadingIndicator)}this.loadingIndicator.timer=window.setTimeout(function(){if(this.loadingIndicator&&this.loadingIndicator.parentNode){Element.remove(this.loadingIndicator);this.loadingIndicator=document.createElement("div");this.loadingIndicator.className="failure";this.loadingIndicator.appendChild(document.createTextNode("Request timed out. "));var B=document.createElement("a");B.appendChild(document.createTextNode("Retry"));Event.observe(B,"click",this.refresh.bindAsEventListener(this));this.loadingIndicator.appendChild(B);new Insertion.Top(this.container,this.loadingIndicator)}}.bind(this),this.timeout)},loadingComplete:function(){if(this.loadingIndicator&&this.loadingIndicator.parentNode){if(this.loadingIndicator.timer){window.clearTimeout(this.loadingIndicator.timer)}Element.remove(this.loadingIndicator);this.loadingIndicator=null}}};

var RoofRayROI=Class.create();RoofRayROI.prototype={headers:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],timeout:10000,initialize:function(A){this.start_date="Jan 1 2008";this.end_date="Dec 31 2008";Object.extend(this,A||{});this.loadingIndicator=null;this.graph=null;this.totals=null},refresh:function(H){var I=this.tilt.getValue();var A=this.map.polygons.select(function(K){return K.calculateNode.checked});if(A.length<1){if(H){alert("You need to draw a solar array first")}return false}var G=A[0].centerPoint();var J=G.lat();var B=G.lng();this.loading("Calculating your monthly bills...");var E={latitude:J,longitude:B,authenticity_token:authenticityToken,start_date:this.start_date,end_date:this.end_date};this.calc.mergeRateParams(E);var D=this.calc.savings.getSystemSizeAC();this.calc.totalOutput.value=D;for(var F=0;F<A.length;F++){var C=A[F];E["polygons["+F+"][tilt]"]=I;E["polygons["+F+"][area]"]=C.area(I);E["polygons["+F+"][orientation]"]=C.getOrientation()}new Ajax.Request(this.url,{asynchronous:true,evalScripts:false,onSuccess:this.processResponse.bind(this),onFailure:this.reportError.bind(this),parameters:E,requestHeaders:{Accept:"application/json"}})},processResponse:function(transport){var monthlyData=eval(transport.responseText);if(this.graph){this.graph.resetGraph(monthlyData)}else{this.graph=new Graph(this.container,{negative:true,headers:this.headers,totals:monthlyData,className:"savings",prefix:"$"})}this.totals=monthlyData;this.loadingComplete()},reportError:function(transport){var data=eval("("+transport.responseText+")");alert(data.message);this.loadingComplete()},loading:function(A){if(this.loadingIndicator){this.loadingIndicator.innerHTML=A;this.loadingIndicator.className="loading"}else{this.loadingComplete();this.loadingIndicator=document.createElement("div");this.loadingIndicator.className="loading";this.loadingIndicator.appendChild(document.createTextNode(A));new Insertion.Top(this.container,this.loadingIndicator)}this.loadingIndicator.timer=window.setTimeout(function(){if(this.loadingIndicator){Element.remove(this.loadingIndicator)}this.loadingIndicator=document.createElement("div");this.loadingIndicator.className="failure";this.loadingIndicator.appendChild(document.createTextNode("Request timed out. "));var B=document.createElement("a");B.appendChild(document.createTextNode("Retry"));Event.observe(B,"click",this.refresh.bindAsEventListener(this));this.loadingIndicator.appendChild(B);new Insertion.Top(this.container,this.loadingIndicator)}.bind(this),this.timeout)},loadingComplete:function(){if(this.loadingIndicator){if(this.loadingIndicator.timer){window.clearTimeout(this.loadingIndicator.timer)}Element.remove(this.loadingIndicator);this.loadingIndicator=null}}};

var RoofRayAnalysis=Class.create();RoofRayAnalysis.prototype={monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],timeout:10000,observe:["averageBill","customRateCost","customRateUsed","customRateSelector","averageRateSelector","averageStateRate"],initialize:function(B){Object.extend(this,B||{});this.months=[];this.data=null;this.rawData=null;this.loadingIndicator=null;this.table=null;for(var A=0;A<this.observe.length;A++){Event.observe(this.calc[this.observe[A]],"change",this.expire.bind(this))}if(this.usage_container){this.inputs=this.usage_container.getElementsByTagName("input")}else{throw"You must include usage inputs with usage_container attribute"}if(Cookie){for(var A=0;A<this.inputs.length;A++){if(!this.inputs[A].value){this.inputs[A].value=Cookie.get(this.inputs[A].id)||""}Event.observe(this.inputs[A],"change",function(){Cookie.set(this.id,this.value)}.bindAsEventListener(this.inputs[A]))}}},expire:function(){this.data=null;this.rawData=null},getData:function(onComplete){if(this.data){return onComplete(this.data,this.rawData)}var processData=function(transport){this.data=eval(transport.responseText);this.rawData=transport.responseText+"";onComplete(this.data,this.rawData)}.bind(this);var params={calculation_id:this.map.id,authenticity_token:authenticityToken};if(Cookie&&Cookie.get("usage-toggle")=="use-detailed-bills"){this.addUsageData(params)}this.calc.mergeRateParams(params);new Ajax.Request(this.url,{onSuccess:processData,onFailure:this.reportError.bind(this),parameters:params,requestHeaders:{Accept:"application/json"}})},addUsageData:function(D){for(var B=0;B<this.inputs.length;B++){var A=this.inputs[B].name;var C=this.inputs[B].value;if(C){D[A]=C}}},reportError:function(transport){window.location="#financial-analysis/select-utility-company";var data=eval("("+transport.responseText+")");alert(data.message)},refresh:function(){if(this.table){Element.remove(this.table);this.table=null}this.loading("Analyzing your power usage...");this.getData(function(A){this.initTable(A);this.loadingComplete()}.bindAsEventListener(this))},initTable:function(o){var h=o[0].plan.tiers;var T=document.createElement("table");T.className="list";T.cellspacing=2;T.cellpadding=0;T.border=0;T.style.width="100%";var Y=document.createElement("thead");T.appendChild(Y);var l=document.createElement("tr");Y.appendChild(l);var I=document.createElement("th");var G=document.createElement("th");G.colSpan=2;var L=document.createElement("span");L.id="plan-name";G.appendChild(L);G.appendChild(document.createTextNode(" Rate Plan"));var F=document.createElement("th");F.colSpan=h.length;F.appendChild(document.createTextNode('Break-down of "Excessive" Use Rates'));l.appendChild(I);l.appendChild(G);l.appendChild(F);var k=document.createElement("tr");Y.appendChild(k);var E=document.createElement("th");E.appendChild(document.createTextNode("Month"));var D=document.createElement("th");D.appendChild(document.createTextNode("kWh"));var C=document.createElement("th");C.appendChild(document.createTextNode("Utility Bills"));k.appendChild(E);k.appendChild(D);k.appendChild(C);for(var n=0;n<h.length;n++){var P=h[n];var U=P.upper_cutoff?(P.upper_cutoff*100)+"%":"max";var a=document.createElement("th");a.appendChild(document.createTextNode(U));k.appendChild(a)}var H=["summer","winter"];var S=0;var Z=0;for(var f=0;f<H.length;f++){var M=H[f]+"_months";var c=document.createElement("tbody");T.appendChild(c);c.className=M;var R=0;var V=0;for(var n=0;n<this[M].length;n++){var j=this[M][n]-1;var B=o[j];var Q=document.createElement("tr");R+=B.energy.total;V+=B.cost.total;var g=document.createElement("td");g.appendChild(document.createTextNode(this.monthNames[j]));Q.appendChild(g);var b=document.createElement("td");b.appendChild(document.createTextNode(this.formatNumber(B.energy.total)));Q.appendChild(b);var m=document.createElement("td");m.appendChild(document.createTextNode(this.formatNumber(B.cost.total,"$")));Q.appendChild(m);for(var d=0;d<h.length;d++){var N=document.createElement("td");if(B.cost.tiers[d]){N.appendChild(document.createTextNode(this.formatNumber(B.cost.tiers[d])));N.className="tier-"+(d+1)+"-result"}else{N.appendChild(document.createTextNode("-"))}Q.appendChild(N)}c.appendChild(Q);this.months.push(Q)}S+=R;Z+=V;var X=document.createElement("tr");X.className="total";var K=document.createElement("td");var J=H[f].charAt(0).toUpperCase()+H[f].substr(1);K.appendChild(document.createTextNode(J+" Total"));var e=document.createElement("td");e.appendChild(document.createTextNode(this.formatNumber(R)));var A=document.createElement("td");A.appendChild(document.createTextNode(this.formatNumber(V,"$")));X.appendChild(K);X.appendChild(e);X.appendChild(A);c.appendChild(X);T.appendChild(c)}var c=document.createElement("tbody");var O=document.createElement("tr");O.className="grand-total";var W=document.createElement("td");W.appendChild(document.createTextNode("Grand Total"));var e=document.createElement("td");e.appendChild(document.createTextNode(this.formatNumber(S)));var A=document.createElement("td");A.appendChild(document.createTextNode(this.formatNumber(Z,"$")));O.appendChild(W);O.appendChild(e);O.appendChild(A);c.appendChild(O);T.appendChild(c);this.container.appendChild(T);this.table=T},formatNumber:function(F,B){if(!B){B=""}if(B=="$"){var G=Math.abs(F).toFixed(2)+""}else{var G=Math.abs(F).toFixed(0)+""}var A=G.split(".");var E=A[0];var C=A.length>1?"."+A[1]:"";var D=/(\d+)(\d{3})/;while(D.test(E)){E=E.replace(D,"$1,$2")}var H=E+C;return(F<0?("("+B+H+")"):(B+H))},loading:function(A){if(this.loadingIndicator){this.loadingIndicator.innerHTML=A;this.loadingIndicator.className="loading"}else{this.loadingComplete();this.loadingIndicator=document.createElement("div");this.loadingIndicator.className="loading";this.loadingIndicator.appendChild(document.createTextNode(A));new Insertion.Top(this.container,this.loadingIndicator)}this.loadingIndicator.timer=window.setTimeout(function(){if(this.loadingIndicator&&this.loadingIndicator.parentNode){Element.remove(this.loadingIndicator);this.loadingIndicator=document.createElement("div");this.loadingIndicator.className="failure";this.loadingIndicator.appendChild(document.createTextNode("Request timed out. "));var B=document.createElement("a");B.appendChild(document.createTextNode("Retry"));Event.observe(B,"click",this.refresh.bindAsEventListener(this));this.loadingIndicator.appendChild(B);new Insertion.Top(this.container,this.loadingIndicator)}}.bind(this),this.timeout)},loadingComplete:function(){if(this.loadingIndicator&&this.loadingIndicator.parentNode){if(this.loadingIndicator.timer){window.clearTimeout(this.loadingIndicator.timer)}Element.remove(this.loadingIndicator);this.loadingIndicator=null}}};

var RoofRaySavings=Class.create();RoofRaySavings.prototype={monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],timeout:10000,observe:["averageBill","customRateCost","customRateUsed","customRateSelector","averageRateSelector","averageStateRate"],initialize:function(B){Object.extend(this,B||{});this.months=[];this.data=null;this.annualSavings=null;this.loadingIndicator=null;this.table=null;for(var A=0;A<this.observe.length;A++){Event.observe(this.calc[this.observe[A]],"change",this.expire.bind(this))}this.map.dom.observe("r:change",this.expire.bind(this))},expire:function(){this.data=null;this.annualSavings=null},getData:function(usages,onComplete,systemSizeOverride){if(this.data&&!systemSizeOverride){return onComplete(this.data)}var centerPoint=this.map.polygons[0].centerPoint();var tilt=this.tilt.getValue();var activePolygon=this.map.activePolygon;var processResponse=function(transport){var data=eval(transport.responseText);this.data=data;onComplete(data)}.bindAsEventListener(this);var params={latitude:centerPoint.lat(),longitude:centerPoint.lng(),usage:usages,authenticity_token:authenticityToken};this.calc.mergeRateParams(params);if(systemSizeOverride){params.system_size_modifier=systemSizeOverride/this.getSystemSizeAC()}for(var i=0;i<this.map.polygons.length;i++){var poly=this.map.polygons[i];if(poly.calculateNode.checked){params["polygons["+i+"][tilt]"]=tilt;params["polygons["+i+"][area]"]=poly.area(tilt);params["polygons["+i+"][orientation]"]=poly.getOrientation()}}new Ajax.Request(this.url,{onSuccess:processResponse,onFailure:this.reportError.bind(this),parameters:params,requestHeaders:{Accept:"application/json"}})},reportError:function(transport){window.location="#roof-area";var data=eval("("+transport.responseText+")");alert(data.message);this.loadingComplete()},getSystemSize:function(){var C=0;var A=this.tilt.getValue();for(var B=0;B<this.map.polygons.length;B++){var D=this.map.polygons[B];if(D.calculateNode.checked){C+=D.watts(A)}}return C},getSystemSizeAC:function(){return this.getSystemSize()*this.derateFactor},setAnnualSavings:function(A){this.annualSavings=A},getAnnualSavings:function(B,A){if(!this.annualSavings||A){this.refresh(B,A)}else{B(this.annualSavings)}},refresh:function(B,A){if(this.table){Element.remove(this.table);this.table=null}this.loading("Analyzing your power usage...");this.analysis.getData(function(D,C){this.loading("Determining your annual photovoltaic output...");this.getData(C,function(E){this.setAnnualSavings(this.initTable(D,E));this.loadingComplete();if(B&&Object.isFunction(B)){B(this.annualSavings)}}.bind(this),A)}.bind(this))},initTable:function(c,I){if(this.table){Element.remove(this.table);this.table=null}var d=document.createElement("table");d.className="list";d.cellspacing=2;d.cellpadding=0;d.border=0;d.style.width="100%";var W=document.createElement("thead");d.appendChild(W);var f=document.createElement("tr");W.appendChild(f);var g=function(h,k,i){var j=document.createElement(k);j.appendChild(document.createTextNode(i));h.appendChild(j)};var C=["Month","Current Consumption kWh","Solar Production kWh","Net Usage","Current Electric Bill","Savings From Solar","Net Bill"];for(var U=0;U<C.length;U++){g(f,"th",C[U])}var Y=["summer","winter"];var H=0;var L=0;var S=0;var P=0;var T=0;var X=0;for(var Q=0;Q<Y.length;Q++){var R=Y[Q]+"_months";var b=Y[Q].charAt(0).toUpperCase()+Y[Q].substr(1);var B=document.createElement("tbody");d.appendChild(B);B.className=R;var E=0;var a=0;var V=0;var F=0;var G=0;var M=0;for(var U=0;U<this[R].length;U++){var O=this[R][U]-1;var D=I[O];var e=c[O];var K=document.createElement("tr");var Z=e.cost.total-D.value.total;var J=e.energy.total-D.energy.total;E+=e.energy.total;a+=e.cost.total;V+=D.energy.total;F+=J;G+=Z;M+=D.value.total;g(K,"td",this.monthNames[O]);g(K,"td",this.formatNumber(e.energy.total));g(K,"td",this.formatNumber(D.energy.total));g(K,"td",this.formatNumber(J));g(K,"td",this.formatNumber(e.cost.total,"$"));g(K,"td",this.formatNumber(Z,"$"));g(K,"td",this.formatNumber(D.value.total,"$"));B.appendChild(K);this.months.push(K)}H+=E;L+=a;S+=V;P+=F;T+=G;X+=M;var N=document.createElement("tr");N.className="total";g(N,"td",b+" Total");g(N,"td",this.formatNumber(E));g(N,"td",this.formatNumber(V));g(N,"td",this.formatNumber(F));g(N,"td",this.formatNumber(a,"$"));g(N,"td",this.formatNumber(G,"$"));g(N,"td",this.formatNumber(M,"$"));B.appendChild(N);d.appendChild(B)}if(T>L){T=L}if(X<0){X=0}var B=document.createElement("tbody");var A=document.createElement("tr");A.className="grand-total";g(A,"td","Annual Total");g(A,"td",this.formatNumber(H));g(A,"td",this.formatNumber(S));g(A,"td",this.formatNumber(P));g(A,"td",this.formatNumber(L,"$"));g(A,"td",this.formatNumber(T,"$"));g(A,"td",this.formatNumber(X,"$"));B.appendChild(A);d.appendChild(B);this.container.appendChild(d);this.table=d;return T},formatNumber:function(F,B){if(!B){B=""}if(B=="$"){var G=Math.abs(F).toFixed(2)+""}else{var G=Math.abs(F).toFixed(0)+""}var A=G.split(".");var E=A[0];var C=A.length>1?"."+A[1]:"";var D=/(\d+)(\d{3})/;while(D.test(E)){E=E.replace(D,"$1,$2")}var H=E+C;return(F<0?("("+B+H+")"):(B+H))},loading:function(A){if(this.loadingIndicator){this.loadingIndicator.innerHTML=A;this.loadingIndicator.className="loading"}else{this.loadingComplete();this.loadingIndicator=document.createElement("div");this.loadingIndicator.className="loading";this.loadingIndicator.appendChild(document.createTextNode(A));new Insertion.Top(this.container,this.loadingIndicator)}this.loadingIndicator.timer=window.setTimeout(function(){if(this.loadingIndicator&&this.loadingIndicator.parentNode){Element.remove(this.loadingIndicator);this.loadingIndicator=document.createElement("div");this.loadingIndicator.className="failure";this.loadingIndicator.appendChild(document.createTextNode("Request timed out. "));var B=document.createElement("a");B.appendChild(document.createTextNode("Retry"));Event.observe(B,"click",this.refresh.bindAsEventListener(this));this.loadingIndicator.appendChild(B);new Insertion.Top(this.container,this.loadingIndicator)}}.bind(this),this.timeout)},loadingComplete:function(){if(this.loadingIndicator&&this.loadingIndicator.parentNode){if(this.loadingIndicator.timer){window.clearTimeout(this.loadingIndicator.timer)}Element.remove(this.loadingIndicator);this.loadingIndicator=null}}};

var RoofRayReport=Class.create();RoofRayReport.prototype={timeout:10000,defaultPermit:500,initialize:function(A){this.system_size=null;Object.extend(this,A||{});this.months=[];this.system_size=this.savings.getSystemSizeAC();this.noRebate=false;this.slider=new Slider(this.system_size_slider,0,this.system_size*4,300,this.system_size_input,this.system_size,{onChange:this.updateSystemSize.bind(this)});Event.observe(this.avoided_electricity_cost,"change",this.refresh.bind(this));Event.observe(this.output_depreciation,"change",this.refresh.bind(this));Event.observe(this.energy_inflation_rate,"change",this.refresh.bind(this));Event.observe(this.system_price,"change",this.calculateRefresh.bind(this));Event.observe(this.state_rebate,"change",this.calculateRefreshWithoutRebateUpdate.bind(this));Event.observe(this.cost_of_permit,"change",this.calculateRefresh.bind(this));Event.observe(this.net_expense,"change",this.refresh.bind(this));this.calculateRefresh()},expire:function(){this.expired=true},reset:function(){this.expired=false;this.system_size_input.setValue(this.savings.getSystemSizeAC());this.cost_of_permit.setValue(this.defaultPermit);this.slider.refresh();this.updateSystemSize();this.energy_inflation_rate.setValue("5.7%");this.output_depreciation.setValue("10%")},calculateRefresh:function(){this.calculateExpense();this.refresh()},calculateRefreshWithoutRebateUpdate:function(){this.calculateExpense(1);this.refresh()},calculateExpense:function(C){var D=this.parseNumber(this.system_price.getValue());var G=this.parseNumber(this.state_rebate.getValue());if(C!=1){G=this.stateRebate(this.system_size_input.getValue())}this.state_rebate.setValue(this.formatNumber(G,"$"));var A=D-G;this.net_after_rebate.setValue(this.formatNumber(A,"$"));var B=this.parseNumber(this.cost_of_permit.getValue());if(!B){B=this.defaultPermit}this.cost_of_permit.setValue(this.formatNumber(B,"$"));var F=A+B;this.net_system_costs.setValue(this.formatNumber(F,"$"));var E=D*0.3;this.federal_tax_credit.setValue(this.formatNumber(E,"$"));this.net_expense.setValue(this.formatNumber(F-E,"$"))},updateSystemSize:function(A){this.loading("Loading annual savings");if(this.expired){return this.reset()}this.system_price.setValue(this.formatNumber(this.systemCostEstimate(this.system_size_input.getValue()),"$"));this.savings.getAnnualSavings(function(B){this.avoided_electricity_cost.setValue(this.formatNumber(B,"$"));this.calculateRefresh()}.bind(this),A)},refresh:function(){if(this.output_depreciation.getValue()==""){this.output_depreciation.setValue("10%")}if(this.energy_inflation_rate.getValue()==""){this.energy_inflation_rate.setValue("5.7%")}if(this.avoided_electricity_cost.getValue()==""){this.loading("Loading annual savings");this.savings.getAnnualSavings(function(A){this.avoided_electricity_cost.setValue(this.formatNumber(A,"$"));this.initTable(this.parseNumber(this.net_expense.getValue()),this.parseNumber(this.avoided_electricity_cost.getValue()),this.parseNumber(this.energy_inflation_rate.getValue())/100,this.parseNumber(this.output_depreciation.getValue())/100)}.bind(this))}else{this.initTable(this.parseNumber(this.net_expense.getValue()),this.parseNumber(this.avoided_electricity_cost.getValue()),this.parseNumber(this.energy_inflation_rate.getValue())/100,this.parseNumber(this.output_depreciation.getValue())/100)}},initTable:function(H,O,I,D){this.system_cost_header.innerHTML="Net Cost: "+this.formatNumber(H,"$");this.system_size_header.innerHTML="Size: "+this.formatNumber(this.parseNumber(this.system_size_input.getValue())/1000,null,3)+" kW";var Y=function(a,d,b,Z){var c=document.createElement(d);for(o in (Z||{})){c[o]=Z[o]}c.appendChild(document.createTextNode(b));a.appendChild(c);return c};var U=document.createElement("table");U.className="list";U.cellspacing=2;U.cellpadding=0;U.border=0;U.style.width="100%";var T=document.createElement("thead");U.appendChild(T);var W=document.createElement("tr");Y(W,"th","25 Year Cash Flow",{colSpan:4});T.appendChild(W);var V=document.createElement("tr");var C=["Year","Avoided Utility Cost","Net PV System Cost","Cumulative Cash Flow"];for(var S=0;S<C.length;S++){Y(V,"th",C[S])}T.appendChild(V);var A=document.createElement("tbody");var G=1+(I-(D/25));var X=(Math.log(-1*(((H/O)*(1-G))-1))/Math.log(G))+1;this.breakeven_point_header.innerHTML="Yrs to Breakeven: "+Math.ceil(X);for(var S=0;S<25;S++){var B=document.createElement("tr");if(S<(X-1)){var F=185/X;var E=Math.floor(S*F+70);var Q=(E<16?"0":"")+E.toString(16);var R="#FF"+Q+Q}else{var F=230/(25-X);var E=Math.floor(((25-X)-(S-X))*F+25);if(E>255){E=255}var Q=(E<16?"0":"")+E.toString(16);var R="#"+Q+"FF"+Q}var P=O*Math.pow(G,S);var N=O*((1-Math.pow(G,S))/(1-G));var K=N-H;Y(B,"td",S+1);Y(B,"td",this.formatNumber(P,"$"));Y(B,"td",(S==0?this.formatNumber(-H,"$"):""));var J=Y(B,"td",this.formatNumber(K,"$"));J.style.backgroundColor=R;if(E==255){J.style.border="1px solid #0000FF"}A.appendChild(B)}U.appendChild(A);var N=O*((1-Math.pow(G,24))/(1-G));var K=N-H;var M=document.createElement("tfoot");var L=document.createElement("tr");M.appendChild(L);Y(L,"td","");Y(L,"td",this.formatNumber(N,"$"));Y(L,"td",this.formatNumber(-H,"$"));Y(L,"td",this.formatNumber(N-H,"$"));U.appendChild(M);this.container.innerHTML="";this.container.appendChild(U)},systemCostEstimate:function(A){return(2473.074652+((0.85*8.481688517)*A))},stateRebate:function(B){if(this.calc.noRebate){return 0}else{var D=0;for(var A=0;A<this.map.polygons.length;A++){var C=this.map.polygons[A];if(C.calculateNode.checked){D+=(this.parseNumber(C.wattsNode.innerHTML)*2)}}return D*(B/this.savings.getSystemSizeAC())}},formatNumber:function(F,D,G){if(!D){D=""}if(D=="$"){var A=Math.abs(F).toFixed(G||2)+""}else{var A=Math.abs(F).toFixed(G||0)+""}var I=A.split(".");var C=I[0];var B=I.length>1?"."+I[1]:"";var H=/(\d+)(\d{3})/;while(H.test(C)){C=C.replace(H,"$1,$2")}var E=C+B;return(F<0?("("+D+E+")"):(D+E))},parseNumber:function(A){return parseFloat(A==""?0:(A+"").replace(/[^0-9.]/g,""))},loading:function(A){if(this.loadingIndicator&&this.loadingIndicator.parentNode){this.loadingIndicator.innerHTML=A;this.loadingIndicator.className="loading"}else{this.loadingComplete();this.loadingIndicator=document.createElement("div");this.loadingIndicator.className="loading";this.loadingIndicator.appendChild(document.createTextNode(A));new Insertion.Top(this.container,this.loadingIndicator)}this.loadingIndicator.timer=window.setTimeout(function(){if(this.loadingComplete()){this.loadingIndicator=document.createElement("div");this.loadingIndicator.className="failure";this.loadingIndicator.appendChild(document.createTextNode("Request timed out. "));var B=document.createElement("a");B.appendChild(document.createTextNode("Retry"));Event.observe(B,"click",this.refresh.bindAsEventListener(this));this.loadingIndicator.appendChild(B);new Insertion.Top(this.container,this.loadingIndicator)}}.bind(this),this.timeout)},loadingComplete:function(){if(this.loadingIndicator){if(this.loadingIndicator.timer){window.clearTimeout(this.loadingIndicator.timer)}if(this.loadingIndicator&&this.loadingIndicator.parentNode){Element.remove(this.loadingIndicator)}this.loadingIndicator=null}else{return true}}};

var slider_handle='<span style="text-align:center;padding:0 10px;">| | |</span>';Slider=function(H,G,A,F,B,D,E){Object.extend(this,E||{});this.container=document.createElement("div");Element.setStyle(this.container,"width",F+"px");Element.addClassName(this.container,"slider");this.obj=document.createElement("div");this.handle=document.createElement("span");this.handle.innerHTML=slider_handle;H.appendChild(this.container);this.container.appendChild(this.obj);this.obj.appendChild(this.handle);this.mousedown=0;this.lastPos=0;this.min=G;this.max=A;this.input=B;Event.observe(this.obj,"mousedown",this.mdown.bindAsEventListener(this));Event.observe(document.body,"mouseup",this.mouseup.bindAsEventListener(this));Event.observe(this.input,"change",this.inputChange.bindAsEventListener(this));var C=parseInt(D);window.setTimeout(function(){this.set(C)}.bind(this),100)};Slider.prototype={change:function(A){if(this.onChange){this.onChange(A)}},width:function(){return parseInt(Element.getWidth(this.obj))-parseInt(Element.getWidth(this.handle))-8},mousemove:function(C){if(this.mousedown!=0){var A=C.pageX-this.lastPos;var B=this.width();this.lastPos=C.pageX;if(A){if(this.handle.getStyle("marginLeft")){A+=parseInt(this.handle.getStyle("marginLeft"))}if(A>B){A=B}if(A<0){A=0}this.handle.setStyle({marginLeft:(A+"px")});this.input.value=parseInt(((A/B)*(this.max-this.min))+this.min)}C.preventDefault()}},mouseup:function(A){if(this.mousedown==1){this.mousedown=0;Event.stopObserving(document.body,"mousemove",this.mousemove.bindAsEventListener(this));this.change(this.input.value)}},mdown:function(C){var B=this.width();this.mousedown=1;Event.observe(document.body,"mousemove",this.mousemove.bindAsEventListener(this));this.lastPos=C.pageX;var A=parseInt(this.lastPos-this.obj.cumulativeOffset().left-(this.handle.getWidth()/2));if(A){if(A>B){A=B}if(A<0){A=0}this.handle.setStyle({marginLeft:(A+"px")})}this.input.value=parseInt(((A/B)*(this.max-this.min))+this.min);C.preventDefault()},inputChange:function(B){if(this.input.value){var A=parseInt(this.input.value+String.fromCharCode(B.keyCode));this.set(A)}},set:function(B){if(B>this.max){B=this.max}if(B<this.min){B=this.min}var A=parseInt(((B-this.min)/(this.max-this.min))*(this.width()));if(A){this.handle.setStyle({marginLeft:(A+"px")})}this.input.value=B;this.change(this.input.value)},refresh:function(){this.set(parseInt(this.input.value))}};