// JavaScript Document
// EffToNum(): Convert Effective intrest rate into Nominal intrest rate
function EffToNom(eff,C,F) {
   var nom;
//   	var eff;
    
    //change from annual effective to monthly nominal
   	nom = Math.pow(1 + eff, 1/(12/F)) - 1;
    nom *= 12;
    return nom;
}
function zp(n){
	return n<10?("0"+n):n;
}
function insertDate(t,format){
	var now=new Date();
	var DD=zp(now.getDate());
	var MM=zp(now.getMonth()+1);
	var YYYY=now.getFullYear();
	var YY=zp(now.getFullYear()%100);
	format=format.replace(/DD/,DD);
	format=format.replace(/MM/,MM);
	format=format.replace(/YYYY/,YYYY);
	format=format.replace(/YY/,YY);
	t.value=format;
}
function GetMyChar(selection)
{
		var chr = event.keyCode;
		if (chr == 85)
		{
			switch (selection)
			{
   				case "amount":
					var amount = document.getElementById('amount');
					amount.value = "Unknown";
    			break;
   				case "rate":
					var rate= document.getElementById('rate');
					rate.value = "Unknown"; 
    			break;
    			case "payment":
					var payment = document.getElementById('payment');
					payment.value = "Unknown";  		
   				break;
    			case "term":
					var term = document.getElementById('term');
					term.value = "Unknown";
    			break;
    	   	   	
				default: // unknown value -- do nothing
				break;
			}
			event.keyCode = 0;
			event.returnValue=false;
		}		
}
var objPrintWindow;
var calcOnly;
function amortPopup(calcOnly)
{
	var strTitle, strDate, strAmount, strRate, strPayment, strTerm, strFreq, strComp, strMeth, strTermFactor, url, h, w;
		strTitle = document.getElementById("title").value;
		strDate = document.getElementById("date").value;
		strAmount = document.getElementById("amount").value;
		strRate = document.getElementById("rate").value;
		strPayment = document.getElementById("payment").value;
		strTerm = document.getElementById("term").value;
		var edNum = document.getElementById("frequency").selectedIndex;
		var edFreq = document.getElementById('frequency').options[edNum ];
		strFreq = edFreq.text;
		var edNum1 = document.getElementById("compounding").selectedIndex;
		var edComp = document.getElementById('compounding').options[edNum1 ];
		strComp = edComp.text;
		var edNum2 = document.getElementById("method").selectedIndex;
		var edMeth = document.getElementById('method').options[edNum2 ];
		strMeth = edMeth.text;
		

              

		if (strDate == "Unknown")
			strDate = "";
		if (strAmount == "Unknown")
			strAmount = "";	
		if (strRate == "Unknown")
			strRate = "";	
		if (strPayment == "Unknown")
			strPayment = "";
		if (strTerm == "Unknown")
			strTerm = "";		
		if (strFreq == "Monthly")
			strTermFactor = 12;
		else if (strFreq == "Quarterly")
			strTermFactor = 4;
		else if (strFreq == "Annually")
			strTermFactor = 1;
		if (strComp == "Monthly")
			strCompFactor = 12;
		if (strComp == "Quarterly")
			strCompFactor = 4;
		if (strComp == "Annually")
			strCompFactor = 1;
		if (strComp == "Daily")
			strCompFactor = 365;	
		if (strMeth == "No interest")
		{
    		var rate= document.getElementById('rate');
    		rate.value = 0;
    		strRate = 0;
    		strRate = strRate + ''
    	}
      	else if (strRate == "Unknown")
			strRate = "" + '';
		if (strMeth == "Interest only" && strRate != "")
		{		
			//strPayment = "";
		}
		
		
		if (strPayment !="" && strAmount != "" && strTerm != "" && strRate != "")
		{
	
		}
		else if (strRate == "" && strAmount != "" && strPayment != "" && strTerm != "")
		{
			if (strMeth == "Normal")
			{
				strRate = calc_rate(strAmount , strTerm , strPayment, strCompFactor, strTermFactor, strMeth);
				strRate = roundNumber(strRate * strTermFactor , 9);	
			}
			else if (strMeth == "Interest only")
			{
				strRate = strPayment/strAmount;
				strRate = EffToNom(strRate, strCompFactor, strTermFactor)*100;
				strRate = roundNumber(strRate , 9);
			}
			else if (strMeth == "No interest")
				strRate = 0;
			else
				strRate = "Unknown";
				
			if (strRate == 0)
			{
				alert("Interest rate can not be determined - term is too short, or payment is too low. Try again.");
				strRate = "";
				return;
			}
		}
		else if (strAmount == ""  && strRate != "" && strPayment != "" && strTerm != "")
		{
			if (strRate != 0)
			{

				J = calc_compound_rate_per_period(strRate/100,strCompFactor,strTermFactor, strMeth);
				if (strMeth == "Interest only")
				{
					strAmount = strPayment / J 
				}
				else
				{
					strAmount = calc_prin(strPayment, J, strTerm);				
				}
			}
			else if (strMeth == "No interest")
			{
				strAmount = strTerm * strPayment;
				
			}
			else
				strAmount = 0;
			strAmount = CurrencyFormatted(strAmount);
		}
		else if (strTerm == ""  && strAmount != "" && strPayment != "" && strRate != "")
		{
			if (strRate != 0)
			{
				
				if (strMeth == "Interest only")
				{
					strTerm = 1;
				}
				else
				{				
					J = calc_compound_rate_per_period(strRate/100,strCompFactor,strTermFactor,strMeth);
					strTerm = calc_term(strAmount, J, strPayment);
					if (strTerm == "")
					{
						alert("Term can not be determined - rate is too high, or payment is too low. Try again.");
						return;
					}
				}
			}
			else if (strMeth == "No interest")
			{
				strTerm = strAmount/strPayment;
				strTerm = roundNumber(strTerm, 0);
			}
			else
				strTerm = 0;
		}
		else if (strPayment == "" && strAmount != "" && strTerm != "" && strRate != "")
		{
			if (strRate != 0)
			{
				J = calc_compound_rate_per_period(strRate/100,strCompFactor,strTermFactor,strMeth);
				if (strMeth == "Interest only")
				{
					strPayment= strAmount * J;
					strPayment= CurrencyFormatted(strPayment);
					
				}
				else
					strPayment = calc_pymt(strAmount, J, strTerm, strCompFactor, strTermFactor, strMeth);
			
			}
			else if (strMeth == "No interest")
			{
				strPayment = strAmount/strTerm;
				strPayment  = CurrencyFormatted(strPayment);
			}
			else
				strPayment = 0;
		}
		else
		{
			alert("Too many unknowns. Try again.");
			return;
		}
		if (strMeth == "Interest only")
		{
			J = calc_compound_rate_per_period(strRate/100,strCompFactor,strTermFactor,strMeth);
			strPayment= strAmount * J;
			strPayment= CurrencyFormatted(strPayment);
		}

		document.getElementById("title").value = strTitle;
		document.getElementById("date").value = strDate;
		document.getElementById("amount").value = strAmount;
		document.getElementById("rate").value = strRate;
		document.getElementById("payment").value = strPayment;
		document.getElementById("term").value = strTerm;
		
      url = "amortization.asp?item1=" + strDate + "&item2=" + strAmount + "&item3=" + strRate + "&item4=" + strPayment + "&item5=" + strTerm + "&item6=" + strFreq + "&item7=" + strComp + "&item8=" + strMeth + "&item9=" + strTitle + "&item10=" + calcOnly;
      h = 600;
      w = 675;
	
   		if (calcOnly == "no")
   			Shadowbox.open({player: 'iframe', width: w, height: h, title: 'Amortization', content: url});
		else if (calcOnly == "print")
			objPrintWindow = window.open(url, "Printing", "status=0, height=" + h + ", width=" + w + ",toolbar=no,scrollbars=1,menubar=no");
    	return true; 
}
function CurrencyFormatted(amount)
{
	var i = amount+'';
	i = i.replace(/,/g,'');
	i = parseFloat(i);
	if(isNaN(i)) { i = 0.00; }
	var minus = '';
	if(i < 0) { minus = '-'; }
	i = Math.abs(i);
	i = parseInt((i + .005) * 100);
	i = i / 100;
	s = new String(i);
	if(s.indexOf('.') < 0) { s += '.00'; }
	if(s.indexOf('.') == (s.length - 2)) { s += '0'; }
	s = minus + s;
	return s;
}
function roundNumber(num, dec)
{
	var i = num+"";
	i = i.replace(/,/g,'');	
	i = parseFloat(i);
	var result = Math.round(i*Math.pow(10,dec))/Math.pow(10,dec);
	return result;
}
// Declaring valid date character, minimum year and maximum year
var dtCh= "/";
var minYear=1900;
var maxYear=2100;

function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag){
	var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++){   
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
function DaysArray(n) {
	for (var i = 1; i <= n; i++) {
		this[i] = 31
		if (i==4 || i==6 || i==9 || i==11) {this[i] = 30}
		if (i==2) {this[i] = 29}
   } 
   return this
}

function isDate(dtStr){
	var daysInMonth = DaysArray(12)
	var pos1=dtStr.indexOf(dtCh)
	var pos2=dtStr.indexOf(dtCh,pos1+1)
	var strMonth=dtStr.substring(0,pos1)
	var strDay=dtStr.substring(pos1+1,pos2)
	var strYear=dtStr.substring(pos2+1)
	strYr=strYear
	if (strDay.charAt(0)=="0" && strDay.length>1) strDay=strDay.substring(1)
	if (strMonth.charAt(0)=="0" && strMonth.length>1) strMonth=strMonth.substring(1)
	for (var i = 1; i <= 3; i++) {
		if (strYr.charAt(0)=="0" && strYr.length>1) strYr=strYr.substring(1)
	}
	month=parseInt(strMonth)
	day=parseInt(strDay)
	year=parseInt(strYr)
	if (pos1==-1 || pos2==-1){
		alert("The date format should be : mm/dd/yyyy")
		return false
	}
	if (strMonth.length<1 || month<1 || month>12){
		alert("Please enter a valid month")
		return false
	}
	if (strDay.length<1 || day<1 || day>31 || (month==2 && day>daysInFebruary(year)) || day > daysInMonth[month]){
		alert("Please enter a valid day")
		return false
	}
	if (strYear.length != 4 || year==0 || year<minYear || year>maxYear){
		alert("Please enter a valid 4 digit year between "+minYear+" and "+maxYear)
		return false
	}
	if (dtStr.indexOf(dtCh,pos2+1)!=-1 || isInteger(stripCharsInBag(dtStr, dtCh))==false){
		alert("Please enter a valid date")
		return false
	}
return true
}
function checkForNum(selection)
{
	var field = document.getElementById(selection);
	var check = true;
	var value = field.value; //get characters
	//check that all characters are digits, ., -, or ""
	for(var i=0;i < field.value.length; ++i)
	{
		var new_key = value.charAt(i); //cycle through characters
		if(((new_key < "0") || (new_key > "9")) && !(new_key == ""))
		{
			if (!new_key == ".")
			{
				check = false;
				i = field.value.length;
			}
			else if (field.value.length == 1)
			{
				check = false;
				i = field.value.length;
			}			
		}
	}
   //apply appropriate colour based on value
   	if(!check & field.value != "Unknown")
	{
		alert("Please enter a number or and amount")
		return false;
	}
	else
	{
		return true;
	}
}

var mikExp = /[$\\@\\\#%\^\&\*\(\)\[\]\+\_\{\}\`\~\=\|]/;
function dodacheck(val) {
	var strPass = val.value;
	var strLength = strPass.length;
	var lchar = val.value.charAt((strLength) - 1);
	if(lchar.search(mikExp) != -1) {
		var tst = val.value.substring(0, (strLength) - 1);
		val.value = tst;
   	}
}
function doanothercheck(form) {
	if(form.value.length < 1) {
		alert("Please enter something.");
		return false;
	}
	if(form.value.search(mikExp) == -1) {
		alert("Correct Input");
		return false;
	}
	else {
		alert("Sorry, but the following characters\n\r\n\r@ $ % ^ & * # ( ) [ ] \\ { + } ` ~ =  | \n\r\n\rare not allowed!\n");
		form.select();
		form.focus();
		return false;
	}
	alert("Correct Input");
	return false;
}

function blurField(selection)
{
	switch (selection)
	{
		case "date":
			var date= document.getElementById('date');
    		if(date.value == '')
    		{
        		date.value = 'Unknown';
    		}
    		else if (isDate(date.value)==false)
    		{
				return false
			}
    		return true
    	break;
   		case "amount":
			var amount = document.getElementById('amount');
    		if(amount.value == '' | amount.value == 'Unknown' | amount.value == 0)
      	 	{
   		   		amount.value = 'Unknown';
   			}
   			else if (checkForNum('amount'))
				amount.value = CurrencyFormatted(amount.value);
    	break;
   		case "rate":
			var rate= document.getElementById('rate');
    		if(rate.value == '' | rate.value == 'Unknown')
    		{
        		rate.value = 'Unknown';
    		}
    		else if (checkForNum('rate'))
    		{
 				rate.value = roundNumber(rate.value,9);
 			}  
    	break;
    	case "payment":
			var payment = document.getElementById('payment');
    		if(payment.value == '' | payment.value == 'Unknown')
    		{
        		payment.value = 'Unknown';
   			}
    		else if (checkForNum('payment'))
    		{
 				payment.value = CurrencyFormatted(payment.value);
			}   		
   		break;
    		case "term":
			var term = document.getElementById('term');
    		if(term.value == '' | term.value == 'Unknown' | term.value == 0)
    		{
        		term.value = 'Unknown';
    		}
    		else if (checkForNum('term'))
				term.value = Math.round(term.value);
    	break;
 
		default: // unknown value -- do nothing
		break;
	}
}
function focusField(selection)
{
    var date;
    var amount;
    var rate;
    var payment;
    var term;
	switch (selection)
	{
		
		case "date":
			date = document.getElementById('date');
			if (date.value == '' | date.value == 'Unknown')
				insertDate(date,'MM/DD/YYYY');
		break;	
		case "amount":
    		amount = document.getElementById('amount');
    		if(amount.value == '')
    			amount.value = '';
    		date = document.getElementById('date');
    		if(date.value == '')
    			date.value = 'Unknown';
      	break;
		case "rate":
    		rate = document.getElementById('rate');
    		if(rate.value == '')
    			rate.value = '';
    		date = document.getElementById('date');
    		if(date.value == '')
    			date.value = 'Unknown';
      		amount = document.getElementById('amount');
    		if(amount.value == '')
    			amount.value = 'Unknown';
    	break;
		case "payment":
    		payment = document.getElementById('payment');
    		if(payment.value == '')
    			payment.value = '';
    		date = document.getElementById('date');
    		if(date.value == '')
    			date.value = 'Unknown';
      		rate = document.getElementById('rate');	
    		if(rate.value == '')
    			rate.value = 'Unknown';
      		amount = document.getElementById('amount');
    		if(amount.value == '')
    			amount.value = 'Unknown';   			
    	break;
		case "term":
    		term = document.getElementById('term');
    		if(term.value == '')
    			term.value = '';
    		date = document.getElementById('date');
    		if(date.value == '')
    			date.value = 'Unknown';
      		payment = document.getElementById('payment');	
    		if(payment.value == '')
    			payment.value = 'Unknown';   			
     		rate = document.getElementById('rate');	
    		if(rate.value == '')
    			rate.value = 'Unknown';
      		amount = document.getElementById('amount');
    		if(amount.value == '')
    			amount.value = 'Unknown';    			
    	break;
    	    	
		default: // unknown value -- do nothing
		break;
	}    	
}
function closeChild()
{
	if (objPrintWindow)
		objPrintWindow.close();
}

