
    var i_errfound; //for function error()

    function gjftrim(argvalue) {
          var tmpstr = gjfltrim(argvalue);

          return gjfrtrim(tmpstr);
    }

    function gjfltrim(argvalue) {
          while (1) {
          if (argvalue.substring(0, 1) != ' ')
              break;
              argvalue = argvalue.substring(1, argvalue.length);
      }
          return argvalue;
    }

    function gjfrtrim(argvalue) {
          while (1) {
          if (argvalue.substring(argvalue.length - 1, argvalue.length)!= ' ')
              break;
              argvalue = argvalue.substring(0, argvalue.length - 1);
      }
          return argvalue;
    }

	function gjferror(elem, text) {
			if (i_errfound) return;
			window.alert (text);
			elem.focus();
			i_errfound=true;
	}

	function gjfValidLength(item, len) {
	//true if item.length >= len
			return (item.length >= len);
	}

        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 gjfIsNum(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 gjfIsFloat(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 gjfValidTextDate(syear, smonth, sday) {

        var year = parseInt(syear,10);
        var month = parseInt(smonth,10);
        var day = parseInt(sday,10);

        return gjfvalidDate(year, month, day);

}

//-----------------------------------------------------------------------------------------
// Validate the date (Generic function)
// (Where the syear, smonth, sday are in values !!)
//-----------------------------------------------------------------------------------------
function gjfValidDate(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 && gjfIsLeapYear(year))
                var dayLimit = 29;
        else
                var dayLimit = daysOfMonth[month];
        if (day > dayLimit)
                return false;


        return true;

}

//-----------------------------------------------------------------------------------------
// Check for leap year
//-----------------------------------------------------------------------------------------
function gjfIsLeapYear(y) {
        return (y % 4 == 0  && (y % 400 == 0 || y % 100 != 0))
}


function gjfValidfulldate(testdate)
{

        if (testdate.length != 10) {
                return false;
        }
        if (!((testdate.charAt(2) == "/") && (testdate.charAt(5) == "/")))        {
                return false;
        }
        else        {
                var datearray = testdate.split("/");
                if ((!gjfIsNum(datearray[2])) || (!gjfIsNum(datearray[1])) || (!gjfIsNum(datearray[0])))        {
                        return false;
                };
                return gjfValidDate(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 gjfIsLetterOrDigit(c) {
        return (gjfIsLetter(c) || gjfIsNum(c))
 }

 function gjfIsLetter(c) {

         return ( ((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")) );
 }

 function gjfIsAlphaNumericNoSpa(str){
     for (var j=0; j<str.length; j++) {
           var temp = str.charAt(j);
           if (!(gjfIsLetterOrDigit(temp)) ){
                return false;
                break;
           }
           // if j = last term, it means true - all char are ok!! Great
           if(j == str.length-1)
              return true;
    }

}

     