function getQueryVariable(variable) 
{
  var query = window.location.search.substring(1);
  var vars = query.split("&");
  
  for (var i=0;i<vars.length;i++) 
  {
    var pair = vars[i].split("=");
    if (pair[0] == variable) 
    {
      return pair[1];
    }
  } 
}


function getData()
{
	var currentMortgage = getQueryVariable("m");
	var currentRate = getQueryVariable("r");
	var currentDamping = getQueryVariable("d");
	
	var oInputMortgage = document.getElementById("mortgage");
	var oInputDamping = document.getElementById("damping");
	var oInputRate = document.getElementById("rate");
	var oInputCashdown = document.getElementById("cashdown");
	var oInputPurchasePrice = document.getElementById("purchaseprice");
	
	var regHTML = /\-/;
	
	if(currentMortgage && currentRate && currentDamping)
	{
		oInputMortgage.value = dollarFormat(currentMortgage);
		oInputDamping.value = currentDamping;
		oInputCashdown.value = 0;
		oInputPurchasePrice.value = dollarFormat(removeComma(currentMortgage));
		
		sRateDecode = currentRate.replace(regHTML, ".");
		oInputRate.value = sRateDecode;
		
		calculate();
	}
}

function checkPurchasePrice()
{
	var oInputCashdown = document.getElementById("cashdown");
	var oInputPurchasePrice = document.getElementById("purchaseprice");
	
	var oCheckLoan = document.getElementById("loanInsurance");
	
	var oSpanLoanInsurance = document.getElementById("spanLoanInsurance");
	
	var iCashdown = removeComma(oInputCashdown.value);
	var iPurchasePrice = removeComma(oInputPurchasePrice.value);
	
	var regCashdown = /\d/i;
	var regPurchasePrice = /\d/i;
	
	if(iPurchasePrice)
	{
		oCheckLoan.checked = true;
		oSpanLoanInsurance.className = "contentTextBlue";
		resPurchasePrice = regPurchasePrice.test(iPurchasePrice);
		
		if(resPurchasePrice)
		{
			if(parseInt(iPurchasePrice) > 0)
			{
				
				currentPurchaseValue = removeComma(oInputPurchasePrice.value);
				oInputPurchasePrice.value = dollarFormat(currentPurchaseValue);
				
				if(iCashdown)
				{	
					resCashdown = regCashdown.test(iCashdown);
									
					if(resCashdown)
					{						
						checkLoan();
					}
					else
					{
						cashDownValueError();
					}
				}
			}
			else
			{
				purchasePriceError();	
			}
		}
		else
		{
			purchasePriceError();
		}
	}
}

function checkLoan()
{
	var oInputCashdown = document.getElementById("cashdown");
	var oInputPurchasePrice = document.getElementById("purchaseprice");
	var oInputMortgage = document.getElementById("mortgage");
	
	var oSpanLoanInsurance = document.getElementById("spanLoanInsurance");
	
	var oCheckLoan = document.getElementById("loanInsurance");
	
	var regCashdown = /\d/;
	var regPurchasePrice = /\d/;
	
	var iCashdown = removeComma(oInputCashdown.value);
	var iPurchasePrice = removeComma(oInputPurchasePrice.value);
	var iFinancing = 0;
					
	if(iCashdown)
	{
		oCheckLoan.checked = true;
		
		resCashdown = regCashdown.test(iCashdown);
		
		if(resCashdown)
		{
			if(iPurchasePrice)
			{
				resPurchasePrice = regPurchasePrice.test(iPurchasePrice);
					
				if(resPurchasePrice)
				{
					if(parseInt(iCashdown) < parseInt(iPurchasePrice))
					{
						iFinancing = (parseInt(iCashdown) / parseInt(iPurchasePrice)) * 100;
					
						if(iFinancing < 25)
						{
							oSpanLoanInsurance.className = "contentTextBlue";
							oCheckLoan.checked = true;
							oCheckLoan.disabled = true;
						}else
						{
							oSpanLoanInsurance.className = "contentTextDisabled";
							oCheckLoan.checked = false;
							oCheckLoan.disabled = true;
						}
						
						currentCashdownValue = removeComma(oInputCashdown.value);
						oInputCashdown.value = dollarFormat(currentCashdownValue);
						
						oInputMortgage.value = parseInt(iPurchasePrice) - parseInt(iCashdown);
						currentMortgageValue = oInputMortgage.value;
						oInputMortgage.value = dollarFormat(currentMortgageValue);
						
						
					}
					else
					{
						cashDownValueError();
					}
				}
				else
				{
					purchasePriceError();
				}
			}
			else
			{
				purchasePriceError();
			}
		}
		else
		{
			cashDownValueError();
		}
	}

}

function calculate()
{
	var oInputMortgage= document.getElementById("mortgage");
	var oInputDamping = document.getElementById("damping");
	var oInputRate= document.getElementById("rate");
	var oInputCashdown = document.getElementById("cashdown");
	var oInputPurchasePrice = document.getElementById("purchaseprice");
	
	var oCheckLoan = document.getElementById("loanInsurance");
	
	var oHiddenMortgage = document.getElementById("cashdownMortgage");
	
	var iMortgageMin = 10000;
	var iMortgageMax = 1000000;
	var iRateMin = 0;
	var iRateMax = 25.0;
	var iDampingMin = 1;
	var iDampingMax = 40;
	var iFinancing = 0;

	var iMortgage = removeComma(oInputMortgage.value);
	var iRate = oInputRate.value;
	var iDamping = oInputDamping.value;
	var iCashdown = removeComma(oInputCashdown.value);
	var iPruchasePrice = removeComma(oInputPurchasePrice.value);
	
	var regMortgage = /\d{1,}/i;
	var regRate = /\d{1,2}[.,]\d{1,2}/i;
	var regDamping = /\d{1,2}/i;
	var regCashdown = /\d/i;
	var regPurchasePrice = /\d/;
	var regComma = /[,]/;
	
	resMortgage = regMortgage.test(iMortgage);
	resRate = regRate.test(iRate);
	resDamping = regDamping.test(iDamping);
	resCashdown = regCashdown.test(iCashdown);
	resPurchasePrice = regPurchasePrice.test(iPruchasePrice);
	resComma = regComma.test(iRate);

	if(resComma)
	{
		iRate = parseInt(iRate.replace(regComma, "."));
	}
	
		
	if(iPruchasePrice && iPruchasePrice > 0)
	{		
		if(resPurchasePrice)
		{
			if(iCashdown && iCashdown >= 0)
			{
				if(resCashdown)
				{
					if(iMortgage)
					{
						if(resMortgage)
						{
							if(parseInt(iMortgage) >= iMortgageMin && parseInt(iMortgage) <= iMortgageMax)
							{
								if(resRate)
								{
									if(iRate >= iRateMin && iRate <= iRateMax)
									{
										if(resDamping)
										{
											if(parseInt(iDamping) >= iDampingMin && parseInt(iDamping) <= iDampingMax)
											{
												if(oCheckLoan.checked)
												{
													if(resPurchasePrice)
													{
														if(resCashdown && iCashdown)
														{
															if(parseInt(iCashdown) <= parseInt(iPruchasePrice) && parseInt(iCashdown) >= 0)
															{
																iFinancing = (parseInt(iCashdown) / parseInt(iPruchasePrice)) * 100;
																
																if(iFinancing >= 20 && iFinancing < 25)
																{
																	iMortgage = parseInt(iMortgage) + (parseInt(iMortgage)*(1.0/100));
																}
																
																if(iFinancing >= 15 && iFinancing < 20)
																{
																	iMortgage = parseInt(iMortgage) + (parseInt(iMortgage)*(1.75/100));
																}
																
																if(iFinancing >= 10 && iFinancing < 15)
																{
																	iMortgage = parseInt(iMortgage) + (parseInt(iMortgage)*(2.0/100));
																}
																
																if(iFinancing >= 0 && iFinancing < 10)
																{
																	iMortgage = parseInt(iMortgage) + (parseInt(iMortgage)*(2.75/100));
																}
																
																oHiddenMortgage.value = iMortgage;
															}
															else
															{
																cashDownValueError();
															}
														}
														else
														{
															cashDownError();
														}
													}
													else
													{
														purchasePriceError();
													}
												}
												
												compilationPay();
											}
											else
											{
												dampingError();
											}
										}
										else
										{
											dampingError();
										}
									}else
									{
										rateError();
									}
								}
								else
								{
									rateError();
								}
							}
							else
							{
								mortgageValueError();
							}
						}
						else
						{
							mortgageError();
						}
					}
					else
					{
						mortgageError();
					}
				}
				else
				{
					cashDownValueError();
				}
			}
			else
			{
				cashDownError();
			}
		}
		else
		{
			purchasePriceError();
		}
	}
	else
	{
		purchasePriceError();
	}
}

function compilationPay()
{
	var oInputMortgage= document.getElementById("mortgage");
	var oInputDamping = document.getElementById("damping");
	var oInputRate= document.getElementById("rate");
	
	var oCheckLoan = document.getElementById("loanInsurance");
	
	var oHiddenMortgage = document.getElementById("cashdownMortgage");
	
	var oSpanMonthly = document.getElementById("spanMonthly");
	var oSpanAccelWeek = document.getElementById("spanAccelWeek");
	var oSpanWeek = document.getElementById("spanWeek");

	var regComma = /[,]/;
	
	var iMortgage = 0;
	var iDamping = oInputDamping.value;
	var iRate = oInputRate.value;

	resComma = regComma.test(iRate);

	if(resComma)
	{
		iRate = iRate.replace(regComma, ".");
		iRate = iRate/100;
		
	}
	else
	{
		iRate = iRate/100;
	}
	
	if(oCheckLoan.checked)
	{
		iMortgage = parseInt(oHiddenMortgage.value);
	}
	else
	{
		iMortgage = removeComma(oInputMortgage.value);
		iMortgage = parseInt(iMortgage);
	}
	
	if (iMortgage && iRate && iDamping ) 
	{
		var compound = 2/12;
		var monTime = iDamping * 12;
		var yrRate = iRate/2;
		
		var rdefine = Math.pow((1.0 + yrRate),compound)-1.0;
		var comfact = Math.pow((1.0 + rdefine),monTime);
		
		var payment = (iMortgage*rdefine * comfact) /  (comfact - 1.0);
		
		var paymentByMonth = payment;
					
		var paymentAccelBi = payment / 2;
		
		var paymentAccelWeek = paymentAccelBi / 2;
				
		oSpanMonthly.innerHTML = roundPen(paymentByMonth,2);
		oSpanAccelWeek.innerHTML = roundPen(paymentAccelBi,2);
		oSpanWeek.innerHTML = roundPen(paymentAccelWeek,2);
	}
}

function sCalcPay(iPayFreq,iIRate,iMortgage,iAmort) 
{
	var IRF = (Math.pow(1+(iIRate/2),(2/iPayFreq)))-1; 
	var PAYFREQUSE = iAmort * iPayFreq;
	var iPaymentRet = iMortgage*(IRF/(1-(1/Math.pow((IRF+1),PAYFREQUSE))));		
	return iPaymentRet;
}

function roundPen(n,num)
{
	if(n > 0)
	{
		var nums = num*1.0;
		if(num==2)
		{
			pennies = n*100;
		}
		if(num==3)
		{
			pennies = n*1000;
		}
		pennies = Math.ceil(pennies);
		strPennies = "" + pennies;
		len = strPennies.length;
		return strPennies.substring(0, len - nums) + "." + strPennies.substring(len - nums, len);
	}
	else 
	{
		return 0;
	}
}

function dollarFormat(iValue) 
{
	var tempValue1 = "";
	var tempValue2 = "";
		
	var count = 0;
	
	for(var a = iValue.length-1; a >= 0; a--) 
	{
		
		var currentChar = iValue.charAt(a);
		if (count == 3) 
		{
			tempValue1 += ",";
			tempValue1 += currentChar;
			count = 1;
			continue;
		}
		else 
		{
			tempValue1 += currentChar;
			count ++;
		}
	}
	
	for(var b = tempValue1.length-1; b >= 0; b--) 
	{
		var currentChar = tempValue1.charAt(b);
		tempValue2 += currentChar;
	}
	
	return tempValue2;
}

function removeComma(sValue)
{
	var regCOMMA = /\,/g;
	
	return sValue.replace(regCOMMA, "");
	
}

function rateError()
{
	var oInputRate = document.getElementById("rate");

	alert(sCalculRate);
	oInputRate.focus();
}

function mortgageError()
{
	var oInputMortgage = document.getElementById("mortgage");

	alert(sWarning);
	oInputMortgage.focus();
}

function mortgageValueError()
{
	var oInputMortgage = document.getElementById("mortgage");

	alert(sMsg);
	oInputMortgage.focus();
}

function dampingError()
{
	var oInputDamping = document.getElementById("damping");
	
	alert(sDamping);
	oInputDamping.focus();
}

function cashDownValueError()
{
	var oInputCashdown = document.getElementById("cashdown");
	
	alert(sCashdownValue);
	oInputCashdown.focus();
}

function cashDownError()
{
	var oInputCashdown = document.getElementById("cashdown");
	
	alert(sCashdown);
	oInputCashdown.focus();
}

function purchasePriceError()
{
	var oInputPurchasePrice = document.getElementById("purchaseprice");
	
	alert(sPurchase);
	oInputPurchasePrice.focus();
}
