Element.showAll = function(array) {
  Element.show.apply(Element.show, array)
}

Element.hideAll = function(array) {
  Element.hide.apply(Element.hide, array)
}

Element.findPosX = function(element) {
	var obj = $(element);
	
	if (!obj) { alert('findPosX - No object found: '+element); }
	
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

Element.findPosY = function(element) {
	var obj = $(element);
	if (!obj) { alert('findPosY - No object found: '+element); }
	
	var curtop = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curtop += obj.offsetTop
			obj = obj.offsetParent;
		}
	}
	else if (obj.y)
		curtop += obj.y;
	return curtop;
}

function showFlash(message, conf) {
	// reset ajax results class
	if (conf.cssClass) {
	    $("FlashMessage").className = conf.cssClass;
	}
    
	if (conf.posElement) {
	    // get the Flash height / width for use later
	    var w = $('Flash').style.width;
	    var h = $('Flash').style.height;

		// position the flash message
	    Position.clone(conf.posElement, 'Flash');

		if (conf.posXOffset) {
			$('Flash').style.left = parseFloat(conf.posXOffset) + parseFloat($('Flash').style.left);
		}
		
		if (conf.posYOffset) {
			$('Flash').style.top = parseFloat(conf.posYOffset) + parseFloat($('Flash').style.top);
		}
		
	    // reset the height / width
	    $('Flash').style.width = w;
	    $('Flash').style.height = h;
	}
	
	// show flash message div tags
    Element.show("Flash");
	Element.show("FlashMessage");
	
    $('FlashMessage').innerHTML = message;

}

function fadeFlash(conf) {

	new Effect.Fade('Flash', {duration: 3.0});
	
}

// Mark Changed - function to mark field elements changed
function markChanged(id) {
	
	var el = document.getElementById(id);
	
	if (!el) { return false; }
	
	el.style.backgroundColor = '#F7C8CC';
	
	if (document.getElementById('changed')) {
		document.getElementById('changed').value = 1;
	}
	
}

// Mark unchanged - function to mark field elements changed
function markUnchanged(id) {
	
	var el = document.getElementById(id);
	
	if (!el) { return false; }
	
	el.style.backgroundColor = '#fff';
	
	if (document.getElementById('changed')) {
		document.getElementById('changed').value = 0;
	}
	
}

function quick_check_date(objName) {
	
	var datefield = objName;

	if (check_date_format(objName) == false) 
	{
		alert("The date entered is invalid.  Please try again.");
		datefield.focus();
		return false;
	}
	else 
	{
		return true;
	}
	
}

function check_date_format(objName) {
	//var strDatestyle = "US"; //United States date style
	var strDatestyle = "EU";  //European date style

	var strDate;
	var strDateArray;
	var strDay;
	var strMonth;
	var strYear;
	var intday;
	var intMonth;
	var intYear;
	var booFound = false;
	var datefield = objName;
	var strSeparatorArray = new Array("-"," ","/",".");
	var intElementNr;
	var err = 0;
	var strMonthArray = new Array(12);
	
	strMonthArray[0] = "01";
	strMonthArray[1] = "02";
	strMonthArray[2] = "03";
	strMonthArray[3] = "04";
	strMonthArray[4] = "05";
	strMonthArray[5] = "06";
	strMonthArray[6] = "07";
	strMonthArray[7] = "08";
	strMonthArray[8] = "09";
	strMonthArray[9] = "10";
	strMonthArray[10] = "11";
	strMonthArray[11] = "12";
	strDate = datefield.value;
	
	if (strDate.length < 1) 
	{
		return true;
	}
	
	if (strDate.length < 6) 
	{
		return false;
	}

	for (intElementNr = 0; intElementNr < strSeparatorArray.length; intElementNr++) 
	{
		if (strDate.indexOf(strSeparatorArray[intElementNr]) != -1) 
		{
			strDateArray = strDate.split(strSeparatorArray[intElementNr]);
		
			if (strDateArray.length != 3) 
			{
				err = 1;
				return false;
			}
			else 
			{
				strDay = strDateArray[0];
				strMonth = strDateArray[1];
				strYear = strDateArray[2];
			}
			booFound = true;
		}
	}
	
	if (booFound == false) 
	{
		if (strDate.length > 5) 
		{
			strDay = strDate.substr(0, 2);
			strMonth = strDate.substr(2, 2);
			strYear = strDate.substr(4);
		}
	}
	
	if (strYear.length == 1)
	{ 
		if (strYear < 12)	{	strYear = '200' + strYear;	}
		else				{	strYear = '19' + strYear;	}
	}
	if (strYear.length == 2)
	{ 
		if (strYear < 12)	{	strYear = '20' + strYear;	}
		else				{	strYear = '19' + strYear;	}
	}

	// US style
	if (strDatestyle == "US") 
	{
		strTemp = strDay;
		strDay = strMonth;
		strMonth = strTemp;
	}
	
	intday = parseInt(strDay, 10);
	
	if (isNaN(intday)) 
	{
		err = 2;
		return false;
	}

	intMonth = parseInt(strMonth, 10);
	
	if (isNaN(intMonth)) 
	{
		for (i = 0;i<12;i++) 
		{
			if (strMonth.toUpperCase() == strMonthArray[i].toUpperCase()) 
			{
				intMonth = i+1;
				strMonth = strMonthArray[i];
				i = 12;
			}
		}

		if (isNaN(intMonth)) 
		{
			err = 3;
			return false;
		}
	}
	
	intYear = parseInt(strYear, 10);
	if (isNaN(intYear)) 
	{
		err = 4;
		return false;
	}
	
	if (intMonth > 12 || intMonth < 1) 
	{
		err = 5;
		return false;
	}
	
	if ((intMonth == 1 || intMonth == 3 || intMonth == 5 || intMonth == 7 || intMonth == 8 || intMonth == 10 || intMonth == 12) && (intday > 31 || intday < 1)) 
	{
		err = 6;
		return false;
	}
	
	if ((intMonth == 4 || intMonth == 6 || intMonth == 9 || intMonth == 11) && (intday > 30 || intday < 1)) 
	{
		err = 7;
		return false;
	}

	if (intMonth == 2) 
	{
		if (intday < 1) 
		{
			err = 8;
			return false;
		}

		if (LeapYear(intYear) == true) 
		{
			if (intday > 29) 
			{
				err = 9;
				return false;
			}
		}
		else 
		{
			if (intday > 28) 
			{
				err = 10;
				return false;
			}
		}
	}

	var strday = String(intday);
	
	if (strday.length == 1)
	strday = "0" + strday;  

	if (strDatestyle == "US") 
	{
		datefield.value = strMonthArray[intMonth-1] + "/" + strday+"/" + strYear;
	}
	else 
	{
		datefield.value = strday + "/" + strMonthArray[intMonth-1] + "/" + strYear;
	}

	return true;
}

// used with formcat javascript validation
function IsDate(DateValue) {
	var checkstr = "0123456789";
	var DateTemp = "";
	var seperator = "/";
	var day;
	var month;
	var year;
	var leap = 0;
	var err = 0;
	var i;

	/* Delete all chars except 0..9 */
   for (i = 0; i < DateValue.length; i++) {
	  if (checkstr.indexOf(DateValue.substr(i,1)) >= 0) {
	     DateTemp = DateTemp + DateValue.substr(i,1);
	  }
   }
   DateValue = DateTemp;
   /* Always change date to 8 digits - string*/
   /* if year is entered as 2-digit / always assume 20xx */
   //if (DateValue.length == 6) {
   //   DateValue = DateValue.substr(0,4) + '20' + DateValue.substr(4,2); }
   if (DateValue.length != 8) {
      err = 19;}
   /* year is wrong if year = 0000 */
   year = DateValue.substr(4,4);
   if (year == 0) {
      err = 20;
   }
   /* Validation of month*/
   month = DateValue.substr(2,2);
   if ((month < 1) || (month > 12)) {
      err = 21;
   }
   /* Validation of day*/
   day = DateValue.substr(0,2);
   if (day < 1) {
     err = 22;
   }
   /* Validation leap-year / february / day */
   if ((year % 4 == 0) || (year % 100 == 0) || (year % 400 == 0)) {
      leap = 1;
   }
   if ((month == 2) && (leap == 1) && (day > 29)) {
      err = 23;
   }
   if ((month == 2) && (leap != 1) && (day > 28)) {
      err = 24;
   }
   /* Validation of other months */
   if ((day > 31) && ((month == "01") || (month == "03") || (month == "05") || (month == "07") || (month == "08") || (month == "10") || (month == "12"))) {
      err = 25;
   }
   if ((day > 30) && ((month == "04") || (month == "06") || (month == "09") || (month == "11"))) {
      err = 26;
   }

   if (err == 0) return (true);
   else return (false);
}

// used for form processing
function IsEmail(EmailValue) {
	var email_regex_str = "^(([0-9a-zA-Z]+)|([0-9a-zA-Z]+[_.0-9a-zA-Z-]*[0-9a-zA-Z]+))@([a-zA-Z0-9-]+[.])+([a-zA-Z]{2}|net|NET|com|COM|gov|GOV|mil|MIL|org|ORG|edu|EDU|int|INT|biz|BIZ|info|INFO|name|NAME)$";
	var email_regex = new RegExp(email_regex_str);
	
	if (EmailValue.search(email_regex) == -1) {
		return false;
	} else {
		return true;
	}
}

function calculateAge(indate, todate) {
	
	var DOBdate = indate;
	var today = new Date();
	var day = '';
	var mon = '';
	var yr = '';
	
	if (todate != '') {
		var todates = todate.split('/');
		day = todates[0];
		mon = todates[1];
		yr = todates[2];	
	} else {
		day = today.getDate();
		mon = today.getMonth()+1;
		yr = today.getYear();		

		if (yr < 1900) {
			yr += 1900;
		}
	}
	
	var endYr = yr;

	var dates = new Array;
	dates = DOBdate.split("/");
	var dobYr = dates[2];
	var dobMon= dates[1];
	var dobDay= dates[0];
	var intLeapYears = 0;

	// discount this year if before feb 29
	if (isLeapYear(yr)) {
		if (mon == 1) {
			intLeapYears -= 1;
		}
		if ((mon == 2) && (day < 29)) {
			intLeapYears -= 1;
		}
	}

	// discount birth year if after feb 29
	if (isLeapYear(dobYr)) {
		if (dobMon >= 3) {
			intLeapYears -= 1;
		}
	}
	
	for (var i=dobYr;i<=yr;i++) {
		intLeapYears += isLeapYear(i);
	}

	// following line commented out - we will take the decimal coded age & compare against the sent upper & lower
	yr -= dates[2];
	mon -= dates[1];
	day -= dates[0];

	yr *= 10000;
	mon *= 100;
	day += mon;
	day += yr;

	var realAge = parseInt(day/10000);
	
	return realAge;
}

function isLeapYear(yyyy) {
	var a= (yyyy%100);
	if (!(yyyy%100) && !(yyyy%400)) { return 1; }
	if ((yyyy%100) && !(yyyy%4)) { return 1; }
	return 0;
}

function LeapYear(intYear) {
	if (intYear % 100 == 0)	{
		if (intYear % 400 == 0) { return true; }
	} else {
		if ((intYear % 4) == 0) { return true; }
	}

	return false;
}

function toggleWords(element, word1, word2) {
	var re1 = new RegExp(word1);
	var re2 = new RegExp(word2);

	if (element.innerHTML.match(re1)) { 
		element.innerHTML = element.innerHTML.replace(re1, word2)
	} else { 
		element.innerHTML = element.innerHTML.replace(re2, word1); 
	}
}
// used to display training videos or other popups
function popup_window( url, id, width, height ) {
	//extract the url parameters if any, and pass them to the called html
	var tempvar=document.location.toString(); // fetch the URL string
	var passedparams = tempvar.lastIndexOf("?");
	if(passedparams > -1) url += tempvar.substring(passedparams);
	popup = window.open( url, id, 'toolbar=no,scrollbars=no,location=no,statusbar=no,menubar=no,resizable=no,width=' + width + ',height=' + height + '' );
	popup.focus();
}

//-----------------------------------------------------------------------------------------  
// function to not allow nothing but numbers in field
//-----------------------------------------------------------------------------------------  
function NumericOnly(e)
{
	var key;
	var keychar;
	if (window.event)
		key = window.event.keyCode;
	else if (e)
		key = e.which;
	else
		return true;
	keychar = String.fromCharCode(key);
	keychar = keychar.toLowerCase();
	
	if ((key==null) || (key==0) || (key==8) || (key==9) || (key==13) || (key==27) )
		return true;
	// alphas and numbers
	else if ((("0123456789").indexOf(keychar) > -1))
		return true;
	else
		return false;

}

var Page = {
	open : function (element, window_name) {
		var url;
		
		if (!element.href) {
			url = element;
		} else {
			url = element.href;
		}
		
		var win = window.open(url, window_name, 'width=500,height=300,resizable=1,scrollbars=1');
		win.focus();
		return false;
	}
}