/**
*说明：	页面公共脚本文件，主要提供在JSP页面需要调用的公用脚本函数。
*日期：	2007-04-11
*/


/** 
*功能：	跳转到所指的文件
*参数：	url：	跳转地址 
*返回：	 
*/ 
function gotoUrl(url){
    window.location.href = url ;
}

/** 
*功能：	创建一个显示HTML内容的模态对话框
*参数：	theURL		    指定对话框要显示的文档的URL地址 
*		vArguments：	用来向对话框传递参数。
*                       传递的参数类型不限，包括数组等。
*                       对话框通过window.dialogArguments来取得传递进来的参数。 
*		sFeatures：	    描述对话框的外观等信息
*返回：	模态对话框返回值 
*/ 
function openModalDialog (theURL, vArguments, sFeatures) {
    var vReturnValue = window.showModalDialog(theURL , vArguments, sFeatures);
    return vReturnValue;
}

/** 
*功能：	创建一个显示HTML内容的非模态对话框
*参数：	theURL		    窗口地址 
*		vArguments：	用来向对话框传递参数。
*                       传递的参数类型不限，包括数组等。
*                       对话框通过window.dialogArguments来取得传递进来的参数。 
* 
*		sFeatures：	    描述对话框的外观等信息
*返回：	对话框返回值 
*/ 
function openModelessDialog (theURL, vArguments, sFeatures) {
    var vReturnValue = window.showModelessDialog(theURL , vArguments , sFeatures);
    return vReturnValue;
}

/** 
*功能：	弹出新窗口
*参数：	theURL：		窗口地址 
*		winName：		窗口名称(目标) 
*		features：      窗口的其他属性
*返回：	新窗口 
*/ 
function MM_openBrWindow(theURL,winName,features) {
  window.open(theURL,winName,features);
}

/** 
*功能：	无模式提示对话框 
*参数：	msg：		提示信息	
*返回：		
*/ 
function modelessAlert(msg) 
{ 
	window.showModelessDialog("javascript:alert(\""+escape(msg)+"\");window.close();","","status:no;resizable:no;help:no;dialogHeight:height:30px;dialogHeight:40px;"); 
} 

/** 
*功能：	刷新校验码
*参数：	imgId：		校验码图片ID	
*返回：		
*/ 
function changeValidateKey(imgId){
	var changeURL = "";
	changeURL = eval(imgId).src + '&r=' + Math.random();
	eval(imgId).src = changeURL;
	//eval(imgId).setAttribute('src',changeURL);

	 //setTimeout(function(){eval(imgId).src=changeURL; }  ,20);
}


/** 
*功能：	初始化页面特定表单(text框和select框)
*参数：	form：	表单名称
*返回：	
*/
function initFormTextAndSel(form)
{			
	// Run through elements and set value null
	for(var j = 0; j < form.length; j++) {
		var objElement = form.elements[j];
		var strElementType = objElement.type.toLowerCase();
		if(strElementType == "text") {
			//objElement.disabled = true;
			objElement.value = "";
		}
		if(strElementType == "select-one"){
			objElement.selectedIndex = 0
		}
	}	
}


/** 
*功能：	检测是否选中记录
*参数：	groupCheckBoxName：	checkbox组名称
*返回：	 
*/
function isSelectRecords(groupCheckBoxName){
    try{
                
        var hasSelect = false ;
        var groupCheckBoxs = document.getElementsByName(groupCheckBoxName);
		var n = groupCheckBoxs.length;

		for (var i=0; i<n; i++){
            if (groupCheckBoxs[i].checked) {
                hasSelect = true ;
                break  ;
            }
        }
        return (hasSelect);
    }catch(e){
        return false;
    }
}

/** 
*功能：	提交页面中所有表单到指定的文件 ，允许提交多条记录,如删除
*参数：	formName：				提交的表单对象
*		actionStr：				提交的地址 
*		msg：					提示信息,如果msg不为空，则在提交之前提示用户， 否则不提示
*		groupCheckBoxName：		checkbox组名称
*返回：	 
*/
function submitMultiRecords(formObj,actionStr,msg,groupCheckBoxName){
    try{      
        var hasSelect = false ;
        var groupCheckBoxs = document.getElementsByName(groupCheckBoxName);
		var n = groupCheckBoxs.length;

		for (var i=0; i<n; i++){
            if (groupCheckBoxs[i].checked) {
                hasSelect = true ;
                break ;
            }
        }
        if (hasSelect == false){
            alert("请选择一条或多条记录！");
            return ;
        }else{
            if (msg != "" && !confirm(msg)){
               return ;
            }
            //提交
            formObj.action = actionStr ;
            formObj.submit();
        }
    }catch(e){
        return ;
    }
}

/** 
*功能：	提交按钮之前提示用户
*参数：	msg：	提示信息,如果msg不为空，则在提交之前提示用户， 否则不提示
*返回：	如果确定提交返回true,否则返回false  
*/
function confirmOperation(msg){
    if (confirm(msg)){
       return true;
    }else{
       return false;
    }
}

/**	
*功能：	checkbox框的全选/取消全选
*参数：	obj：			选择开关的对象，是一个checkbox对象
*		formObj：		表单对象
*返回：	
*/
function selectAll(groupCheckBoxName)
{
	var groupCheckBoxs = document.getElementsByName(groupCheckBoxName);
	var n = groupCheckBoxs.length;
	for (var i=0; i<n; i++){
		groupCheckBoxs[i].checked = window.event.srcElement.checked;
	}
}

/**	
*功能：	检查复选框(单选)被选中的数目
*参数：	str：	radio,checkbox组的名称
*返回：	返回被选中的数目
*/
function getCheckNumber(str) {

	var check = 0;
	var i=0;
	if( document.all(str).length > 0 ) { 	
		for( i=0; i<document.all(str).length; i++ ) {	
			if( document.all(str).item( i ).checked  ) {			
				check += 1;			
			}
		}	
	}else{	
		if( document.all(str).checked )	
		check = 1;	
	}
	return check;
}

/**	
用途：去掉字符串两边的空格
输入：str：	有空格的字符串
	 iType：	去掉字符串的类型
			1=去掉字符串左边的空格
			2=去掉字符串左边的空格
			0=去掉字符串左边和右边的空格
返回：去掉空格后的字符串
*/
function cTrim(str, iType) {
	var sTmpStr = " ";
	var i = -1;
	if (isNull(str)) {
		return "";
	}
	if (iType == 0 || iType == 1) {
		while (sTmpStr == " ") {
			++i;
			sTmpStr = str.substr(i, 1);
		}
		str = str.substring(i);
	}
	if (iType == 0 || iType == 2) {
		sTmpStr = " ";
		i = str.length;
		while (sTmpStr == " ") {
			--i;
			sTmpStr = str.substr(i, 1);
		}
		str = str.substring(0, i + 1);
	}
	return str;
}

/**	
*功能：	检测是否是空值或零长度数据
*参数：	str：		检测要的字符串	  
*返回：	如果通过验证则返回true,否则返回false 
*/
function isNull(str)                                
{
	if(str == "" || str == null || str.length == 0)
		return true;
	else
		return false;
}

/**	
*功能：	判断是否为数字
*参数：	strNumber：		数字字符串
*返回：	如果通过验证则返回true,否则返回false 
*/
function isNumeric(strNumber)
{   	
	if (/^\d+$/.test(strNumber))
	{
	   return true;
	} 
	else 
	{
	   return false;
	}
}

/**	
*功能：	校验数字的长度和精度
*参数：	strNumber：		数字字符串
*		len：			数字位数
*		prec：			数字小数位数
*返回：	如果通过验证则返回true,否则返回false 
*/ 
function isDouble(strNumber, len, prec){
	var numReg;
	var value = strNumber;
	var strValueTemp, strInt, strDec;	
	try
	{		
		numReg =/[\-]/;
		strValueTemp = value.replace(numReg, "");
		numReg =/[\+]/;
		strValueTemp = strValueTemp.replace(numReg, "");
		//整数
		if(prec==0){
			numReg =/[\.]/;
			if(numReg.test(value) == true){
				alert("参数必须为整数类型");
				return false;	
			}			
		}		
		if(strValueTemp.indexOf(".") < 0 ){
			if(strValueTemp.length >( len - prec)){
				alert("整数位不能超过"+ (len - prec) +"位");
				return false;
			}		
		}else{
			strInt = strValueTemp.substr( 0, strValueTemp.indexOf(".") );		
			if(strInt.length >( len - prec)){
				alert("整数位不能超过"+ (len - prec) +"位");
				return false;
			}
			strDec = strValueTemp.substr( (strValueTemp.indexOf(".")+1), strValueTemp.length );	
			if(strDec.length > prec){
				alert("小数位不能超过"+  prec +"位");
				return false;
			}		
		}		
		return true;
	}catch(e){
		alert("in isDouble = " + e);
		return false;
	}	
}

/** 
*功能：	检查参数对象的值是否符合E-Mail格式 
*参数：	str：	参数的字符串 
*返回：	如果通过验证返回true,否则返回false 
*/ 
function isEmail(strEmail)                             
{
	var myReg = /^[_a-zA-Z][_a-zA-Z0-9]*@[_a-z0-9]+\.[a-zA-Z]{2,5}(\.[a-zA-Z]{2,3})?$/;
	var emailReg = /^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/;
	if(emailReg.test(strEmail))
		return true;
	return false;
}

/**
*规则：	移动: 前3位 134-139  或者 159   一共11位
*		联通: 前3位 130-133  或者 159   一共11位
*		小灵通: 第一位为0 一共11位
*	     这是最新规则
*要求：
*　　	(1)电话号码由数字、"("、")"和"-"构成
*　　	(2)电话号码为3到8位
*　　	(3)如果电话号码中包含有区号，那么区号为三位或四位
*　　	(4)区号用"("、")"或"-"和其他部分隔开
*　　	(5)移动电话号码为11或12位，如果为12位,那么第一位为0
*　　	(6)11位移动电话号码的第一位和第二位为"13"
*　　	(7)12位移动电话号码的第二位和第三位为"13"
*　　	根据这几条规则，可以与出以下正则表达式：
*　　	(^[0-9]{3,4}-[0-9]{3,8}$)|(^[0-9]{3,8}$)|(^([0-9]{3,4})[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$)
*功能：	检查参数的电话号码格式是否正确
*参数：	str：	字符串
*返回：	如果通过验证返回true,否则返回false
*/
function isPhone(str){   
	var regu =/(^[1][3][0-9]{9}$)|(^[1][5][3][0-9]{8}$)|(^[1][5][9][0-9]{8}$)|(^[0][1-9]{1}[0-9]{9}$)/;	
	var reg = new RegExp(regu);	
	if (reg.test(str)) {	
		return true;	
	}else{	
		return false;
	}
}

/** 
*功能：	判断用户名是否是字母 数字 . _等组成并且4-20位
*参数：	str：		参数的字符串 
*返回：	如果通过验证返回true,否则返回false 
*/ 
function isUsername(str){
	var filter=/^\s*[.A-Za-z0-9_-]{4,20}\s*$/;
	if(!filter.test(str)) return false;
	return true;
}

/** 
*功能：	判断字符串中是否含有特殊字符
*参数：	str：		验证的字符串 
*		spChars：	特殊字符
*返回：	如果通过验证返回true,否则返回false 
*/ 
function isValidCode(str, special){

	var spChars = /[~!@%^&*();\'\"\"?><\[\]{}\|,:\/=+—“”‘]/;	
	
	if(typeof(special) != 'undefined') spChars = special;
	
	if (spChars.test(str)){
        alert("不能以含有非法字符("+str.match(spChars)+")！");       
        return true;
	}
	return false;
}

/** 
*功能：	判断密码是否是字母 数字等组成并且6-20位
*参数：	str：		参数的字符串 
*返回：	如果通过验证返回true,否则返回false 
*/ 
function isPassword(str){
	var filter = /^([0-9a-zA-Z]){6,20}$/;
	if (!filter.exec(str)) return false;
		return true;
}

/** 
用途：日期比较
输入：strDate1：	日期1 
	  strDate2：	日期2
返回： 
*/
function compareDate(strDate1, strDate2) {
	var nStart1;
	var nEnd1;
	var nYear1;
	var nMonth1;
	var nDay1;
	var nStart2;
	var nEnd2;
	var nYear2;
	var nMonth2;
	var nDay2;
	strDate1 = cTrim(strDate1, 0);
	strDate2 = cTrim(strDate2, 0);
	if ((nStart1 = strDate1.indexOf("/", 0)) < 0) {
		nStart1 = strDate1.indexOf("-", 0);
		nEnd1 = strDate1.indexOf("-", nStart1 + 1);
	} else {
		nEnd1 = strDate1.indexOf("/", nStart1 + 1);
	}
	nYear1 = eval(strDate1.substring(0, nStart1));
	nMonth1 = eval(strDate1.substring(nStart1 + 1, nEnd1));
	nDay1 = eval(strDate1.substring(nEnd1 + 1, strDate1.length));
	if ((nStart2 = strDate2.indexOf("/", 0)) < 0) {
		nStart2 = strDate2.indexOf("-", 0);
		nEnd2 = strDate2.indexOf("-", nStart2 + 1);
	} else {
		nEnd2 = strDate2.indexOf("/", nStart2 + 1);
	}
	nYear2 = eval(strDate2.substring(0, nStart2));
	nMonth2 = eval(strDate2.substring(nStart2 + 1, nEnd2));
	nDay2 = eval(strDate2.substring(nEnd2 + 1, strDate2.length));
	if (nYear1 > nYear2) {
		return (1);
	} else {
		if (nYear1 < nYear2) {
			return (-1);
		} else {
			if (nMonth1 > nMonth2) {
				return (1);
			} else {
				if (nMonth1 < nMonth2) {
					return (-1);
				} else {
					if (nDay1 > nDay2) {
						return (1);
					} else {
						if (nDay1 < nDay2) {
							return (-1);
						} else {
							return (-1);
						}
					}
				}
			}
		}
	}
}
