// (c) 2010 websteil.

scms.namespace("immo");scms.immo.calc={parts:[],init:function()
{var priceContainer=document.getElementById("calcPrice");if(priceContainer.value.indexOf(",")!=-1&&priceContainer.value.indexOf(".")!=-1){priceContainer.value=priceContainer.value.replace(".","");priceContainer.value=priceContainer.value.replace(",",".");}
this.price=parseFloat(priceContainer.value);priceContainer.value=this.getNumber(this.price,"unit");priceContainer.calcInstance=this;priceContainer.onclick=function()
{var inst=this.calcInstance;this.value=inst.getNumber(inst.parseNumber(this.value),null,"user");};priceContainer.onblur=function()
{var inst=this.calcInstance;inst.price=inst.parseNumber(this.value);this.value=inst.getNumber(inst.price,"unit");inst.run();};this.resultContainer=document.getElementById("calcTotal");var ratios=YAHOO.util.Dom.getElementsByClassName("calc-r");for(var i=0;i<ratios.length;i++){this.parts.push(scms.immo.calc.ratio.factory(ratios[i]));}
var add=YAHOO.util.Dom.getElementsByClassName("calc-add");for(var i=0;i<add.length;i++){this.parts.push(new scms.immo.calc.add(add[i]));}
scms.immo.calc.finance.init();},run:function()
{var price=this.price;for(var i=0;i<this.parts.length;i++){var c=this.parts[i].calculate(this.price);if(!isNaN(c)){price+=c;}}
scms.immo.calc.finance.run(price);this.resultContainer.innerHTML=this.getNumber(price,"unit");},numberFormat:function(number,decimals,dec_point,thousands_sep)
{if(!number){return"";}
var exponent="";var numberstr=number.toString();var eindex=numberstr.indexOf("e");if(eindex>-1){exponent=numberstr.substring(eindex);number=parseFloat(numberstr.substring(0,eindex));}
if(decimals!=null){var temp=Math.pow(10,decimals);number=Math.round(number*temp)/temp;}
var sign=number<0?"-":"";var integer=(number>0?Math.floor(number):Math.abs(Math.ceil(number))).toString();var fractional=number.toString().substring(integer.length+sign.length);dec_point=dec_point!=null?dec_point:".";fractional=decimals!=null&&decimals>0||fractional.length>1?(dec_point+fractional.substring(1)):"";if(decimals!=null&&decimals>0){for(i=fractional.length-1,z=decimals;i<z;++i){fractional+="0";}}
thousands_sep=(thousands_sep!=dec_point||fractional.length==0)?thousands_sep:null;if(thousands_sep!=null&&thousands_sep!=""){for(i=integer.length-3;i>0;i-=3){integer=integer.substring(0,i)+thousands_sep+integer.substring(i);}}
return sign+integer+fractional+exponent;},getNumber:function(number,type,format)
{if(!number){return"";}
if(!format||format=="display"){var str=this.numberFormat(number,2,",",".");}else{var str=this.numberFormat(number,2,",");}
if(type=="percent"){str+=" %";}else if(type=="unit"){str+=" EUR";}
return str;},parseNumber:function(string)
{string=string.replace(/EUR/g,"");string=string.replace(/%/g,"");string=string.replace(/\./g,"");string=string.replace(/,/g,".");return parseFloat(string);}};scms.immo.calc.inputElement=function(elm,options)
{var input=document.getElementById(elm);input.calcOptions=options;input.onclick=function()
{this.value=scms.immo.calc.getNumber(this.getFloat(),null,"user");};input.onblur=function()
{if(this.calcOptions.format=="unit"){this.value=scms.immo.calc.getNumber(this.getFloat(),"unit");}else if(this.calcOptions.format=="percent"){this.value=scms.immo.calc.getNumber(this.getFloat(),"percent");}else{this.value=scms.immo.calc.getNumber(this.getFloat());}
if(this.calcOptions.finish){this.calcOptions.finish();}};input.getFloat=function()
{return scms.immo.calc.parseNumber(this.value);};input.getNumber=function(isFloat)
{var value=isFloat?this.value:this.getFloat();if(this.calcOptions.format=="unit"){return scms.immo.calc.getNumber(value,"unit");}else if(this.calcOptions.format=="percent"){return scms.immo.calc.getNumber(value,"percent");}
return scms.immo.calc.getNumber(value);}
if(input.value.indexOf("%")!=-1||input.value.indexOf("EUR")!=-1){input.value=input.getNumber();}else{input.value=input.getNumber(true);}
return input;};scms.immo.calc.add=function(input)
{this.input=input;input.value=scms.immo.calc.getNumber(scms.immo.calc.parseNumber(input.value),"unit");input.onclick=function()
{this.value=scms.immo.calc.getNumber(scms.immo.calc.parseNumber(this.value),null,"user");};input.onblur=function()
{this.value=scms.immo.calc.getNumber(scms.immo.calc.parseNumber(this.value),"unit");scms.immo.calc.run();};};scms.immo.calc.add.prototype={calculate:function(price)
{return scms.immo.calc.parseNumber(this.input.value);}};scms.immo.calc.ratio={factory:function(parent)
{var base=YAHOO.util.Dom.getElementsByClassName("calc-ratio",null,parent)[0];var result=YAHOO.util.Dom.getElementsByClassName("calc-result",null,parent)[0];if(base.getElementsByTagName("input").length>0){return new scms.immo.calc.ratio.inputCnt(base.getElementsByTagName("input")[0],result);}else{return new scms.immo.calc.ratio.standardCnt(base,result);}}};scms.immo.calc.ratio.standardCnt=function(container,result)
{this.container=container;this.ratio=parseFloat(this.container.innerHTML);this.container.innerHTML=scms.immo.calc.getNumber(this.ratio,"percent");this.result=result;};scms.immo.calc.ratio.standardCnt.prototype={calculate:function(price)
{var c=(price/100)*this.ratio;this.result.innerHTML=scms.immo.calc.getNumber(c,"unit");return c;}};scms.immo.calc.ratio.inputCnt=function(input,result)
{this.result=result;this.input=input;if(input.value.indexOf("%")!=-1){input.value=scms.immo.calc.parseNumber(input.value);}
input.value=scms.immo.calc.getNumber(input.value,"percent");input.onclick=function()
{this.value=scms.immo.calc.getNumber(scms.immo.calc.parseNumber(this.value),null,"user");};input.onblur=function()
{this.value=scms.immo.calc.getNumber(scms.immo.calc.parseNumber(this.value),"percent");scms.immo.calc.run();};};scms.immo.calc.ratio.inputCnt.prototype={calculate:function(price)
{var c=(price/100)*scms.immo.calc.parseNumber(this.input.value);this.result.innerHTML=scms.immo.calc.getNumber(c,"unit");return c;}};scms.immo.calc.finance={init:function()
{this.equity=scms.immo.calc.inputElement("scCalcFinanceEquity",{format:"unit",finish:function(){scms.immo.calc.run();}});this.rate=scms.immo.calc.inputElement("scCalcFinanceRate",{format:"percent",finish:function(){scms.immo.calc.run();}});this.reRate=scms.immo.calc.inputElement("scCalcFinanceReRate",{format:"percent",finish:function(){scms.immo.calc.run();}});},run:function(price)
{var equity=this.equity.getFloat();var credit=price-equity;var creditContainer=document.getElementById("scCalcFinanceCredit");creditContainer.innerHTML=scms.immo.calc.getNumber(credit,"unit");var rate=this.rate.getFloat();var reRate=this.reRate.getFloat();var p=((credit/100)*(rate+reRate))/12;document.getElementById("scCalcFinanceResult").innerHTML=scms.immo.calc.getNumber(p,"unit");}};

