﻿// JScript 文件
var IsDataModified = false;
var IsError = false;
var timeoutlist = new Array();
var fieldDEF = "";
var WEBROOT = "";

//==================
//
// 将字符转换成整数
//
//==================
function $i(i){
    try{
        return parseInt(i);
    }catch(ex){
        return 0;
    }
}
function $(elementId) {
    return document.getElementById(elementId);
}
function $v(elementId) {
    var o = $(elementId);
    if (o != undefined && o != null) {
        return o.value;
    }
    else {
        return null;
    }
}
function getWebRoot(){
    var pathName = window.location.pathname;
    var virtualPath = "";
    var temp = pathName.substring(1, pathName.length).split("/");
    // 如果数组大于等于2，说明是虚拟目录，否则是网站目录
    if (temp.length >= 2){
        virtualPath = "/"; //("/" + temp[0] + "/");
    } else {
        virtualPath = "/";
    } 
    return virtualPath;
}

WEBROOT = getWebRoot();

var showAjaxProcess = true;
var cssReadOnly = "textboxR";

// 计算当前字符长度，汉字按2位来计算
function CountString(str){
	var len;
	var i;
	len = 0;
	for (i=0; i<str.length; i++){
		if (str.charCodeAt(i) > 255){
			len +=2;
		} else {
			len ++;
		}
	}
	return len; 
}

function SetFocus(id)
{
	var e = document.getElementById(id);
	if (e != null && e.focus != null)
		e.focus();
}

function Select(id)
{
	var e = document.getElementById(id);
	if (e== null || e == undefined)
	{
		return;
	}
	if (e.focus != null)
		e.focus();
	if (e.select != null)
		e.select();
}

// 
// 系统自动按当前屏幕大小
// 最大化打开窗口
// 打开时自动去除状态栏、工具栏
// 
function OpenClientWindow(url) {
    var p = url;
    var win = window.open(p, "", "resizable=yes, toolbar=no, menubar=no, scrollbars=yes");
	windowWidth = window.screen.availWidth;
	windowHeight = window.screen.availHeight;
	win.resizeTo(windowWidth,windowHeight);
	win.moveTo(0, 0);
}
//
// 使用模态方式打开窗口
// 打开时自动去除状态栏、工具栏
// 
function OpenModalWindow(url, innerWidth, innerHeight)
{
	return window.showModalDialog(url, null, 'dialogWidth:' + innerWidth + 'px;dialogHeight:' + innerHeight
	 + 'px;help:no;unadorned:no;resizable:no;status:no');
}
// Open A Message Box
function OpenMessageWindow(url)
{
	window.showModalDialog(url, null, 'dialogWidth:450px;dialogHeight:300px;help:no;unadorned:no;resizable:no;status:no')
}

//弹出新窗在中间位置
function popcenter(url,w,h){
        x=w;
        y=h;
        l=(screen.width/2)-(x/2);
        t=(screen.height/2)-(y/2);
        s="scrollbars=yes,toolbar=no,location=no,status=no,menubar=no,resizable=yes";
        s+=" width=" + x + ", height=" + y + ", left=" + l + ", top=" + t;
        MRV=window.open(url,"",s);
}

function doPrint()
{
    var _printBlock = document.getElementById("printBlock");
    if (_printBlock == null || _printBlock == undefined){
        alert("未找到打印区域定义，请联系管理员。");
        return;
    }
	var InnerScript = printBlock.innerHTML;
	var win = window.open("about:blank", "", "resizable=yes, toolbar=no, menubar=no, scrollbars=yes");
	var windowWidth = window.screen.availWidth;
	var windowHeight = window.screen.availHeight;
	win.resizeTo(windowWidth,windowHeight);
	win.moveTo(0, 0);
	win.document.open();
	win.document.write("<link href=\"" + WEBROOT + "styles/printcss.css\" rel=\"stylesheet\" type=\"text/css\" />\r\n<br>");
	win.document.write(InnerScript);
	win.document.close();
	win.document.title="打印预览";
	win.print();
}
function doExit()
{
    if (!confirm("您确定退出当前应用窗口?")){
        return false;
    }
    window.close();
}

// 设置当前文档只读属性
function LockDocument()
{
	var objs = document.getElementsByTagName("input");
	for(var i = 0; i < objs.length; i ++){
	    var o = objs[i];
	    o.readOnly = true;
	    o.className = cssReadOnly;
	    o.onblur = "";
	    o.onfocus = "";
	}
}
// 设置当前页面元素组只读属性
// 多个元素使用“,”分隔
function LockElements(elements)
{
	var objs = elements.spilt(",");
	for(var i = 0; i < objs.length; i ++){
	    var o = document.getElementById(objs[i]);
		if (o == null || o == undefined)
		{
			continue;
		}
	    o.readOnly = true;
	    o.className = cssReadOnly;
	    o.onblur = "";
	    o.onfocus = "";
	}
}

// Ajax工具
function AjaxUtils(url,pars,handleFun,errorHandFun,sendType,responseType)
{
	this.url=url;
	if(pars==null) {
		this.pars=null;
	}else {
		this.pars=pars;
	}
	this.handleFun=handleFun;
	if(sendType==null){
		//默认用POST发送
		//this.sendType="POST";
		this.sendType="GET";
	}else {
		this.sendType=sendType.toUpperCase();
	}
	if(responseType!=null){
		this.responseType = responseType.toUpperCase();
	}
	this.newXMLHttpRequest = newXMLHttpRequest;
	this.sendURL=sendRequest;
	this.getReadyStateHandler=getReadyStateHandler;
	this.errorHandleFun=errorHandFun;
}

// 创建HttpRequest
function newXMLHttpRequest()
{
	if(window.ActiveXObject)
	{
		isIE=true;
		try {
		    //xmlhttp
      		return new ActiveXObject("Msxml2.XMLHTTP");
    	} catch (e1) {}
    	try {
    	    //xmlhttp
    	    return new ActiveXObject("Microsoft.XMLHTTP");
    	} catch (e2) {}
    }else {
	  isIE=false;
	  return new XMLHttpRequest();
    }
    alert("初始化xmlHTTP对象出现异常");
    return false;
}
function getTime(){
    var d = new Date();
    return d.toLocaleTimeString();
}

function sendRequest()
{
    if (showAjaxProcess){
        showLoadingPanel('');
    }
	var d = new Date();
	var req=this.newXMLHttpRequest();
	if(this.handleFun!=null){
		var handler = this.getReadyStateHandler(req,this.responseType,this.handleFun,this.errorHandleFun);
		req.onreadystatechange = handler;
	}
	if(this.sendType=="GET"){
		if(this.pars!=null){
		    if (this.url.indexOf("?") != -1)
		        req.open("GET",this.url+"&sjc="+d.toLocaleTimeString()+"&"+this.pars, true);
		    else
		        req.open("GET",this.url+"?sjc="+d.toLocaleTimeString()+"&"+this.pars, true);
		} else {
		    if (this.url.indexOf("?") != -1)
		        req.open("GET",this.url+"&sjc="+d.toLocaleTimeString(), true);
		    else
		        req.open("GET",this.url+"?sjc="+d.toLocaleTimeString(), true);
		}
		req.send();
	} else {
		req.open("POST",this.url, true);
		req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
        if(this.pars==null){
        	req.send("sjc="+d.toLocaleTimeString());
        } else {
        	req.send("sjc="+d.toLocaleTimeString()+"&"+this.pars);
        }
	}
}
function getReadyStateHandler(req,responseType,responseXmlHandler,errorHandle)
{
	return function () {
    if (req.readyState == 4) {
      if (req.status == 200) {
          if (showAjaxProcess){
              dropLoadingPanel();
          }
      	if(responseType=="XML"){
        	responseXmlHandler(req.responseXML);
        }else{
        	responseXmlHandler(req.responseText);
        }
      } else {
      	if(errorHandle!=null){
			errorHandle(req.status);
		}        
      }
    }
  }
}
function errorHandle(status){
    for(var i=0;i<timeoutlist.length;i++) {
 	    clearTimeout(timeoutlist[i]);
   	}
   	if (!IsError){
   	    IsError = true;
  	    alert("提交服务器出错，错误信息为:"+status+",请和管理员联系");
  	    IsError = false;
  	}
}
function showLoadingPanel(msg){
    var obj = $("divLoadingPanel");
	if (obj == null || obj == undefined){
	    createLoadingPanel(msg);
	} else {
	    obj.style.display = "";
	}
}
function dropLoadingPanel(){
  hiddenLoadingPanel();
}
function createLoadingPanel(msg){
    var message = msg;
    if (message == null || message === ""){
        message = "正在加载数据，请稍候......";
    }
	var lookupPanel = 
	  "<div id='divLoadingPanel' style='position:absolute;top=expression(document.body.clientHeight/2 - 40);"
        + " left=expression(document.body.clientWidth/2 - 100);display:\"\";z-index:9999'>"
        + "<table class='dgMain' bgColor='#F4F4F4'>"
        + "<tr>"
        + "<td>"
        + "<img src='" + WEBROOT + "images/loading.gif' border='0'/>"
        + "</td>"
        + "<td>"
        + "<span>&nbsp;&nbsp;" + message + "</span>"
        + "</td>"
        + "</tr>"
        + "</table>"
		+ "</div>";
	document.body.innerHTML += lookupPanel;
}
//
function spryLoadingPanel(msg, obj) {
    var message = msg;
    if (!obj)
        return;
    if (message == null || message === "") {
        message = "正在加载数据，请稍候......";
    }
    var lookupPanel =
	  "<div id='spryLoadingPanel' style='position:absolute;top=expression(document.body.clientHeight/2 - 40);"
        + " left=expression(document.body.clientWidth/2 - 100);display:\"\";z-index:9999'>"
        + "<table class='dgMain' bgColor='#F4F4F4'>"
        + "<tr>"
        + "<td>"
        + "<img src='" + WEBROOT + "images/loading.gif' border='0'/>"
        + "</td>"
        + "<td>"
        + "<span>&nbsp;&nbsp;" + message + "</span>"
        + "</td>"
        + "</tr>"
        + "</table>"
		+ "</div>";
    obj.innerHTML += lookupPanel;
}
function hiddenLoadingPanel(){
	var obj = $("divLoadingPanel");
	if (obj != null && obj != undefined){
		obj.style.display = "none";
	}
}
// Truncate The String Empty char before/end.
String.prototype.trim = function(){
    return this.replace(/(^\s*)|(\s*$)/g, "");
}
// 表单验证方法
// 调用前应先定义fieldDEF变量
// fieldDEF变量格式为控件名称，控件说明，控制类型(C-字符，N-数值；D-日期)，长度，是否可空(Y-是；N-否)
// 示例：fieldDEF = "org_Code,组织编码,C,6,N,"
//               + "dept_Code,部门编码,C,4,N,"
//               + "dept_Name,部门名称,C,100,Y,"
//               + "fill_Date,填报日期,D,,Y,"
//               + "fill_Amount,填写金额,N,5,Y";
// 然后调用formValid()方法验证即可，如果验证通过则返回true;
function formValid(){
    var returnValue = true;
    var args = fieldDEF.split(",");
    for(var i = 0 ; i < args.length/5; i ++){
        if (!doValid(args[i*5], args[i*5 + 1], args[i*5 + 2], args[i*5 + 3], args[i*5 + 4])){
            returnValue = false;
            break;
        }
    }
    return returnValue;
}
// 执行验证
function doValid(objName, objDesc, objType, objLength, objNullbale){
    var obj = document.getElementsByName(objName)[0];
    if (obj == null || obj == undefined){
        alert("读取" + objName + "时出错，请联系管理员。");
        return false;
    } else {
        //alert(obj.value + objType + objNullbale);
        if (obj.type == "hidden") {
            alert("当前待验证的 " + objDesc + " 为空且为不可见，请联系管理员！");
            return;
        }
        if (obj.value == "" || obj.value == ".0"){
            if (objNullbale == "N" && obj.value == ""){
                alert(objDesc + "不能为空，请重新输入。");
                obj.focus();
                return false;
            } else if (objType == "N" && objNullbale == "N" && obj.value == ".0"){
                alert(objDesc + "不能为空，请重新输入。");
                obj.focus();
                return false;
            }else {
                return true;
            }
        } else {
            var length = obj.maxLength;
            if (length == undefined || length == ""){
                length = objLength;
            }
            if (objType == "C") {
                return StringValid(obj, objDesc, length);
            } else if (objType == "N") {
                return NumberValid(obj, objDesc, length);
            } else if (objType == "D") {
                return DateTimeValid(obj, objDesc);
            } else if (objType == "E") { // modify by xqwu 2009-02-02
                return EmailValid(obj, objDesc, length);
            } else if (objType == "M") { // modify by xqwu 2009-02-02
                return MobileValid(obj, objDesc, length);
            } else if (objType == "T") { // modify by xqwu 2009-02-02
                return TelephoneValid(obj, objDesc, length);
            } else if (objType == "TM") { // modify by xqwu 2009-02-02
                return TelephoneMobileValid(obj, objDesc, length);
            } else if (objType == "A") {//add by lbz 2009-05-16
               return AreaCodeValid(obj, objDesc, length);
            } else {
                alert("读取" + objDesc + "时发现为不可识别的数据类型，请联系管理员。");
                obj.focus();
                return false;
            }
        }
    }
}
// 验证字符长度
function StringValid(obj, objDesc, objLength){
    if (CountString(obj.value) > objLength){
        alert(objDesc + "最多只能输入" + objLength + "个字符，请删除超出长度的内容。");
        obj.focus();
        return false;
    }
    return true;
}
// 验证数值及长度
function NumberValid(obj, objDesc, objLength){
    if (isNaN(obj.value)){
        alert(objDesc + "只能输入数字，请重新输入");
        obj.focus();
        return false;
    } else {
        if (obj.value == ".0"){
            obj.value = "";
        } else {
            //alert(obj.value);
            //var temp = parseFloat(obj.value);
            //obj.value = obj.value;
        }
        if (CountString(obj.value)> objLength){
            alert(objDesc + "的数值不能超过" + maxValue(objLength) + "，请重新输入。");
            obj.focus();
            return false;
        }
        return true;
    }
}
// 验证日期、时间
function DateTimeValid(obj, objDesc){
    if (obj.value.isDate()){
        return true;
    } else if (obj.value.isDateTime()){
        return true;
    } else {
        alert(objDesc + "输入了无效的日期数值或数据格式。\r\n请按2006-01-01或2006-01-01 12:00:00格式进行输入。");
        obj.focus();
        return false;
    }
}

// 判断当前字符串是否日期格式
String.prototype.isDate = function(){
    var r = this.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2})$/);
    if(r == null){
        return false;
    }
    var d = new Date(r[1], r[3]-1, r[4]);
    return (d.getFullYear()== r[1] && (d.getMonth()+1) == r[3] && d.getDate() == r[4]);
}
// 判断当前字符串是否日期时间格式
String.prototype.isDateTime = function(){
    var r = this.match(/^(\d{1,4})(-|\/)(\d{1,2})\2(\d{1,2}) (\d{1,2}):(\d{1,2}):(\d{1,2})$/);
    if( r == null){
        return false;
    }
    var d = new Date(r[1], r[3]-1,r[4],r[5],r[6],r[7]);
    return (d.getFullYear() == r[1] && (d.getMonth()+1) == r[3] && d.getDate() == r[4] && d.getHours() == r[5] && d.getMinutes() == r[6] && d.getSeconds() == r[7]);
}
// 获取最大数值
function maxValue(length){
    var a = "";
    for(var i = 0; i < length; i++){
        a += "9";
    }
    return a;
}
String.prototype.startWith = function(str){   
  if(str==null||str==""||this.length==0||str.length>this.length){ return false;}
  if(this.substr(0,str.length)==str) {
      return true;
  } else {
      return false;
  }
  return true;
}
String.prototype.endWith = function(oString){   
  var reg = new RegExp(oString+"$");
  return reg.test(this);
}
//检查邮箱地址是否合法
//传入参数为邮箱文本域
//true-通过，false-不通过
function EmailValid(field)
{
  var mail=/^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.){1,4}[a-z]{2,3}$/i;
  var val=field.value;
  if(!mail.test(val))
    {
      alert("邮箱地址不合法，请按mailname@site.com格式进行输入。");
      field.focus();
      return false;
    }
 return true;
}
//验证区号
function AreaCodeValid(obj, objDesc, objLength) {
    var area = /^[0-9]{3,4}$/;
    var val = obj.value;
    if (!area.test(val)) {
        alert(objDesc + "不合法，请输入3到4位数字。");
        return false;
    }
    return true;
}
function TelephoneValid(obj, objDesc, objLength) {
    var tele = /(^[0-9]{3,4}\-[0-9]{7,8}$)|(^[0-9]{7,8}$)|(^\([0-9]{3,4}\)[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$)/;
    var val = obj.value;
    if (!tele.test(val)) {
        alert(objDesc + "不合法，请按0591-88888888格式进行输入。");
        obj.focus();
        return false;
    }
    return true;
}
function FaxValid(obj, objDesc, objLength) {
    var tele = /(^[0-9]{3,4}\-[0-9]{7,8}$)|(^[0-9]{7,8}$)|(^\([0-9]{3,4}\)[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$)/;
    var val = obj.value;
    if (!tele.test(val)) {
        alert(objDesc + "不合法，请按0591-88888888格式进行输入。");
        obj.focus();
        return false;
    }
    return true;
}
function MobileValid(obj, objDesc, objLength) {
    var val = obj.value;
    var mob = /^13\d{9}$/.test(val) | /^15\d{9}$/.test(val) | /^18\d{9}$/.test(val);     
    if (!mob) {
        alert(objDesc + "不合法，请重新输入。");
        obj.focus();
        return false;
    }
    return true;
}
function TelephoneMobileValid(obj, objDesc, objLength) {
    var val = obj.value;
    var tele = /(^[0-9]{3,4}\-[0-9]{7,8}$)|(^[0-9]{7,8}$)|(^\([0-9]{3,4}\)[0-9]{3,8}$)|(^0{0,1}13[0-9]{9}$)/;
    var mob = /^13\d{9}$/.test(val) | /^15\d{9}$/.test(val) | /^18\d{9}$/.test(val);
    if (!tele.test(val) && !mob) {
        alert(objDesc + "不合法，请重新输入。");
        obj.focus();
        return false;
    }
    return true;
}
// 判断某个对象的值是否为空
function isEmpty(obj){
  var v = obj.value;
  if (v == null || v == undefined){
      return true;
  } else {
      if (v.length == 0 || v.trim() == ""){
          return true;
      } else {
          return false;
      }
  }
}
//------ Enter键循环控制表单元素聚焦
var LoopFoucus ={
  vForm : document.forms[0],

  onLoad : function(_formName){
	 if(_formName != "" && typeof(_formName) != "undefined"){
		this.vForm = $(_formName);
	 } else{
	    this.vForm = document.forms[0];
	 }
	
	 if(this.vForm.elements.length <= 0){
	   return ;
	 }
	  //使第一个表单元素聚焦
	  var firstElement;
	  for(var i = 0; i < this.vForm.elements.length; i++){
		 if(this.vForm.elements[i].type != "hidden"){
		   firstElement = this.vForm.elements[i];
		   break;
		 }
	  }
	  firstElement.focus();
	  //为表单元素添加onkeypress事件
	  for(var i = 0;  i <  this.vForm.elements.length; i++){
		  if(this.vForm.elements[i].type != "hidden"){
			this.vForm.elements[i].attachEvent("onkeypress", LoopFoucus.nextFocus);
		  }
	  } 
  },
  nextFocus : function(){
	  var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
	  if (keyCode == 13) {
		var currentElement=event.srcElement;
		var j;
		for (j = 0; j < currentElement.form.elements.length; j++){
			if(currentElement.form.elements[j].type != "hidden"){
			  if (currentElement == currentElement.form.elements[j]){
			      break;	
			  }
			}	  
		 }
              
		 if(j < currentElement.form.elements.length -1){
                   //遍历使得下个元素不是hidden类型 
		     for(; j < currentElement.form.elements.length; j++){
                     if(currentElement.form.elements[j+1].type != "hidden"){
                       break;
                     }
                   }
                   currentElement.form.elements[j+1].focus();
               }else{//循环使第一个不是hidden类型元素聚焦 
                   var k;
                   for(k = 0; k < currentElement.form.elements.length; k++){
                     if(currentElement.form.elements[k].type != "hidden"){
                        break;
                     }
                   }
                    currentElement.form.elements[k].focus();
               }
               return false;
	  }
  }
}