function getFieldByControl_fieldName(contol_fieldname,controlType)
{
	var aryInputElements;
	//allow any characters preceding the control_fieldname 
	var re = new RegExp(".*" + contol_fieldname + "$");
	
	//if specific control type supplied, try that first
	if(controlType)
	{
		aryInputElements = document.body.getElementsByTagName(controlType);
		
		for(i=0; i<aryInputElements.length; i++)
		{
			if ((re.test(aryInputElements[i].id))==true)
			{
				//found match - return immediately
				return aryInputElements[i];
			}
		}
	}
	else
	{		
		//continue on to default element types
		aryInputElements = document.body.getElementsByTagName("input");
		
		for(i=0; i<aryInputElements.length; i++)
		{
			if ((re.test(aryInputElements[i].id))==true)
			{
				//found match - return immediately
				return aryInputElements[i];
			}
		}
		
		//exhausted all input elements, try SELECT elements, same regex
		
		var arySelectElements = document.body.getElementsByTagName("select");
		
		for(i=0; i<arySelectElements.length; i++)
		{
			if ((re.test(arySelectElements[i].id))==true)
			{
				//found match - return immediately
				return arySelectElements[i];
			}
		}
		
		//alert("error, field '" +contol_fieldname + "' not found in inputs or selects");
	}
}

//direct object fetch - if the name is not inside a .Net ID
function returnObjById( id ) 
{ 
	if (document.getElementById) 
		var returnVar = document.getElementById(id); 
	else if (document.all) 
		var returnVar = document.all[id]; 
	else if (document.layers) 
		var returnVar = document.layers[id]; 
	return returnVar; 
}

function IsNumber(){
	var keyCode_dot = 46;
	if(isNaN(String.fromCharCode(event.keyCode)) && event.keyCode!=keyCode_dot){
		event.keyCode = 0;
	}
}


function PopUpLink(Url, Width, Height, PopupName){
	if(!PopupName){
		PopupName = "PopUpWindow";
	}
	newwindow=window.open(Url,PopupName,'menubar=0,resizable=yes,scrollbars=yes,width='+Width+',height='+Height);
	if (window.focus) {newwindow.focus()}
}

//only allow the numbers 0-9
//Developed by: John
function IsInteger()
{
      var keyCode_0 = 48;
      var keyCode_9 = 57;
      if(event.keyCode<keyCode_0 || event.keyCode>keyCode_9 ){
            event.keyCode = 0;
      }
}

function ValidEmail(email){
	var re = new RegExp("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$");
	return re.test(email);
}

function validateURL(url){
	return true;
//var re = new RegExp("(https?://)?[a-zA-Z0-9]+((/.*)||([^/]*))");
	//return re.test(url);
}

function alertinvalidscript(object)
{
	//alert("Invalid postcode");
	object.focus();
	return false;
			
}


//given the text name prefix of the radionbutton list or checkbox list this will return hw many options are selected
function countDotNetListChecked(listNamePrefix)
{
	var aryInputElements = document.body.getElementsByTagName("input");

	var selected = 0;
	
	//know that the naming convention just appends underscore and a number to the pagename_controlname
	var re = new RegExp("^" + listNamePrefix + "_\\d");

	for(i=0; i<aryInputElements.length; i++)
	{
		if ((re.test(aryInputElements[i].id))==true)
		{
			if (aryInputElements[i].checked==true)
			{
				selected++;
			}
		}
	}

	return selected;
}


function ValidMobilePhone(mobile)
{
	if ( mobile != "" && ( mobile.length<10 || mobile.substring(0,2) != "04" ) )
	{
		return false;
	}
	else
	{
		return true;
	}
}

function ValidURL(address){
	//to do
	var re = new RegExp(".*");
	return re.test(address);
}

//make sure that a given number is in the given range
//Developed by: Michael
function ValidNumRange(amount,min,max){
	if ( isNaN(min) || isNaN(max) ) {
		//abort if the range is not defined correctly
		return false;
	}
	//clean up and parse
	var cleanAmount = amount.replace(/\$/g,"");
	cleanAmount = cleanAmount.replace(/,/g,"");

	if (cleanAmount.length == 0)
	{
		cleanAmount = 0;
	}
	
	var numToCheck = parseFloat(cleanAmount);
	if (numToCheck >= min && numToCheck <= max) {
		return true;
	}
	else {
		return false;
	}	
}


// copyright 1999 Idocs, Inc. http://www.idocs.com
// Distribute this script freely but keep this notice in place
function numbersonly(myfield, e, dec)
{
var key;
var keychar;

if (window.event)
   key = window.event.keyCode;
else if (e)
   key = e.which;
else
   return true;
keychar = String.fromCharCode(key);

// control keys
if ((key==null) || (key==0) || (key==8) || 
    (key==9) || (key==13) || (key==27) )
   return true;

// numbers
else if ((("0123456789").indexOf(keychar) > -1))
   return true;

// decimal point jump
else if (dec && (keychar == "."))
   {
   //myfield.form.elements[dec].focus();
   return true;
   }
else
   return false;
}

// copyright 1999 Idocs, Inc. http://www.idocs.com
// Functionality to check numbers and slash only
// Modified by :Lin
function numberslash(myfield, e, dec)
{
var key;
var keychar;

if (window.event)
   key = window.event.keyCode;
else if (e)
   key = e.which;
else
   return true;
keychar = String.fromCharCode(key);

// control keys
if ((key==null) || (key==0) || (key==8) || 
    (key==9) || (key==13) || (key==27) )
   return true;

// numbers
else if ((("0123456789").indexOf(keychar) > -1))
   return true;

// slash
else if (key==47)  
   return true;
  
else
   return false;
}

// copyright 1999 Idocs, Inc. http://www.idocs.com
// Functionality to check A-Z,a-z,dash,space,single quote
// Modified by :Lin
function validname(myfield, e, dec)
{
var key;
var keychar;

if (window.event)
   key = window.event.keyCode;
else if (e)
   key = e.which;
else
   return true;
keychar = String.fromCharCode(key);

// control keys
if ((key==null) || (key==0) || (key==8) || 
    (key==9) || (key==13) || (key==27) )
   return true;

//capital characters
else if(key>=65 && key<=90)
	return true;

//small characters
else if(key>=97 && key<=122)	
	return true;

//dash and space and single quote
else if(key==45 || key==32 || key==39)
	return true;
  
else
   return false;
}

// copyright 1999 Idocs, Inc. http://www.idocs.com
// Distribute this script freely but keep this notice in place
// Functionality to check A-Z,a-z,dash,space
// Modified by :Lin
function validchar(myfield, e, dec)
{
var key;
var keychar;

if (window.event)
   key = window.event.keyCode;
else if (e)
   key = e.which;
else
   return true;
keychar = String.fromCharCode(key);

// control keys
if ((key==null) || (key==0) || (key==8) || 
    (key==9) || (key==13) || (key==27) )
   return true;

//capital characters
else if(key>=65 && key<=90)
	return true;

//small characters
else if(key>=97 && key<=122)	
	return true;

//dash and space
else if(key==45 || key==32)
	return true;
  
else
   return false;
}

//To verify whether age is 18 or greater
//Developed by:Lin
function VerifyAge(formdate,systemdates){
var formday =formdate.split('/')[0];
var formmonth =formdate.split('/')[1];
var formyear=formdate.split('/')[2];

var systemdat = systemdates.split(' ')[0]
var systemday = systemdat.split('/')[1];
var systemmonth = systemdat.split('/')[0];
var systemyear = systemdat.split('/')[2];

var yeardiff = systemyear - formyear;
var monthdiff = systemmonth - formmonth;
var daydiff = systemday - formday;
//alert(yeardiff);

if(yeardiff<18)
   return true;
else
   return false;
}

//Modify by:James 
//Purpose: get Year Difference
function getYearDifference(formdate,systemdates){
var formday =formdate.split('/')[0];
var formmonth =formdate.split('/')[1];
var formyear=formdate.split('/')[2];

var systemdat = systemdates.split(' ')[0]
var systemday = systemdat.split('/')[1];
var systemmonth = systemdat.split('/')[0];
var systemyear = systemdat.split('/')[2];

var yeardiff = systemyear - formyear;
var monthdiff = systemmonth - formmonth;
var daydiff = systemday - formday;
//alert(yeardiff);

return yeardiff;

}

//To verify whether age is 18 or greater
//Developed by:Lin
function VerifyOverAge(formdate){
var formday =formdate.split('/')[0];
var formmonth =formdate.split('/')[1];
var formyear=formdate.split('/')[2];

if(formday>31)
  return false;
else if(formyear<1901)
  return false;
else
  return true;
}

//Add this functinality to check dd/mm/yyyy regular expression
//Developed by:James
function ValidLongDateTime(datetime) {

	var re = new RegExp("(0?[1-9]|[12][0-9]|3[01])/(0?[1-9]|1[0-2])/[0-9][0-9][0-9][0-9]$");
	return re.test(datetime);
}

function ValidDOBDateTime(datetime) {	
	var re = new RegExp("([0][1-9]|[12][0-9]|3[01])/([0][1-9]|1[0-2])/[0-9][0-9][0-9][0-9]$");	
	return re.test(datetime);
}


//To get the day difference 
function getDayDifference(formdate,systemdates){
var formday =formdate.split('/')[0];
var formmonth =formdate.split('/')[1];
var formyear=formdate.split('/')[2];

var systemdat = systemdates.split(' ')[0]
var systemday = systemdat.split('/')[1];
var systemmonth = systemdat.split('/')[0];
var systemyear = systemdat.split('/')[2];

var yeardiff = systemyear - formyear;
var monthdiff = systemmonth - formmonth;
var daydiff = systemday - formday;

var today = new Date(systemyear,systemmonth,systemday);
var compareday = new Date(formyear,formmonth,formday);

var one_day = 1000 * 60 * 60 * 24; //get 1 day in milliseconds

var day_diff = Math.ceil( ( compareday.getTime() - today.getTime() )/(one_day) );

return day_diff;
}


//Add this functinality to check yyyy/mm regular expression
//Developed by:James
function ValidShortDateTime(datetime) {
	var re = new RegExp("[0-9][0-9]/[0-9][0-9]$");
	return re.test(datetime);
}

//Add this functinality to check yyyy/mm regular expression
//Developed by:James
function ValidShortDateTime1(datetime) {

	var re = new RegExp("(0[1-9]|1[0-2])/(19|20)[0-9][0-9]$");
	return re.test(datetime);
}

//Add this function to open window in full size
function open_window_max( aURL, aWinName )
{
   var wOpen;
   var sOptions;

   sOptions = 'status=yes,menubar=yes,scrollbars=yes,resizable=yes,toolbar=yes';
   sOptions = sOptions + ',width=' + (screen.availWidth - 10).toString();
   sOptions = sOptions + ',height=' + (screen.availHeight - 122).toString();
   sOptions = sOptions + ',screenX=0,screenY=0,left=0,top=0';

   wOpen = window.open( '', aWinName, sOptions );
   wOpen.location = aURL;
   wOpen.focus();
   wOpen.moveTo( 0, 0 );
   wOpen.resizeTo( screen.availWidth, screen.availHeight );
   return wOpen;
}

//Add two functions for cookie manipulation at client side
//Added by:James
function agent_set_cookie(name, value, days) {
	var expires = new Date();
	var today = new Date();
	expires.setTime(today.getTime() + 1000 * 60 * 60 * 24 * days);

	var string = name + "=" + value + "; path=/";
	if (expires != null) string += "; expires=" + expires.toGMTString();

	var url = new String(document.location);
	var offset = 0;
	if (url.indexOf("http://") == 0) offset = 7;
	if (url.indexOf("https://") == 0) offset = 8;

	if (offset > 0) {
		var end = url.indexOf("/", offset);
		if (end == -1)
			end = url.length;
		var domain = url.substring(offset, end);
		var domain2 = domain.replace(/^.+(\.[^.]+\.[^.]+\.[^.][^.])$/, "$1");
		if (domain == domain2)
			domain2 = domain.replace(/^.+(\.[^.]+\.[^.][^.][^.]+)$/, "$1");
		if (domain != domain2)
			string += "; domain=" + domain2;
	}
	//string += "; domain=dev1.artog.com.au;";

	document.cookie = string;
}

//Add two functions for cookie manipulation at client side
//Added by:James
function agent_set_cookieByDomain(name, value, days, domain) {
	var expires = new Date();
	var today = new Date();
	expires.setTime(today.getTime() + 1000 * 60 * 60 * 24 * days);

	var string = name + "=" + value + "; path=/";
	if (expires != null) string += "; expires=" + expires.toGMTString();

	var url = new String(document.location);
	var offset = 0;
	if (url.indexOf("http://") == 0) offset = 7;
	if (url.indexOf("https://") == 0) offset = 8;


	string += "; domain=" + domain + ";";

	document.cookie = string;
}

function agent_get_cookie(name) {
	var search = name + "=";
	//window.alert(document.cookie);
	if (document.cookie.length > 0) {
		var offset = document.cookie.indexOf(search);
		// if cookie exists, return its value
		if (offset != -1) {
			offset += search.length
			var end = document.cookie.indexOf(";", offset)
			if (end == -1)
				end = document.cookie.length;
			return unescape(document.cookie.substring(offset, end));
		}
	}
	return null;
}


// this deletes the cookie when called
function Delete_Cookie( name, path, domain ) {
if ( Get_Cookie( name ) ) document.cookie = name + "=" +
( ( path ) ? ";path=" + path : "") +
( ( domain ) ? ";domain=" + domain : "" ) +
";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}

function toggleLayer( whichLayer )
{ 
	var elem, vis;  
	elem = returnObjById(whichLayer)
	vis = elem.style;  // if the style.display value is blank we try to figure it out here  
	if(vis.display==''&&elem.offsetWidth!=undefined&&elem.offsetHeight!=undefined)    
		vis.display = (elem.offsetWidth!=0&&elem.offsetHeight!=0)?'block':'none';  
	vis.display = (vis.display==''||vis.display=='block'||vis.display=='inline')?'none':'block';
}

function textLimit(field, maxlen) {
	if (field.value.length > maxlen)
		field.value = field.value.substring(0, maxlen);
}

function querySt(ji) 
{
	hu = window.location.search.substring(1);
	gy = hu.split("&");
	for (i=0;i<gy.length;i++) 
	{
		ft = gy[i].split("=");
		if (ft[0] == ji)
		{
			return ft[1];
		}
	}
	return "";
}

function showSingleDiv(whichLayer,enabled,enabledMode)
{
	var elem, vis;  
	elem = returnObjById(whichLayer) 
	vis = elem.style;  // if the style.display value is blank we try to figure it out here  
	
	if(enabled)
	{
		if(enabledMode)
			vis.display = enabledMode;
		else
			enabledMode = 'block';
	}
	else
	{
		vis.display = 'none'
	}
}
