// JavaScript Document

var validIntChar =  /[^ (+)\d-]/;
var validNumChar = /[-+]?[0-9]*\.?[0-9]+/;
var validEmailFormat = /\w+@\w+.\w\w+/;

function chk_num(element) {
	if (element.value == "") { return false }
	else {
		if (validNumChar.test(element.value) == false) { return false } else { return true }
	}
}

function chk_int(element) {
	if (element.value == "") { return false }
	else {
		if (validIntChar.test(element.value) == false) { return false } else { return true }
	}
}

function chk_email(element) {
	if (element.value == "") { return false }
	else {
		if (validEmailFormat.test(element.value) == false) { return false } else { return true }
	}
}

/* assign radio/checkbox opbject to variable to pass into "element" */
function chk_radio(element) { // also works for checkbox
	rval = false; 
	for (i=0; i<element.length; i++) { rval = rval||element[i].checked; }
	return rval;
}
/* assign radio/checkbox opbject to variable to pass into "element" */
function chk_radios(element,limit) { // also works for checkbox
	rval = false; 
	for (i=1; i<=limit; i++) { rval = rval||findDOM(element+i,0).checked; }
	return rval;
}

function chk_date(x) { // [,year4 : boolean [,past : boolean]]
	var dateParts = x.split("/");
	chk_date_msg = "";
	if (x.length == 0) { return true; }
	var past = true; var year4 = false;
	if (arguments.length == 2) { var year4 = arguments[1]; }
	if (arguments.length == 3) { var past = arguments[2]; }
	if (dateParts.length == 1 || dateParts.length > 3 || (year4 && dateParts.length < 3)) { chk_date_msg += "Date has unexpected format. Expecting date in format dd/mm/yy"; chk_date_msg += (year4)?"yy\n":"\n"; return false; }
	var dmyOK = (dateParts.length == 3);
	var errorStatus = true;
	
	if (!chk_int(dateParts[0])) { chk_date_msg += "Date is not a number\n"; errorStatus = false; }
	if (!chk_int(dateParts[1])) { chk_date_msg += "Month is not a number\n"; errorStatus = false; }
	if (dmyOK) if (!chk_int(dateParts[2])) { chk_date_msg += "Year is not a number\n"; errorStatus = false; }
	if (dmyOK && year4 && dateParts[2].length < 4) { chk_date_msg += "Year must be 4 digits\n"; errorStatus = false; }
	
	var thisYearTemp = new Date(); var thisYear = thisYearTemp.getFullYear() % 100;
	var datePartDay = parseInt(dateParts[0],10);
	var datePartMonth = parseInt(dateParts[1],10);
	var datePartYear = (dmyOK)?parseInt(dateParts[2],10):0;
	if (dmyOK && past && datePartYear < 100) { datePartYear += (datePartYear > thisYear)?1900:2000; }
	if (dmyOK && !past && datePartYear < 100) { datePartYear += 2000; }
	
	var febDays = 29;
	if (dmyOK) {
		var ly1 = (datePartYear % 4 == 0);
		var ly2 = (datePartYear % 100 == 0);
		var ly3 = (datePartYear % 1000 == 0);
		var febDays = (ly1 && (ly3 || !ly2))?29:28;
	}
	
	if (datePartMonth < 1 || datePartMonth > 12) { chk_date_msg += "Month is not between 1 and 12\n"; errorStatus = false; }
	
	if ("4,6,9,11".indexOf(datePartMonth) != -1 && datePartDay > 30) { chk_date_msg += "Date must be 30 or less for that month\n"; errorStatus = false; }
	if ("2,4,6,9,11".indexOf(datePartMonth) == -1 && datePartDay > 31) { chk_date_msg += "Date must be 31 or less for that month\n"; errorStatus = false; }
	if (datePartMonth == 2 && datePartDay > febDays)  { chk_date_msg += "Date is not a valid value for February\n"; errorStatus = false; }
	
	return errorStatus;
}

function radioValue(element,limit,delimiter) {
	var rval = "";
	if (typeof delimiter == "undefined") { var delimiter = ","; }
	for (var i=1; i<=limit; i++) { 
		if (findDOM(element+i,0).checked) {
			if (rval != "") { rval += delimiter; }
			rval += findDOM(element+i,0).value;
		} /* checked */
	} /* i */
	return rval;
}

/* ------  field formatting  ------ */

function removeComma(num) {
	var re =/,/g;
	var str = num.toString();

	str = str.replace(re,"");

	return parseFloat(str);
}

function doDecimals(number, x) {
	x = (!x ? 2 : x);
	return Math.round(number*Math.pow(10,x))/Math.pow(10,x);
}

function doCommas(sNumber) {
	var sNew = "", sDecimalPart, sNumberPart;
	var x = 1;

	iDecimal = sNumber.indexOf(".");	
	if (iDecimal >= 0) {
		sTempDecimal = sNumber.substring(iDecimal);
		sNumberPart = sNumber.substring(0, iDecimal);		
		sNew = String(doCommas1(sNumberPart)) + sTempDecimal; 
	}
	else {		
		sNew = doCommas1(sNumber); 
	}		
	return sNew;
}

function doCommas1(sInteger)
{
	var x=1, sNew = "";
	for(var i = sInteger.length - 1; i >= 0; i--) {
		if (x % 4 == 0) {
			sNew = "," + sNew;
			x = 1
		}
		sNew = sInteger.charAt(i) + sNew;
		x++;
	}
	return sNew;
}

/* -------  set field name  ------- */

function enumerateFields(fid) {
	var enumerateFieldsCounter = 0; pauseCounter = false; lastName = "";
	var allInputs=document[fid].getElementsByTagName("*");
	for (i=0; i<allInputs.length; i++) { 
		if (typeof allInputs[i].className=="string" && allInputs[i].className.search("enumOff")==-1) {
			if (allInputs[i].tagName.toLowerCase() == "input" || allInputs[i].tagName.toLowerCase() == "select" || allInputs[i].tagName.toLowerCase() == "textarea") {
				pauseCounter = (allInputs[i].name == lastName);
				if (allInputs[i].type == "radio") { if (!pauseCounter) { enumerateFieldsCounter++; } } else { enumerateFieldsCounter++; }
				lastName = allInputs[i].name;
				if (allInputs[i].name == "") { allInputs[i].name = allInputs[i].id + "_" + enumerateFieldsCounter; }
				else { if (allInputs[i].name.search(/_/) == -1) { allInputs[i].name += "_" + enumerateFieldsCounter; } }
			}
		}
	}
}

function fieldActive(fid,element,stat) { // form name , fieldname , status [ true = active ]
	if (stat) {
		findDOM(element+"set",1).opacity = "1.0"; // FF
		findDOM(element+"set",1).filter = "alpha(opacity=100)"; // IE
		if (typeof document.fid[element].length != "undefined") { for (i=0; i<document.fid[element].length; i++) { document.fid[element][i].disabled = false; } } else { document.fid[element].disabled = false; }
	} else { 
		findDOM(element+"set",1).opacity = "0.5"; // FF
		findDOM(element+"set",1).filter = "alpha(opacity=50)"; // IE
		if (typeof document.fid[element].length != "undefined") { for (i=0; i<document.fid[element].length; i++) { document.fid[element][i].checked = false; document.fid[element][i].disabled = true; } } else { document.fid[element].disabled = true; document.fid[element].value = ""; }
	}
}

function fieldShow(fid,element,stat) { // form name , fieldname , status [ true = active ]
	if (stat) {
		findDOM(element+"set",1).display = "block";
		if (typeof document[fid][element].length != "undefined") { for (i=0; i<document[fid][element].length; i++) { document[fid][element][i].disabled = false; } } else { document[fid][element].disabled = false; }
	} else { 
		findDOM(element+"set",1).display = "none";
		if (typeof document[fid][element].length != "undefined") { for (i=0; i<document[fid][element].length; i++) { document[fid][element][i].checked = false; document[fid][element][i].disabled = true; } } else { document[fid][element].disabled = true; document[fid][element].value = ""; }
	}
}


