
    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 (tmp != intPart)        {
                        intPart ++;
                }
                result = intPart/power;
                return result;
        }
   
		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');
        }