var ficalculator = ficalculator || {};
ficalculator.ui = ficalculator.ui || {};

function _initFiCalculator() {
	var fic = new ficalculator.ui.Calculator( {
		///testing/ito
		baseurl_jsonApi: "/ficalculator/"
	});
	return fic;
}

ficalculator.ui.Calculator = function(config) {
	this.baseurl = config.baseurl_jsonApi;
	this.callurl = this.baseurl + "json-rentalinfo.php";
	//
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
	    http_request = new XMLHttpRequest();
	} else if (window.ActiveXObject) { // IE
	    try {
	        http_request = new ActiveXObject("Msxml2.XMLHTTP");
	    } catch (e) {
	        try {
	            http_request = new ActiveXObject("Microsoft.XMLHTTP");
	        } catch (e) {}
	    }
	}
	if (!http_request) {
		alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
		return false;
	}	
	//
	this.httpreq = http_request;
	this.rentaldata = null;
	this.reqerror = null;
}

ficalculator.ui.Calculator.prototype.toFixed = function(n) {
 	var nf=(n.toFixed)?n.toFixed(2):Math.floor(n)+"."+(100+Math.round((n-Math.floor(n))*100)+"").substr(1,2);
	return nf;
}

ficalculator.ui.Calculator.prototype.getXMLHttpRequest = function() {
	return this.httpreq;
}

ficalculator.ui.Calculator.prototype.getProductData = function(product_id) {
	var json_rental  = null;
	var response_text= null;
	//var window_id 	 = null;
	var reqerror		 = null;
	var http_request = this.getXMLHttpRequest();
	//
	rentalDataCallback = function() {
		if(document.getElementsByTagName('form')[0]) {						
		  // Clipboard
		  if(!document.getElementById('ficdata')) {
				var myform = document.getElementsByTagName('form')[0];
				var myinput = document.createElement('input');
				myinput.setAttribute('id','ficdata');			
				myinput.setAttribute('type','hidden');
				myinput.setAttribute('value','');
				myform.appendChild(myinput);
			}
		}
		//
		if(http_request.readyState == 4) {
      if(http_request.status == 200 || http_request.status == 301) {
      	//
    		response_text = http_request.responseText.replace(/\s/g,"");
    		//
				if(response_text != "" && isNaN(response_text)) {
					//
					if(response_text.error) {
						this.reqerror = reqerror;
						alert("Error: " + response_text.error);
					}
					else {
						document.getElementById('ficdata').value = response_text;
						//
						return true;
					}
					//
					//window.clearTimeout(window_id);
        }
      } else {
          alert('Error [' + http_request.status + ':' + http_request.readyState + ']');
      }
		}				
		return false;
	}	
	//
	abort = function() {
		http_request.abort();		
	}	
	//
  try {  	
  	this.httpreq.open('GET', this.callurl + "?update=" + new Date() + "&id="+product_id, true);
  	this.httpreq.onreadystatechange = rentalDataCallback; 
  	this.httpreq.send(null);
  	//
  	//window_id = window.setTimeout('abort()',1000);
  } catch(e) {
  		return false;
  }	  
  //
  return true;	
}

ficalculator.ui.Calculator.prototype.getRentalInfo = function() {
	var json_rentalInfo = null;
	//
	if(document.getElementById('ficdata') && document.getElementById('ficdata').value != "")
		json_rentalInfo = eval('(' + document.getElementById('ficdata').value + ')');	
	return json_rentalInfo;
}

var url_dataapi	 = "/testing/ito/ficalculator/";
var http_request = false;
//var json_rentalData = Array;

function _fi_init_XmlHttp() {
	//
	if (window.XMLHttpRequest) { // Mozilla, Safari,...
	    http_request = new XMLHttpRequest();
	    if (http_request.overrideMimeType) {
	        //http_request.overrideMimeType('text/xml');
	    }
	} else if (window.ActiveXObject) { // IE
	    try {
	        http_request = new ActiveXObject("Msxml2.XMLHTTP");
	    } catch (e) {
	        try {
	            http_request = new ActiveXObject("Microsoft.XMLHTTP");
	        } catch (e) {}
	    }
	}
	//
	if (!http_request) {
		alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
	}		
	return true;
}

//_fi_init_XmlHttp();

function _fi_getXmlHttp() {
	//
	return http_request;
}

function _fi_rentalData_callback() {
	httpreq = _fi_getXmlHttp();
	//
  if(httpreq.readyState == 4) {
      if(httpreq.status == 200 || httpreq.status == 301) {
    		responseText = httpreq.responseText.replace(/\s/g,"");
				if(responseText != "" && 
					 isNaN(responseText)) {
					//
					if(responseText.error) {
						json_rentalData = false;
						alert("Error: " + responseText.error);
					}
					else
						json_rentalData = eval('(' + responseText + ')');
						alert(json_rentalData);
					//
					return true;
        }
      } else {
          alert('Error [' + httpreq.status + ':' + httpreq.readyState + '].');
      }
	}
	return false;	
}

function _fi_getRentalData() {
	return json_rentalData;
}

function _fi_json_requestRentalData(article) {
	httpreq = _fi_getXmlHttp();
	//
  try {
  	callurl = url_dataapi + "json-rentalinfo.php";
  	httpreq.open('GET', callurl + "?update=" + new Date() + "&id="+article, true);
  	httpreq.onreadystatechange = _fi_rentalData_callback; 
  	httpreq.send(null);
  } catch(e) {
  		return false;
  }	
  return true;
}

function _fi_toFixed(wert){
 var wert=(wert.toFixed)?wert.toFixed(2):
  Math.floor(wert)+"."+
(100+Math.round((wert-Math.floor(wert))*100)+"").substr(1,2);
return wert;
}
                   
function _fi_monthlyRateCalculator(
	_laufzeit,
	_kaufpreis,
	_anzahlung,
	_zinssatz
) {
	_bOk = true;	
	//
	if(!_laufzeit || isNaN(_laufzeit)) {
		alert("Laufzeit bitte eintragen!");
		return false;
	}
	if(!_kaufpreis || isNaN(_kaufpreis)) {
		alert("Kaufpreis bitte eintragen!");
		return false;
	}			
	if(!_anzahlung) {	// && isNaN(_anzahlung)		
		_anzahlung = 0.0;
	}
	if(!_zinssatz) {	//  && isNaN(_zinssatz)
		if(_zinssatz != 0) {
			alert("Zinssatz bitte angeben!");
			return false;
		}
	}
	//	
	if(_bOk == true) {
		var _priceTotal = _fi_calculate_totalPrice(_kaufpreis,_anzahlung);		
		if(!_priceTotal) {
			alert("Bitte Preis eintragen!");
			return false;
		}
		_monthlyRate = _fi_calculate_monthlyRate(_laufzeit,_zinssatz,_priceTotal);										
		_monthlyRate = _fi_toFixed(_monthlyRate);	
		// 
		return _monthlyRate;
	}
	//
	return false;
}		

function _fi_calculate_totalPrice(kaufpreis,anzahlung) {
	var _priceTotal = 0.0;
	var _buyprice = parseFloat(kaufpreis);
	var _prepayment = parseFloat(anzahlung);
	//
	if(_buyprice <= 0.0 || isNaN(_buyprice))
		return false;			
	if(_prepayment >= 0.0 && _prepayment < _buyprice) {
		_priceTotal = _buyprice - _prepayment;				
	}	
	//alert('Total:' + _priceTotal + " - " + _prepayment + " + " + _buyprice);
	//		
	return _fi_toFixed(_priceTotal);
}

//
function _fi_calculate_monthlyRate(laufzeit,zinssatz,kaufpreis) {
	//var kaufpreis = _fi_toFixed(parseFloat(kaufpreis));
	var kaufpreis = parseFloat(kaufpreis);
	//
	if(zinssatz <= 0.00) {
		//
		var _monthlyRate = kaufpreis / laufzeit;		
	} else {	
		//
		//var zinssatz = _fi_toFixed(parseFloat(zinssatz));
		var zinssatz = parseFloat(zinssatz);
		var _zns = (zinssatz/100.0) + 1.0;			
		var _mzf = Math.pow(_zns,1/12);
		var _tmp = Math.pow(_mzf,laufzeit);
		var _monthlyRate = kaufpreis * (_tmp / (_tmp-1.0)) * (_mzf-1.0);
	}
	//
	return _monthlyRate;
}

/*function _fi_calculate_debtAfter(kaufpreis,monthlyRate,month) {
	var debt = kaufpreis;
	for(idx=0; idx < month; idx++) {
		
	}
	return debt;
}*/
