var i_errfound; //for function error()
var isCheckAll = false;

String.prototype.trim=function()
{
   return   this.replace(/^\s*(.*?)[\s\n]*$/g,   '$1');
   
} 

function mouseOver(msg)
{
   alert(msg);
}
function mouseOut()
{
//document.b1.src ="b_pink.gif";
}


function popup(val_1, val_2) {
	window.open('select_city.php?field=' + val_1 + '&field2=' + val_2,'','width=300,height=150,location=no,menubar=no,status=no,toolbar=no,scrollbars=yes,resizable=yes,left=100,top=50')
}

/*
function popup(val_1, val_2) {
	window.open('select_city.php?field=' + val_1,'','width=300,height=150,location=no,menubar=no,status=no,toolbar=no,scrollbars=yes,resizable=yes,left=100,top=50')
}
*/
function changeForm(location)
{
   document.regform.action = location;
}

function checkAll() {   
   for (x = 1; x <= document.regform.TotalNoOfRecord.value;x++) {
      eval("document.regform.chkSend" + x).checked = true;
      // = true;
   }
/*   
   if (checkBoxes.length >= 2)
   {
      for (i = 0; i < checkBoxes.length; i++)
	     field[i].checked = true ;
   }
   else {
      document.regform.checkbox.checked = true
   }
*/
}

function uncheckAll()
{
   var x;
   for (x = 1; x <= document.regform.TotalNoOfRecord.value;x++) {
      eval("document.regform.chkSend" + x).checked = false;
      // = true;
   }
/*
   if (field.length >= 2)
   {
      for (i = 0; i < field.length; i++)
	     field[i].checked = false ;
   }
   else {
      document.regform.checkbox.checked = false
   }
*/   
}

function postBack()
{
   document.regform.submit();
}

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 gjferror2(text) {
	if (i_errfound) return;
	
	window.alert (text);
	i_errfound=true;
}

function gjfValidLength(item, len) {
	return (item.length >= len);
}

 //-----------------------------------------------------------------------------------------
 // Check for valid email
 //-----------------------------------------------------------------------------------------
 function validEmail(item) {
        if (!gjfValidLength(item,5)) {
                return false;
        }
        else if ((item.indexOf('@', 0) == -1) || (item.indexOf (".", 0) == -1)) {
                return false;
    	}
    	else {
	    	return true;
    	}
 }

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 gjfIsHKID(str) {
	//chk pos numeric whole numbers
	//alert(str.charAt(0));
	if (str.length < 7){
		return false;
	}else{
		if (isChar(str.charAt(0)) && gjfIsNum(str.substring(1, str.length))) 
			return true;
		else
			return false;
	}
}

function isChar(c) {
	return "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".indexOf(c) != -1;
}

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==".") || (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 * 1;
	var month = smonth * 1;
	var day = sday * 1;

	if (isNaN(year))
		return false;
	if (isNaN(month))
		return false;
	if (isNaN(day))
		return false;
	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))
}

//check Date Format mm/dd/yyyy format
function gjfValidfulldate3(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[0], 10), parseInt(datearray[1], 10));
    }

    return true;
}

//check Date Format dd/m/yyyy format
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 gjfIsName(str) {
	var isNotName = false;
	var hasLetter = false;
	
	for (var j=0; j<str.length; j++) {
		var temp = str.charAt(j);	

		if (!gjfIsLetter(temp)) {
			if ((temp!=" ") && (temp!="'") && (temp!=",") && (temp!="-") && (temp!="(") && (temp!=")")) {
				isNotName = true;
				break;
			}
		}
		else {
			hasLetter = true;
		}
	}
	
	if (!hasLetter)
		return false;
	
	return !isNotName;
}
 
function gjfIsNotEnglishChar(c){
	return (((c >= " ") && (c <= "~")) || (escape(c) == "%0D")  || (escape(c) == "%0A"));
}
 
function gjfIsEnglish(str) {
	var hasNonEnglish = false;
     
	for (var j=0; j<str.length; j++) {
		var temp = str.charAt(j);
		
		if (!(gjfIsNotEnglishChar(temp)) ){
			hasNonEnglish = true;
			break;
		}
	}
    
	return !hasNonEnglish;
}

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;
	}
}

function wordcount(string) {
	var a = string.split(/\s+/g); // split the sentence into an array of words
	return a.length;
}

function checkfieldword(textArea,fieldsize) {
	if (wordcount(textArea.value) > fieldsize) {
		return false;
	}		
	
	return true;
}
	
function gjfIsTelephone(str) {
	if (gjftrim(str) == "") { 
		return false;
	}

	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") || (temp=="(") || (temp==")") || (temp=="+") || (temp=="-") || (temp==" "))) {
			return false;
			break;
		}
		
		if(j == str.length-1)
			return true;
	}
}

function gjfIsNotEnglishChar(c){
	return (((c >= " ") && (c <= "~")) || (escape(c) == "%0D")  || (escape(c) == "%0A"));
}
 
function gjfIsEnglish(str) {
	var hasNonEnglish = false;
     
	for (var j=0; j<str.length; j++) {
		var temp = str.charAt(j);
		
		if (!(gjfIsNotEnglishChar(temp)) ){
			hasNonEnglish = true;
			break;
		}
	}
    
	return !hasNonEnglish;
}

function Compare2Days(testdate1, testdate2){
	//testdate1 should be the earlier date
	datearray1 = testdate1.split("-");
	datearray2 = testdate2.split("-");
    targetDate1 = new Date(parseInt(datearray1[0],10),parseInt(datearray1[1]-1,10),parseInt(datearray1[2],10));
    targetDate2 = new Date(parseInt(datearray2[0],10),parseInt(datearray2[1]-1,10),parseInt(datearray2[2],10));	    	    
    
   
    if ((targetDate1 - targetDate2) == 0) {
		return 0;
	}else if ((targetDate1 - targetDate2)> 0) {	
		return -1;
    }else{
		return 1;
    }
	
}

function isSpace(c) {
	return (c == " ");
}

function isLetter(c) {
	return ( ((c >= "a") && (c <= "z")) || ((c >= "A") && (c <= "Z")) );
}

function isAlphabet(str){
	for (var j=0; j<str.length; j++) {
		var temp = str.charAt(j);
		if (!(isLetter(temp)) && !(isSpace(temp))){
			return false;
			break;
		}

		// if j = last term, it means true - all char are ok!! Great
		if(j == str.length-1)
			return true;
	}
}

function isAlphabet2(str){
	for (var j=0; j<str.length; j++) {
		var temp = str.charAt(j);
		if (!(isLetter(temp)) && !(isSpace(temp)) && (temp != "/")){
			return false;
			break;
		}

		// if j = last term, it means true - all char are ok!! Great
		if(j == str.length-1)
			return true;
	}
}

function validChinaMobile(item) {
	var phonereg = /^13[0-9]{9}$|^15[0-9]{9}$|^18[0-9]{9}$/
	
	if (phonereg.test(item) == false)
		return false;

	return true;
}

function containSlash(str) {
	var noOfSlash;
	noOfSlash = 0;

	for (var j=0; j<str.length; j++) {
		var temp = str.charAt(j);
		if (temp == "/") {
			noOfSlash++;
		}
	}
	
	return noOfSlash;
}

function charOnKeyboard(str) {
	var charlist = '`1234567890-=qwertyuiop[]\asdfghjkl;\'zxcvbnm,./~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>? ';

	for (var j=0; j<str.length; j++) {
		if (charlist.indexOf(str.charAt(j)) != -1) {
			return true;
			break;
		}
	}

	return false;
}

//check Date Format yyyy-mm-dd format
function gjfValidfulldate2(testdate) {

    if (testdate.length != 10) {

        return false;
    }
    if (!((testdate.charAt(4) == "-") && (testdate.charAt(7) == "-"))) {
        return false;
    }
    else {

        var datearray = testdate.split("-");
        if ((!isNumeric(datearray[2])) || (!isNumeric(datearray[1])) || (!isNumeric(datearray[0]))) {
            return false;
        }
        return validDate(parseInt(datearray[0], 10), parseInt(datearray[1], 10), parseInt(datearray[2], 10));
    }
    return true;
}