
    var i_errfound; //for function error()

    function trim(argvalue) {
	  var tmpstr = ltrim(argvalue);

	  return rtrim(tmpstr);
    }

    function ltrim(argvalue) {
	  while (1) {
	  if (argvalue.substring(0, 1) != ' ')
	      break;
	      argvalue = argvalue.substring(1, argvalue.length);
      }
	  return argvalue;
    }

    function rtrim(argvalue) {
	  while (1) {
	  if (argvalue.substring(argvalue.length - 1, argvalue.length)!= ' ')
	      break;
	      argvalue = argvalue.substring(0, argvalue.length - 1);
      }
	  return argvalue;
    }

	function error(elem, text) {
		if (i_errfound) return;
		window.alert (text);
		elem.focus();
		i_errfound=true;
	}

	function ValidLength(item, len) {
	//true if item.length >= len
		return (item.length >= len);
	}


	function gjfTxtOnChg(frmname, domain, dependent, errtext)	 {
	//avoid chg in visible text by chk value against hidden field value
		i_errfound= false;
		var oValue = eval('document.' + frmname + '.' + dependent).value;
		var nValue = eval('document.' + frmname + '.' + domain).value;
		if (parseFloat(oValue) != parseFloat(nValue))	     {
			error(eval('document.' + frmname + '.' + domain), errtext);
			eval('document.' + frmname + '.' + domain).value = oValue;
		};
	}


	function gjfCeilTxtOnChg(frmname, domain, dependent, errtext)	     {
	//avoid chg in visible text by chk value against hidden field value
		i_errfound= false;
		var oValue = gjfCeilingFloat(eval('document.' + frmname + '.' + dependent).value, 1);
		var nValue = eval('document.' + frmname + '.' + domain).value;
		if (parseFloat(oValue) != parseFloat(nValue))	     {
			error(eval('document.' + frmname + '.' + domain), errtext);
			eval('document.' + frmname + '.' + domain).value = oValue;
		};
	}

	function gjfRndTxtOnChg(frmname, domain, dependent, errtext)	    {
		//avoid chg in visible text by chk value against hidden field value
		i_errfound= false;
		var oValue = gjfRoundFloat(eval('document.' + frmname + '.' + dependent).value, 2);
		var nValue = eval('document.' + frmname + '.' + domain).value;
		if (parseFloat(oValue) != parseFloat(nValue))	     {
			error(eval('document.' + frmname + '.' + domain), errtext);
			eval('document.' + frmname + '.' + domain).value = oValue;
		};
	}


	function gjfValidEmail(item) {
		var alertEmailAddrNotEntered	     ="Sorry, you must enter your email address.";
		var alertInvalidCharFoundInEmailAddr ="Sorry, this email address seems wrong.";
		var alertAtSignMissingInEmailAddr    ="Sorry, this email address seems wrong.";
		var alertBlankSpaceFoundInEmailAddr  ="Sorry, this email address seems wrong.";
		var invalidEmailChars = "\"|&;<>!*\\";

		email = item;

	  if (! gjfValidateAsciiData (email)) {
	    //alert(alertInvalidCharFoundInEmailAddr);
	    return false;
	  }

	  var invalidChars = invalidEmailChars;
	  for (var i = 0; i < invalidChars.length; i++) {
	    if (email.indexOf(invalidChars.charAt(i)) != -1) {
	      //alert(alertInvalidCharFoundInEmailAddr);
	      return false;
	    }
	  }

	   if (email == ""){
	    //alert(alertEmailAddrNotEntered);
	    return false;
	  }
	  if (email.indexOf("@") == -1){
	    //alert(alertAtSignMissingInEmailAddr);
	    return false;
	  }

	  if (email.indexOf(" ") != -1){
	    //alert(alertBlankSpaceFoundInEmailAddr);
	    return false;
	  }

	  if (window.RegExp) {
	    var reg1str = "(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)";
	    var reg2str = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$";

	    var reg1 = new RegExp (reg1str);
	    var reg2 = new RegExp (reg2str);

	    if (reg1.test(email) || !reg2.test(email)) {
	      //alert(alertInvalidCharFoundInEmailAddr);
	      return false;
	    }
	  }
	  return true;
	}

	function gjfValidateAsciiData(urstr) {
	//use by gjfValidEmail
	  var i;
	  var result;

	  for (i=0; i<urstr.length; i++) {
	    if ((urstr.charAt(i) < " ") || (urstr.charAt(i) > "~"))
	      return false;
	  }
	  return true;
	}

function IsNum(str) {
//chk pos numeric whole numbers
	for (var j=0; j<str.length; j++) {
		var temp = str.charAt(j);
		if (!((temp=="0") || (temp=="1") || (temp=="2") || (temp=="3") || (temp=="4") || (temp=="5") || (temp=="6") || (temp=="7") || (temp=="8") || (temp=="9") )){
			return false;
			break;
		}
	}
	return true;
}

function IsFloat(str) {
//chk pos numeric numbers (float)
    var count=0;
	for (var j=0; j<str.length; j++) {
		var temp = str.charAt(j);
		if (!((temp==".") || (temp=="0") || (temp=="1") || (temp=="2") || (temp=="3") || (temp=="4") || (temp=="5") || (temp=="6") || (temp=="7") || (temp=="8") || (temp=="9") )){
			return false;
			break;
		}
		if (temp==".")
		   count+=1;

	}
	if (str.charAt(str.length-1) == ".")
	   return false;
	return (count<=1);
}

var daysOfMonth = new Object();
daysOfMonth ['Jan'] = daysOfMonth ['January']  = daysOfMonth [1]  = 31;
daysOfMonth ['Feb'] = daysOfMonth ['February']	=  daysOfMonth [2] = 28;
daysOfMonth ['Mar'] = daysOfMonth ['March']  = daysOfMonth [3] = 31;
daysOfMonth ['Apr'] = daysOfMonth ['April']  = daysOfMonth [4] = 30;
daysOfMonth ['May'] = daysOfMonth ['May']  = daysOfMonth [5] = 31;
daysOfMonth ['Jun'] = daysOfMonth ['June']  = daysOfMonth [6] = 30;
daysOfMonth ['Jul'] = daysOfMonth ['July']  = daysOfMonth [7] = 31;
daysOfMonth ['Aug'] = daysOfMonth ['August']  = daysOfMonth [8] = 31;
daysOfMonth ['Sep'] = daysOfMonth ['September'] = daysOfMonth [9] = 30;
daysOfMonth ['Oct'] = daysOfMonth ['October']  = daysOfMonth [10] = 31;
daysOfMonth ['Nov'] = daysOfMonth ['November']	= daysOfMonth [11] = 30;
daysOfMonth ['Dec'] = daysOfMonth ['December']	= daysOfMonth [12] = 31;

//-----------------------------------------------------------------------------------------
// Validate the date when the inputs are from the Textfields
// (Where the syear, smonth, sday are in document.form_name.field_name.value !!)
//-----------------------------------------------------------------------------------------
function validTextDate(syear, smonth, sday) {

	var year = parseInt(syear,10);
	var month = parseInt(smonth,10);
	var day = parseInt(sday,10);

	return validDate(year, month, day);

}

//-----------------------------------------------------------------------------------------
// Validate the date (Generic function)
// (Where the syear, smonth, sday are in values !!)
//-----------------------------------------------------------------------------------------
function validDate(syear, smonth, sday) {

	var year = syear;
	var month = smonth;
	var day = sday;

	if (month == 0)
		return false;
	if (day == 0)
		return false;
	if (year == 0)
		return false;

	if (month < 1 || month > 12)
		return false;
	if (day < 1)
		return false;
	if (month == 2 && isLeapYear(year))
		var dayLimit = 29;
	else
		var dayLimit = daysOfMonth[month];
	if (day > dayLimit)
		return false;


	return true;

}

//-----------------------------------------------------------------------------------------
// Check for Expiry date of Credit Card
// Syntax: validExpiry(document.regform.MonthExpiry, document.regform.YearExpiry)
//-----------------------------------------------------------------------------------------
function validExpiryDate(smonth, syear, thisyear, thismonth) {

//	var thisyear = <%=Year(Date)%>;
//	var thismonth = <%=Month(Date)%>;
	
//    thisyear = 2000;
//    thismonth = 8;

	monthIndex = smonth.selectedIndex;
	monthval = smonth.options[monthIndex].value;
    testmonth = parseInt(monthval,10);

	yearIndex = syear.selectedIndex;
    yearval = syear.options[yearIndex].value;
    testyear = parseInt(yearval,10);

    if (testyear == 0)
	    return false;
	if (testmonth == 0)
		return false;

    if (thisyear < testyear)
		return true;
    else if (thismonth > testmonth)
	return false;
    else if (thismonth <= testmonth)
	return true;
}

//-----------------------------------------------------------------------------------------
// Check for leap year
//-----------------------------------------------------------------------------------------
function isLeapYear(y) {
	return (y % 4 == 0  && (y % 400 == 0 || y % 100 != 0))
}

//-----------------------------------------------------------------------------------------
// Validate Credit Card number
// validCreditCard(document.regform.CardType, document.regform.CardNo)
//-----------------------------------------------------------------------------------------

// non-digit characters which are allowed in credit card numbers
var creditCardDelimiters = "- "

// Removes all characters which appear in string bag from string s.

function stripCharsInBag (s, bag) {
    var i;
    var returnString = "";

    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.

    for (i = 0; i < s.length; i++) {
	// Check that current character isn't whitespace.
	var c = s.charAt(i);
	if (bag.indexOf(c) == -1)
			returnString += c;
    }

    return returnString;
}

function isCreditCard(st) {

  // Encoding only works on cards with less than 19 digits
  if (st.length > 19)
    return (false);

  sum = 0; mul = 1; l = st.length;
  for (i = 0; i < l; i++) {
    digit = st.substring(l-i-1,l-i);
    tproduct = parseInt(digit ,10)*mul;
    if (tproduct >= 10)
      sum += (tproduct % 10) + 1;
    else
      sum += tproduct;
    if (mul == 1)
      mul++;
    else
      mul--;
  }

  if ((sum % 10) == 0)
    return (true);
  else
    return (false);

} // END FUNCTION isCreditCard()

function isVisa(cc) {

  if (((cc.length == 16) || (cc.length == 13)) &&
      (cc.substring(0,1) == 4))
    return isCreditCard(cc);
  return false;
}  // END FUNCTION isVisa()

function isMasterCard(cc) {

  var firstdig = cc.substring(0,1);
  var seconddig = cc.substring(1,2);
  if ((cc.length == 16) && (firstdig == 5) &&
      ((seconddig >= 1) && (seconddig <= 5)))
    return isCreditCard(cc);
  return false;

} // END FUNCTION isMasterCard()

function isAmericanExpress(cc) {

  var firstdig = cc.substring(0,1);
  var seconddig = cc.substring(1,2);
  if ((cc.length == 15) && (firstdig == 3) && ((seconddig == 4) || (seconddig == 7)))
    return isCreditCard(cc);
  return false;

} // END FUNCTION isAmericanExpress()

function validfulldate(testdate)
{

	if (testdate.length != 10) {
		return false;
	}
	if (!((testdate.charAt(2) == "/") && (testdate.charAt(5) == "/")))	  {
		return false;
	}
	else	    {
		var datearray = testdate.split("/");
		if ((!IsNum(datearray[2])) || (!IsNum(datearray[1])) || (!IsNum(datearray[0])))        {
			return false;
		};
		return validDate(parseInt(datearray[2],10),parseInt(datearray[1],10),parseInt(datearray[0],10));				
	}
	return true;
}

	function gjfRepeat(chars, NoOfOccurence)	{
		var tmpString = '';

		for (var i=0; i < NoOfOccurence; i ++)	      {
			tmpString = tmpString + chars
		}
		return tmpString;
	}

	function gjfCeilingFloat(objvalue, Place)	 {
	//ceiling the float up to the value of Place
		var power = Math.pow(10, Place);
		var tmp = objvalue * power;
		var intPart = parseInt(tmp, 10);
		var result;

		if (Math.round(tmp,8) != intPart)	 {
			intPart ++;
		}
		result = intPart/power;
		return result;
	}
	
	Math.ceil
	
   
		function gjfRoundFloat(objvalue, Place) {
		//round the objvalue by the value of Place
			var power = Math.pow(10, Place);
			var neg = false;
			if (objvalue < 0)	{
				neg = true;
				objvalue = objvalue * -1;
			};
			var tmp = objvalue * power;
			var intPart = parseInt(tmp, 10);
			var result;
			var tmp2 = (tmp - intPart) * 10;

			if (tmp2 >= 5)	{
				intPart ++;
			}

			result = intPart / power;
			if (neg)	{
				result = result * -1;
			};

			return result;
		}


	function gjfNewCeilingFloat(objvalue, Place)	    {
// set the -ve input to +ve, ceiling it and then change it to be -ve
		var IsNeg = false
		if (objvalue < 0)
		{
			IsNeg = true;
			objvalue *= -1;
		}
		var power = Math.pow(10, Place);
		var tmp = objvalue * power;
		var intPart = parseInt(tmp, 10);
		var result;

		if (tmp != intPart)	   {
			intPart ++;
		}
		result = intPart/power;

		if (IsNeg == true)
		{
			result *= -1;
		}

		return result;
	}

	function gjsChkDateNotOverToday        (Today, TargetDate)	  {
		//if pass date > today, then return false
		//i_errfound = false;

		var dtarr = TargetDate.value.split("/");
		var TodayArr = Today.value.split("/");

		var dtTarget = new Date(parseInt(dtarr[2], 10), parseInt(dtarr[1], 10), parseInt(dtarr[0], 10));
		var dtToday = new Date(parseInt(TodayArr[2], 10), parseInt(TodayArr[1], 10), parseInt(TodayArr[0], 10));

		if (dtTarget > dtToday)        {
			return false;
		}
		return true;
	}


	function gjsChkDateNotOverToday2	(Today, TargetDate)	   {
		//if pass date > today, then return false

		var dtarr = TargetDate.value.split("/");
		var TodayArr = Today.value.split("/");

		var dtTarget = new Date(parseInt(dtarr[2], 10), parseInt(dtarr[1], 10), parseInt(dtarr[0], 10));
		var dtToday = new Date(parseInt(TodayArr[2], 10), parseInt(TodayArr[1], 10), parseInt(TodayArr[0], 10));
		if (dtTarget >= dtToday)	{
			return false;
		}
		return true;
	}

	function gjsChkDateOverToday	    (Today, TargetDate)        {
		//if pass date > today, then return true

		var dtarr = TargetDate.value.split("/");
		var TodayArr = Today.value.split("/");

		var dtTarget = new Date(parseInt(dtarr[2], 10), parseInt(dtarr[1], 10), parseInt(dtarr[0], 10));
		var dtToday = new Date(parseInt(TodayArr[2], 10), parseInt(TodayArr[1], 10), parseInt(TodayArr[0], 10));

		if (dtTarget < dtToday)        {
			return false;
		}

		return true;
	}

 function isLetterOrDigit(c) {
	return (isLetter(c) || IsNum(c))
 }

 function isLetter(c) {

	 return ( ((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")) );
 }

 function isAlphaNumericNoSpa(str){
     for (var j=0; j<str.length; j++) {
	   var temp = str.charAt(j);
	   if (!(isLetterOrDigit(temp)) ){
		return false;
		break;
	   }
	   // if j = last term, it means true - all char are ok!! Great
	   if(j == str.length-1)
	      return true;
    }

}

	function gjsSearchItem	      ()	{
		//if pass date > today, then return true
		window.open('../System/ItemSearch.asp','my_new_window','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,copyhistory=yes,width=500,height=300,left=0,top=0');
	}

	function gjsSearchVendor	()	  {
		//if pass date > today, then return true
		window.open('../System/ContactSearch.asp?checkVendor=1','my_new_window','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,copyhistory=yes,width=500,height=300,left=0,top=0');
	}

		function gjsSearchPrinter	()	  {
		//if pass date > today, then return true
		window.open('../System/ContactSearch.asp?checkPrinter=1','my_new_window','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,copyhistory=yes,width=500,height=300,left=0,top=0');
	}

	function gjsSearchPublisher	  ()	    {
		//if pass date > today, then return true
		window.open('../System/ContactSearch.asp?checkPublisher=1','my_new_window','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,copyhistory=yes,width=500,height=300,left=0,top=0');
	}

	function gjsSearchSupplier	 ()	   {
		//if pass date > today, then return true
		window.open('../System/ContactSearch.asp?checkSupplier=1','my_new_window','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=yes,resizable=yes,copyhistory=yes,width=500,height=300,left=0,top=0');
	}

	function gjfCheckCapLetter(str){

		 if( (str.charCodeAt(0) >= 65 )&&(str.charCodeAt(0) <=90 )){
			return true;
		 }else{
			return false;
		}

	}

function gjfCheckSmallLetter(str){
	if( (str.charCodeAt(0) >= 91 )&&(str.charCodeAt(0) <=122 )){
			return true;
	}else{
			return false;
	}
}

function gjfNumSmallLetter(str){
	cCount=0;
	for (i=0; i<str.length; i++){
		if( (str.charCodeAt(i) >= 91 )&&(str.charCodeAt(i) <=122 )){
			cCount ++;
		}
	}
	return cCount;
}

function gjfNumCapLetter(str){
	cCount=0;
	for (i=0; i<str.length; i++){
		if( (str.charCodeAt(i) >= 65 )&&(str.charCodeAt(i) <=90 )){
			cCount ++;
		}
	}
	return cCount;

}



function TwoPlaceFloat(inValue){

	var power= Math.pow(10,2);
    var result = String(Math.round(power*inValue)/power);
		if (result.lastIndexOf(".") == -1){
			return result+".00";
		}else if (result.lastIndexOf(".")+2 ==result.length ){		
			return result+"0";
		}else{
			return result;
		}
}

function CheckFormDate(inDate){
	//format as dd/mm/yyyy
	var dd = inDate[0][inDate[0].selectedIndex].value;
	var mm = inDate[1][inDate[1].selectedIndex].value;
	var yy = inDate[2][inDate[2].selectedIndex].value;
	
	dateStr= dd + "/"+mm +"/" +yy;
	//alert(dateStr);
	if (!validfulldate(dateStr)){
//			alert("Please enter the date in the right format. (dd/mm/yyyy)");	    			     	        
			return false;
	}else{
			return true;
	}					
}

function BuildDate(inDate){
	//format as dd/mm/yyyy
	var dd = inDate[0][inDate[0].selectedIndex].value;
	var mm = inDate[1][inDate[1].selectedIndex].value;
	var yy = inDate[2][inDate[2].selectedIndex].value;
	return  dd + "/"+mm +"/" +yy;
}

