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()}
}

function PopUpSupport(Url,PopupName){
	if(!PopupName){
		PopupName = "PopUpWindow";
	}
	//open popup offscreen if possible
	newwindow=window.open(Url,PopupName,'menubar=0,status=no,resizable=no,scrollbars=no,width=1,height=1,left=9000,top=9000');
	
	//refocus on self
	if (window.focus) {window.focus()}
	
	return newwindow;
}

//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");
	
	//modified to be less strict to allow for nested controls
	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 echo(testText)
{
	alert(testText);
}

//get form element based only on the holding control name and field name...the nestedness of the holding control is ignored
function getFieldByControl_fieldName(contol_fieldname,indoc)
{
	var thedoc = document;
	if(indoc)
	{
		thedoc=indoc;
	}

	var aryInputElements = thedoc.body.getElementsByTagName("input");

	//allow any characters preceding the control_fieldname 
	var re = new RegExp(".*" + contol_fieldname + "$");

	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];
		}
	}
	
	//exhausted all input and SELECT elements, try TEXTAREA elements, same regex
	var arySelectElements = document.body.getElementsByTagName("textarea");
	
	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");
}


//get DHTML element based only on the holding control name and field name, pecifying what type of control it is
function getSpecialByControl_fieldName(contol_fieldname,elementName,indoc)
{
	var thedoc = document;
	if(indoc)
	{
		thedoc=indoc;
	}
	

	var aryInputElements = thedoc.body.getElementsByTagName(elementName);
	
	//allow any characters preceding the control_fieldname 
	var re = new RegExp(".*" + contol_fieldname + "$");

	for(i=0; i<aryInputElements.length; i++)
	{
		if ((re.test(aryInputElements[i].id))==true)
		{
			//found match - return immediately
			return aryInputElements[i];
		}
	}
}
	

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 - only allow one decimal point
else if (dec && (keychar == ".") && myfield.value.indexOf(".") < 0)
   {
   //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);


//when the year difference is 18
//check month and day
//if(yeardiff==18){
//   if(monthdiff==0){
//      if(daydiff<0){
//         return true;
//      }else{
//         return false;
//      }	   
//   }else if(monthdiff<0){
//      return true;      
//   }else{
//      return false;
//   }   
//}
//when age is less then 18
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("(19|20)\d\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])");
	//var re = new RegExp("(0?[1-9]|[12][0-9]|3[01])[- /.](0?[1-9]|1[012])[- /.](19|20)?\d\d");
	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]$");
	//var re = new RegExp("(0[1-9]");
	////|[1-2][0-9]|3[0-1])(0[1-9]|1[012])//(19|20)\d\d
	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?[1-9]|1[012])[- /.](19|20)?\d\d[- /.](0?[1-9]|1[012])");
	var re = new RegExp("[0-9][0-9]/[0-9][0-9]$");
//	var re1 = 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);
}

//Add this functinality to check yyyy/mm regular expression
//Developed by:James
function ValidShortDateTime1(datetime) {

	//var re = new RegExp("(0?[1-9]|1[012])[- /.](19|20)?\d\d[- /.](0?[1-9]|1[012])");
	var re = new RegExp("(0[1-9]|1[0-2])/(19|20)[0-9][0-9]$");
//	var re1 = 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);
}

//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 roll_over(img_name, img_src)
   {
   document[img_name].src = img_src;
   }

function textLimit(field, maxlen) {
	if (field.value.length > maxlen + 1)
		//alert('your input has been truncated!');
	if (field.value.length > maxlen)
		field.value = field.value.substring(0, maxlen);
}

function isNumeric(sField)
{
	// check for a length of 0 - if so, return false
	if(sField.length==0) { return false; }
	else if(sField.length==1 && (sField.charAt(0) == '.' || sField.charAt(0) == ',' || (sField.charAt(0) == '-'))) { return false; }


	// loop through each character of the string
	for(var x=0; x < sField.length; x++) {
		// if the character is < 0 or > 9, return false (not a number)
		if((sField.charAt(x) >= '0' && sField.charAt(x) <= '9') || sField.charAt(x) == '.' || sField.charAt(x) == ',' || (sField.charAt(x) == '-' && x==0)) { /* do nothing */ }
		else { return false; }
	}

	// made it through the loop - we have a number
	return true;
}

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 unescape(ft[1]);
        }
    }
}

function fillLocalFromQS(element,qsName)
{ 
    localTXT = document.getElementById(element);
    q = querySt(qsName);
    if( q == undefined)
    {
        q = "";
    }    
    
    if(localTXT.value != undefined)
    {
        localTXT.value=q;
    }
    else
    {
        localTXT.innerHTML=q;
    }
}

function findElement(name)
{ 
    var elem;  
    if( document.getElementById ) // this is the way the standards work    
    {
        elem = document.getElementById( name );
    }
    else if( document.all ) // this is the way old msie versions work     
    {
        elem = document.all[name];
    }
    else if( document.layers ) // this is the way nn4 works    
    {
        elem = document.layers[name]; 
    }
    return elem;
}
