//----------------------------------------------------------------------------
//		Scripts for all calculators
//		Tom Dommett September 2001
//
//----------------------------------------------------------------------------
//	S T A N D A R D   S C R I P T S
//----------------------------------------------------------------------------

var frm = document.calculator;

// ----------------------------------------------------------------------------

function changePage(pageNumber) {

	document.calculator.page.value = pageNumber;
	document.calculator.submit();

}

// Added for taxcode checker 13/10/2005
function spouseCheck(id) {
	if (document.getElementById('MARRIE') != null) {
		if (document.getElementById('MARRIE').checked==true && document.getElementById('SPAGE').value == '') { 
		alert('Please enter the date of birth for your Spouse.'); 
		document.all.SPAGE.focus();
		} 
		else changePage(id);
	}
	else {
		changePage(id);
	}
}

function restart() {

	document.location = document.location;

}

// ----------------------------------------------------------------------------
function selectBox(frmE, selectText) {

	var i;
	var selectIndex = 0;

	for(var i=0;i<document.calculator[frmE].length;i++) {
		if(document.calculator[frmE].options[i].value == selectText) { selectIndex = i;}
	}

	return selectIndex;
}

// ----------------------------------------------------------------------------
function radioButtons(frmE, selectText) {

	var i;
	var selectIndex = 0;
	var frmElement = document.calculator[frmE];

	for(var i=0;i<frmElement.length;i++) {
		if(frmElement[i].value == selectText) { selectIndex = i;}
	}

	frmElement[selectIndex].checked = true;
}

// ----------------------------------------------------------------------------
function evalnumber(element) {

	var en = evalnum(element.value);

	if(element.max != "") {
		if(en > element.max) { 
			en = element.max;
			alert ("The maximum is " + element.max + ".");
			element.focus ();
		}
	}

	if(element.min != "") {
		if(en < element.min) { 
			en = element.min;
			alert ("The minimum is " + element.min + ".");
			element.focus ();
		}
	}
	element.value = en;

}

// ----------------------------------------------------------------------------
function evalmoney(element) {

	var en = evalnum(element.value);

	if(element.max != "") {
		if(en > element.max) { 
			en = element.max;
			alert ("The maximum is " + element.max + ".");
			element.focus ();
		}
	}

	if(element.min != "") {
		if(en < element.min) { 
			en = element.min;
			alert ("The minimum is " + element.min + ".");
			element.focus ();
		}
	}

	if(element.format == '#') { 
		element.value = evalpoundonly(en);
	} else {
		element.value = evalpound(en);
	}

}

// ----------------------------------------------------------------------------
function evaldate(element) {

	if(element.value == '' && element.optional == 'true') { return; }

	if(verify_date(element.value)) {

		var en = formatdate(verify_date(element.value));

		if(element.min != "") {
			if(en < element.min) { 
				en = element.min;
				alert ("The earliest date is " + unformatdate(element.min) + ".");
			}
		}

		if(element.max != "") {
			if(en > element.max) { 
				en = element.max;
				alert ("The latest date is " + unformatdate(element.max) + "."); 
			}
		}

		en = unformatdate(en);
		element.value = verify_date(en);
		return true;
	}
	else { 
		alert("Please enter a valid date");
		element.select();
		element.focus();
		return false;
	}

	

}

// ----------------------------------------------------------------------------

function evaltaxcode(element) {

	var code = element.value;

	done = false;
	revCode = false;
	
	code = code.toUpperCase ();
	if (code.match (/(^[A-Z]{1,1}[0-9]+$)|(^[0-9]+[A-Z]{1,1}$)|(^[A-Z]{2,2}$)/gi))
	{
	
		// for people that misread
		if (code == 'D0')
			code = 'DO';
			
		if (code == 'NT' || code == 'BR' || code == 'DO')
		{
			c = code;
			v = "";
			done = true;
		}
		else
		{
				
			l=code.length;
			c = code.charAt (l-1);
		
			if (c>="A" && c<="Z")
			{
				v = evalnum(code);
				if (v>0)
					done = true;
			}
			else
			{
	
				c = code.charAt(0);
				revCode = true;
				if (c>="A" && c<="Z") 
				{
					v = evalnum(code);
					if (v>0)
						done = true;
				}
			}
		}
	
	}

	if (!done) 
	{
		alert ("Please enter an appropriate tax code.");
		element.focus ();
		return;
	}
	else
	{
		if(!revCode) { element.value = v + c; } else {  element.value = c + v; }
	}

}

// ----------------------------------------------------------------------------

// ----------------------------------------------------------------------------
function evalnum(numstr) {

	var i,c,neg;
	var ret="";
	var p=false;

	neg = 1;
	if (numstr.indexOf("-") >=0) { neg = -1; }

	for (i=numstr.length-1; i>=0; i--) {
		c=numstr.charAt(i);

		if (c == ".") {
			if (p == false) p=true;
			else c="";
		}

		if ((c < "0" || c > "9") && c != ".") c="";

		ret = c + ret;
	}

	if (ret=="" || ret=="NaN") ret="0";
	return parseFloat(ret*neg);

}



// ----------------------------------------------------------------------------
function evalpound(num) {

	var i,l,d,n;
	var nums;
	var ret;

	nums = String(Math.round(num*100));
	n = ((num < 0)? 1:0);

	while (nums.length <3) nums = "0" + nums;

	l = nums.length-3;
	ret = "." + nums.charAt(l+1) + nums.charAt(l+2);

	d=0;
	for (i=l; i>=0; i--) {
		ret = nums.charAt(i) + ret;
		d++;
		if (d==3 && i>n) {
			ret="," + ret;
			d=0;
		}
	}

	ret = "\u00a3" + ret;
	return ret;

}


// ----------------------------------------------------------------------------
function evalpoundonly(num) {

	var i,l,d;
	var nums;
	var ret='';

	nums = String(Math.round(num*100));

	while (nums.length <3) nums = "0" + nums;

	l = nums.length-3;
	//ret = "." + nums.charAt(l+1) + nums.charAt(l+2);

	d=0;
	for (i=l; i>=0; i--) {
		ret = nums.charAt(i) + ret;
		d++;
		if (d==3 && i>0) {
			ret="," + ret;
			d=0;
		}
	}

	ret = "\u00a3" + ret;
	return ret;

}

// ________________________________________________________
// verify that the value entered is a date
function verify_date(str) {
	var ret = "";

	if (str!="" && str==str.replace(/[^-\/0-9]/g, "")) {

		// parse date
		str = str.replace(/\//g, "-");
		var pdate = str.split("-");

		if (pdate.length==3) {

			var d=0; var m=0; var y=0;

			d = toInt(pdate[0]);
			m = toInt(pdate[1]);

			y = pdate[2];
			if(y<1850) {
				if(y<100 && y>0) {
					//presume 2 figure:
					if ( y<10) { y = toInt(y) + 2000; }
					else { y = toInt(y) + 1900; }
				}
				else { y = 0; }
			} else { if(y > 2050) { y = 0; } }

			// valid date?
			if (d>0 && m>0 && y>0) {

				var vdate = new Date(y, (m-1), d);

				if (d==vdate.getDate() && (m-1)==vdate.getMonth() && y==vdate.getFullYear()) {

					// create return string
					if (d<10) { ret = ret + "0"; }
					ret = ret + String(d) + "/";
					if (m<10) { ret = ret + "0"; }
					ret = ret + String(m) + "/" + String(y);

				}
			}
		}
	}

	return ret;
}

// ----------------------------------------------------------------------------
function formatdate(dateString) {

	var day1, month1, year1;

	year1 = dateString.substring(6, 10);
	month1 = dateString.substring(3, 5);
	day1 = dateString.substring(0, 2);

	return year1 + month1 + day1;

}

// ----------------------------------------------------------------------------
function unformatdate(dateString) {

	var day1, month1, year1;

	year1 = dateString.substring(0, 4);
	month1 = dateString.substring(4, 6);
	day1 = dateString.substring(6, 8);

	return day1 + "/" + month1 + "/" + year1;

}

// ----------------------------------------------------------------------------
function daysBetween(date1, date2) {

	var day1, day2, month1, month2, year1, year2, diff;

	year1 = date1.substring(0, 4);
	year2 = date2.substring(0, 4);

	month1 = date1.substring(4, 6);
	month2 = date2.substring(4, 6);

	day1 = date1.substring(6, 8);
	day2 = date2.substring(6, 8);

	year1 -= 1970;
	year2 -= 1970;
	month1--
	month2--

	var MinMilli = 1000 * 60
  	var HrMilli = MinMilli * 60
  	var DyMilli = HrMilli * 24

	diff = Date.UTC(year2, month2, day2, 0, 0, 0) - Date.UTC(year1, month1, day1, 0, 0, 0)
	diff = Math.round(diff / DyMilli);

	return diff;

}


// ----------------------------------------------------------------------------
// converts a string to a decimal integer

function toInt(str) {

	var ret=0;
	var state=1;

	// clean string
	str = String(str);
	str = str.replace(/\u00a3| |,/g, "");

	// find negative values
	if (str.charAt(0) == "-") {
		state = -1;
		str = str.replace(/-/g, "");
	}

	// if numeric
	if (!isNaN(str)) {

		// remove leading zeros
		while (str.length>1 && str.charAt(0)=="0") {
			str = str.substr(1, str.length-1);
		}

		// find integer and convert to correct state
		ret = parseInt(str) * state;
	}

	return ret;
}

// ----------------------------------------------------------------------------
// Returns the Object Reference

function GetContextObject (objName)
{	
	if (document.all)			// IE4 +
	{
		var objContext = document.all[objName];
	}
	else if (document.getElementById )	// Netscape 6 +
	{
		var objContext = document.getElementById (objName);
	}
	else					// Netscape 4.7 is not currently supported
	{
		var objContext = nothing;
	}
	return objContext;
}

// ----------------------------------------------------------------------------
// Returns the Absolute Top of an Object

function GetObjectTop (objContext)
{
	var yPosition = objContext.offsetTop;
	var objParent = objContext.offsetParent;
	while (objParent != null)
	{
		yPosition += objParent.offsetTop;
		objParent = objParent.offsetParent;
	}
	return yPosition;
}

// ----------------------------------------------------------------------------
// Returns the Absolute Left of an Object

function GetObjectLeft (objContext)
{
	var xPosition = objContext.offsetLeft;
	var objParent = objContext.offsetParent;
	while (objParent != null)
	{
		xPosition += objParent.offsetLeft;
		objParent = objParent.offsetParent;
	}
	return xPosition;
}
