  function validateForm(theForm){	  

	var elArr = theForm.elements;
	for(var i = 0; i < elArr.length; i++)
	with(elArr[i]){ 
		var v = elArr[i].validator;
		var thePat = patternsDict[v];
		var typeName = patternsType[v];
		var sample = patternsSample[v];
		var fieldName = elArr[i].fieldName;		
		var maxNLen = elArr[i].maxNLen;
		var minNLen = elArr[i].minNLen;
		var required = elArr[i].required;
		var equalsField = elArr[i].equalsField;


		if(typeof equalsField != 'undefined') {
			if(value != elArr[equalsField].value) {
				alert("The value in ["+fieldName+"] and ["+elArr[equalsField].fieldName+"] should be equal.\n\nPlease input again.");
				elArr[i].focus();
				return false;
			}
		}

		if(!v && !required && !maxNLen)
			continue;

		elArr[i].focus();

		var trimValue = value.trim();
		
		if("true"==required) {
			if(trimValue.length==0) {
				alert("Please input the ["+fieldName+"]");
				return false;
			}
		} else {

			if(trimValue.length==0)
				continue;
		}

		var nLen = trimValue.nLen();

		if(typeof maxNLen != 'undefined' && nLen>maxNLen) {
			alert("In ["+fieldName+"], max length is "+maxNLen+", but you have inputed "+nLen+" characters.\n\nPlease delete some characters.");
			return false;
		}	
		
		if(typeof minNLen != 'undefined' && nLen<minNLen) {
			alert("In ["+fieldName+"], min length is "+minNLen+", but you have inputed "+nLen+" characters.\n\nPlease add some characters.");
			return false;
		}	

		if(!v)
			continue;

		var gotIt = thePat.exec(value);		

		if(!gotIt){
			alert("In ["+fieldName+"], only "+typeName+"is valid.\n\nBut you have inputed a ["+value+"]");
			
			return false;
		}
	} 
	return true;
  }




function getRadioValue(radioGroup) {
	if (radioGroup.type == "radio" ) {
		return (radioGroup.checked)?radioGroup.value:"";
	}
    for ( var i=0; i<radioGroup.length; i++) {
		//alert("id="+i+" & "+radioGroup[i].value);
        if (radioGroup[i].checked)
            return radioGroup[i].value;
    }
    return "";
}


function setSelect(webItems, isChecked) {
    for(i=0;i<webItems.length;i++){
        if (webItems[i].type.toLowerCase() == "checkbox"){
            webItems[i].checked = isChecked;
        }
    }
}


function selectAll(){
    var webItems=document.all.tags("input");
    setSelect(webItems, true);
}


function selectNone(){
    var webItems=document.all.tags("input");
    setSelect(webItems, false);
}


function modalDialog( url ) {
	var xWidth = (screenWidth*3/4);
	var xHeight = (screenHeight*3/4);
	return window.showModalDialog(url,0,"dialogWidth:"+xWidth+"px;dialogHeight:"+xHeight+"px;resizable=yes;");
}

function openWindow( url ) {
	var wHeight = 430;
	var wWidth = 600;
	var wTop = (screen.height - wHeight) / 2;
	var wLeft = (screen.width - wWidth ) / 2;
	window.open (url, 0, 'height='+wHeight+', width=' + wWidth + ', top=' + wTop + ', left=' + wLeft + ', toolbar=yes, menubar=no, scrollbars=yes, resizable=yes,location=no, status=no');
}





function logicalInput(object,objType, fieldCaption) {
	var typeCaption = "";
	var typeTip = "";
	objType = objType.toLowerCase();
	if ( objType == "integer" || objType == "int" ){
		typeCaption = "Integer";
		typeTip = "123";
	} else if ( objType == "string" ) {
		typeCaption = "String";
		typeTip = "This is a book.";
	} else if ( objType == "number") {
		typeCaption = "Number";
		typeTip = "123";
	} else if ( objType == "date" )	{
		typeCaption = "Date";
		typeTip = "2009-06-23";
	} else if ( objType == "datetime" )	{
		typeCaption = "Datetime";
		typeTip = "2009-06-23 09:30:00";
	}

	if ( logicalObjectValue(object, objType) ){
		return true;
	} else {
		object.focus();
		var inputValue = object.value;
		if ( inputValue == "") {
			inputValue = "You should input something";
		} else {
			inputValue = "This is what you've inputed ["+inputValue+"]";
		}
		if (fieldCaption != ""){
			fieldCaption = "In["+fieldCaption+"]";
		}
		alert(fieldCaption+", please input a ["+typeCaption+"] data\n\n"+inputValue+" \n\nExample: ["+typeTip+"]");
		return false;
	}
}


function logicalValue(object,objType) {
	return logicalInput(object, objType, '');
}



function logicalObjectValue(object,objType) {

	if (typeof object == "undefined"){
		return true;
	}

	var str = object.value;
	var temp = objType.toLowerCase();

    if (temp=='integer' || temp=="int" ) {
		return isInteger(str);        
    } else if (temp=='number') {
        return isNumber(str);
    } else if (temp=='string') {
        //return specialString(str);
		return !isEmpty(str);
    } else if (temp=='date'  || objType == "datetime") {
        return isDate(str);
    } else {
        alert('"'+temp+'"is not valid');
        return false;
    }
}


function isEmpty(value) {
	if ( value == ""){	
		return true;
	} else {
		return false;
	}
}

function isInteger(string ,sign) {
    var integer;

    if ((sign!=null) && (sign!='-') && (sign!='+')) {
        alert('IsInter(string,sign)Error：\nsign is null or "-" or "+"');
        return false;
    }

    integer = parseInt(string);

    if (isNaN(integer)) {
        return false;
    } else if (integer.toString().length==string.length) {
        if ((sign==null) || (sign=='-' && integer<0) || (sign=='+' && integer>0)) {
            return true;
        }
        else
            return false;
    } else
        return false;
}

function isDate(DateString , Dilimeter) {
    if (DateString==null) return false;
    if (Dilimeter=='' || Dilimeter==null)
        Dilimeter = '-';
    var tempy='';
    var tempm='';
    var tempd='';
    var tempArray;
    if (DateString.length<8 && DateString.length>30)
        return false;
    tempArray = DateString.split(Dilimeter);
    if (tempArray.length!=3)
        return false;
    if (tempArray[0].length==4) {
        tempy = tempArray[0];
        tempd = tempArray[2];
    } else {
        tempy = tempArray[2];
        tempd = tempArray[1];
    }
    tempm = tempArray[1];

    var tDateString = tempy + '/'+tempm + '/'+tempd;//+' 8:0:0';
	//alert(tDateString);
    var tempDate = new Date(tDateString);
	//alert(tempDate);

    if (isNaN(tempDate))
        return false;
	return true;

}

function isNumber(string,sign) {
    var number;
    if (string==null) return false;
    if ((sign!=null) && (sign!='-') && (sign!='+')) {
        alert('isNumber(string,sign) Error \nsign is null or "-" or "+"');
        return false;
    }
    number = new Number(string);
    if (isNaN(number)) {
        return false;
    } else if ((sign==null) || (sign=='-' && number<0) || (sign=='+' && number>0)) {
        return true;
    } else
        return false;
}

function specialString(string,compare,BelongOrNot) {
    if ((string==null) || (compare==null) || ((BelongOrNot!=null) && (BelongOrNot!=true) && (BelongOrNot!=false))) {
        alert('function specialString(string,compare,BelongOrNot) error');
        return false;
    }
    if (BelongOrNot==null || BelongOrNot==true) {
        for (var i=0;i<string.length;i++) {
            if (compare.indexOf(string.charAt(i))==-1)
                return false
            }
            return true;
    } else {
        for (var i=0;i<string.length;i++) {
            if (compare.indexOf(string.charAt(i))!=-1)
                return false
            }
            return true;
    }
}

function isCheck(obj,caption){
    var leng=obj.length;
    for(var i=0;i<leng;i++){
        if (obj[i].checked) return true;
    }
    alert(caption+" must be checked!");
    return false;
}


function refreshLead(id) {
	window.showModalDialog('/en/leadservice.jsp?do=refresh&id='+id,0,'dialogWidth:480px;dialogHeight:320px;resizable=no;');
}

function removeLead(id) {
	if(confirmDelete()) {
		window.showModalDialog('/en/leadservice.jsp?do=delete&id='+id,0,'dialogWidth:480px;dialogHeight:320px;resizable=no;');
	}
}

function confirmDelete() {
	return confirm('Are you sure to remove it?');
}

function checkPageNumber() {
	return logicalInput( page.currentPage, 'int', 'page' );
}

function removeRecord(object, url) {
	if (!confirmDelete())
		return false;
	object.location=url;
}



function checkEngString(val){
	for(var i=0;i<val.length;i++){
		if (val.charAt(i)<'0' || (val.charAt(i)>'9' && val.charAt(i)<'A') || (val.charAt(i)>'Z' && val.charAt(i)<'a') || val.charAt(i)>'z'){
			return false;
		}
	}
	return true;
}


	function closeWindow() {
		window.self.opener=window.self;
		window.self.close();
	}
	
	var patternsDict = new Object();
	var patternsType = new Object();
	var patternsSample = new Object();


	function initpatternsDict() {
		patternsDict.emailPat =/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;
		patternsType.emailPat = "E-mail";
		patternsSample.emailPat = "lucy@yahoo.com";
		patternsDict.floatPat =/^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$/;
		patternsType.floatPat = "Float";
		patternsSample.floatPat = "2999.00 or 2999 or 0.50";
		patternsDict.digitPat =/^[0-9]{1,20}$/;
		patternsDict.telPat =/^[+]{0,1}(\d){1,3}[ ]?([-]?((\d)|[ ]){1,12})+$/;
		patternsDict.letterPat =/^[a-zA-Z0-9_]+$/
		patternsType.letterPat = "a-z or A-Z or _";
		patternsSample.letterPat = "google_123";
	}

	initpatternsDict();


String.prototype.nLen=function(){return this.replace(/[^\x00-\xff]/g,"aa").length;}
String.prototype.trim = function(){return this.replace(/(^\s*)|(\s*$)/g, "");}


function openDateTimeBrowse(formName,textbox,currentdate) {

  var xCoord=event.clientX;
  var yCoord=event.clientY;
  if (xCoord+320>=screen.width-50)
      xCoord=xCoord-50;
  if (yCoord+180>=screen.height-100)
      yCoord=yCoord-100;
  tmp=open('util/smartdate/calendar1.jsp?formname='+formName+'&textname='+textbox.name+'&textvalue='+currentdate,'Calendar','top='+ yCoord +',left=' + xCoord +',directories=no,menubar=no,scrollbars=no,resizable=no,location=no,toolbar=no,width=320,height=185');
  tmp.focus();
}


function openDate(txtName){
	var obj=eval("document.mainForm."+txtName);
	openDateTimeBrowse(obj);
}


function formatDate(dateObj) {
	if(!dateObj)
		return "";
	var year = dateObj.getYear();
	year = (year<1000)?year+1900:year;

	var month = dateObj.getMonth()+1;
	month = (month<10)?"0"+month:month;

	var day = dateObj.getDate();
	day = (day<10)?"0"+day:day;

	return year+"-"+month+"-"+day;
}

function getDate() {
	return formatDate(new Date());
}

function str2date(dateString) {
	var dob = new Date(dateString.substring(0,4),dateString.substring(5,7)-1,dateString.substring(8,10));
    return dob;
}

function monthOffset(dateString, offset) {
	var dob = new Date(dateString.substring(0,4),dateString.substring(5,7)-(1-offset),dateString.substring(8,10));	
    return formatDate(dob);
}

function timeOffset(dateString, yearOffset, monthOffset, dayOffset) {	
	var dob = new Date(dateString.substring(0,4)-(-yearOffset),dateString.substring(5,7)-(1-monthOffset),dateString.substring(8,10)-(-dayOffset));	
    return formatDate(dob);
}
