//
//----------------------------------------------------------------------
//
//                          钱文田   2006-09-06
//
//                 对 javascript 中 string 加上自定义方法
//
//----------------------------------------------------------------------
//

//
// 对JavaScript的String加上trim()方法
//
String.prototype.trim = function()
{
	return this.replace(/(^\s+)|\s+$/g, "");
}

//
// 验证字符串是不是有效整数
//
String.prototype.isNum = function()
{
    if (this == "")
        return true;    
    var rPattern = /^[-,+]?(0|([1-9]\d{0,9}))$/
    if(rPattern.test(removeCommas(this))) return true
    return false;	
}

//
// 验证字符串是不是有效小数
//
String.prototype.isFloat = function()
{
    if (this == "")
        return true;
	var exp = new RegExp("^(\-)?(0|([1-9]\\d{0,14}))((\\.)\\d{0,5})?$");
	return (this.match(exp) != null);
}

//
//验证money型，不带小数点的长度在16位
//
String.prototype.isNum0 = function()
{
    if (this == "")
        return true;
	var rPattern = /^(\-)?(0|([1-9]\d{0,15}))$/
    if(rPattern.test(removeCommas(this))) return true	
	return false;
}

//
//验证money型，带两位小数点的长度在16位
//
String.prototype.isNum2 = function()
{
    if (this == "")
        return true;
    var rPattern = /^(\-)?(0|([1-9]\d{0,14}))((\.)\d{0,2})?$/
    if(rPattern.test(removeCommas(this))) return true	
	return false;
}

//
//验证money型，带四位小数点的长度在16位
//
String.prototype.isNum4 = function()
{
    if (this == "")
        return true;
	var rPattern =  /^(\-)?(0|([1-9]\d{0,14}))((\.)\d{0,4})?$/
    if(rPattern.test(removeCommas(this))) return true
	return false;	
}

//
// 对数字型的串加上逗号
//
function addCommas( value ) 
{
    var objRegExp  = new RegExp('(-?[0-9]+)([0-9]{3})');
    //check for match to search criteria
    while(objRegExp.test(value)) 
    {
        //replace original string with first group match,
        //a comma, then second group match
        value = value.replace(objRegExp, '$1,$2');
    }

    if (value.trim() != "")
    {
        var pos = value.indexOf(".");
        if (pos == -1)
        {
            value += ".00";
        }
        else
        {
            var dvalue = value.substring(pos + 1);
            if (dvalue.length == 0)
            {
                value += "00";
            }
            else if (dvalue.length == 1)
            {
                value += "0";
            }        
        }
    }
    return value;
}

//
// 移除数字型的逗号
//
function removeCommas( value ) 
{
    var objRegExp = /,/g; //search for commas globally
    //replace all matches with empty strings
    return value.replace(objRegExp,'');
}

//
// 验证字符串是不是有效的日期格式
//
String.prototype.isValidDate = function()
{
    if (this == "")
        return true;
	var yearFirstExp = new RegExp("^\\s*((\\d{4})|(\\d{2}))([-/.])(\\d{1,2})\\4(\\d{1,2})\\s*$");
	result = this.match(yearFirstExp);
	if(result == null) 
		return false;
	var year = (result[2].length == 4) ? result[2] : "20" + result[3];
	var month = result[5] - 1;
	var day = result[6];
	var d = new Date(year, month, day);
	return (typeof(d) == "object" && d.getFullYear() == year && d.getMonth() == month && d.getDate() == day);
}

//
// 验证字符串是不是email
//
String.prototype.isEmail = function()
{
    if (this == "")
        return true;
	var exp = new RegExp("^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\.\\w+([-.]\\w+)*$");
	return (this.match(exp) != null);
}

//
// 验证字符串是不是企业编码
//
String.prototype.isCompcode = function()
{
	var exp = new RegExp("^\\d{4}[0-9Xx]\\d{7}[0-9Xx]$");
	return (this.match(exp) != null);
}

//
// 验证字符串是不是密码
//
String.prototype.isPassword = function()
{
	if (this.length<6 || this.length>16) {
	    return false;
	}
	return true;
}

//
// 判断对象是否有效
//
function isNull(value)
{
	return (value == null || value == undefined)
}
//验证邮编
function isPostCode(value){
	var rPattern = /^\d{6}$/;
	if(!rPattern.test(value)) 
			return false;
		else
			return true	;
}
//验证海关 10位数字

function isHgCode(value){
	var rPattern = /^\d{4}[1,2,3,4,5,7,9]\d{5}$/;
	if(!rPattern.test(value)) 
			return false;
		else
			return true	;
}

//
// 比较日期的先后顺序 返回true则参数一迟于参数二
//
function compareD(strat,end){
	execScript('dim n1 : n1 = DateDiff("d", "'+ strat +'", "'+ end +'")','vbscript');
	if (n1<0)
	return false;
	else
	return true;
}

//
// 对 JavaScript 错误, 用弹出框显示出来
//
/*window.onerror = function(msg) 
{
    alert("JavaScript Error: " + msg);
    return true;
}*/

//
//----------------------------------------------------------------------
//
//                          DOM对象操作块
//
//----------------------------------------------------------------------
//

//
// 创建 DOM 对象
//
function createXmlDom(xml) 
{
	var oXmlDom = null;
	try
	{
		oXmlDom = new ActiveXObject("MSXML2.DOMDocument.4.0");
	}
	catch(ex1)
	{
		try
		{
			oXmlDom = new ActiveXObject("MSXML2.DOMDocument.3.0");
		}
		catch(ex2)
		{
			oXmlDom = new ActiveXObject("Microsoft.XMLDOM");
		}
	}
	if (xml != null)
	{
		oXmlDom.loadXML(xml);
	}
	if (oXmlDom == null)
		alert("DOM对象创建失败, 请与软件提供商联系!");
	return oXmlDom;
}

//
// 给指定DOM创建一个字节点
//
function addChildNode(xmlDom, parentNode, childNodeName, childValue)
{
	var newNode;
	newNode = xmlDom.createNode(1, childNodeName, "");
	newNode.text = childValue;
	if (parentNode == null)
		xmlDom.documentElement.appendChild(newNode)
	else
		parentNode.appendChild(newNode);
	return newNode;
}

//
// 对节点设置属性
//
function setNodeAttribute(xmlDom, node, attributeName, attributeValue)
{
	var attr = xmlDom.createAttribute(attributeName);
	attr.value = attributeValue;
	if (node == null)
		xmlDom.documentElement.setAttributeNode(attr)
	else
		node.setAttributeNode(attr);
}

//
// 把XML中特殊字符替换
//
function dispXml(xml)
{
	return xml.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
}

//
//  查询当前url的参数
//  strname为要查询的参数名称
function queryString(strname)
{	
	var hrefstr,pos,parastr,para,tempstr;	
	hrefstr = window.location.href;	
	pos = hrefstr.indexOf("?");	parastr = hrefstr.substring(pos+1);	
	para = parastr.split("&");	tempstr="";	for(i=0;i<para.length;i++)	
	{  
		tempstr = para[i]; 
		pos = tempstr.indexOf("="); 
		if(tempstr.substring(0,pos) == strname)
		{  	
			return tempstr.substring(pos+1); 
		}
	}	
	return null;
}

//
//  通用校验函数
//  
function checkdata(func)
{
	var controls = document.all;
	for(var i = 0; i < controls.length; i++)
	{
		if(controls[i].type == 'text' || controls[i].type == 'textarea')
		{	
			var currctrl = controls[i];
			
			if(controls[i].required == 'true' && controls[i].value == '')
			{
				showMessage("info", controls[i].tipmsg + '不能为空,请输入!',"", function(){ currctrl.select(); });
				return false;
			}
			switch(currctrl.datatype)
			{
				case 'int':
					if(!(currctrl.value.trim().isNum()))
					{
						msg = currctrl.tipmsg + "应为整数!"
						showMessage("info", msg,"", function(){currctrl.select()});
						return false;
					}
					break;
				case 'num0':
					if(!(currctrl.value.trim().isNum0()))
					{
						msg = currctrl.tipmsg + "应为带有小数点的数!"
						showMessage("info", msg,"", function(){currctrl.select()});
						return false;
					}
					break;
				case 'num2':
					if(!(currctrl.value.trim().isNum2()))
					{
						msg = currctrl.tipmsg + "应为带两位小数点的小数!"
						showMessage("info", msg,"", function(){currctrl.select()});
						return false;
					}
					if (currctrl.great && currctrl.value.trim()<=currctrl.great) {
						msg = currctrl.tipmsg + "必须大于零!"
						showMessage("info", msg,"", function(){currctrl.select()});
						return false;
					}
					break;
				case 'num4':
					if(!(currctrl.value.trim().isNum4()))
					{
						msg = currctrl.tipmsg + "应为带四位小数点的小数!"
						showMessage("info", msg,"", function(){currctrl.select()});
						return false;
					}
					break;
				case 'email':
					if(!(currctrl.value.trim().isEmail()))
					{
						msg = "请输入合法的电子邮件格式!"
						showMessage("info", msg,"", function(){currctrl.select()});
						return false;
					}
					break;
			}
		}
		else if(controls[i].type == 'select-one')
		{
			if(controls[i].required == 'true' && controls[i].value == '')
			{
				showMessage("info", controls[i].tipmsg + '不能为空,请选择!');
				return false;
			}
		}
	}
	if (func) {
		if (!func()) {
			return false;
		}
	}
	return true;
}

//
// 字符数控制函数(通过在text和textarea中添加maxlen属性)---开始
//
String.prototype.len=function(){ 
return this.replace(/[^\x00-\xff]/g,"**").length; 
} 

//Set maxlength for multiline TextBox 
function setMaxLength(object,length) 
{
	
	var result = true; 
	var controlid = document.selection.createRange().parentElement().id; 
	var controlValue = document.selection.createRange().text; 
	var tempString=object.value;
	
	var tt=""; 
	for(var i=0;i<length;i++) 
		{ 
			if(tt.len()<length) 
				tt=tempString.substr(0,i+1); 
			else 
				break; 
		} 
	if(tt.len()>length)
		tt=tt.substr(0,tt.length-1);
	object.value=tt;
	
	
} 

//Check maxlength for multiline TextBox when paste 
function limitPaste(object,length) 
{ 
		var tempLength = 0; 
		if(document.selection) 
		{ 
			if(document.selection.createRange().parentElement().id == object.id) 
			{ 
				tempLength = document.selection.createRange().text.len(); 
			} 
		} 
		var tempValue = window.clipboardData.getData("Text"); 
		tempLength = object.value.len() + tempValue.len() - tempLength; 

		if (tempLength > length) 
		{ 
			tempLength -= length; 
			var tt=""; 
			for(var i=0;i<tempValue.len()-tempLength;i++) 
				{ 
					if(tt.len()<(tempValue.len()-tempLength)) 
						tt=tempValue.substr(0,i+1); 
					else 
						break; 
				} 
			if(tt.len()<=0)
			{	
				window.event.returnValue=false;
				
			}
			else
			{
				tempValue=tt; 
				window.clipboardData.setData("Text", tempValue); 
				window.event.returnValue = true; 
			}
		} 
	

} 

function PressLength()
{
	
	if(event.srcElement.type=="text" || event.srcElement.type=="textarea" )
	{
		if(event.srcElement.maxlen!=null)
			setMaxLength(event.srcElement,event.srcElement.maxlen);
		
	}
}

function LimitLength()
{

	if(event.srcElement.type=="text" || event.srcElement.type=="textarea" )
	{
		if(event.srcElement.maxlen!=null)
			limitPaste(event.srcElement,event.srcElement.maxlen);
	}
}
document.documentElement.attachEvent('onkeyup', PressLength); 
document.documentElement.attachEvent('onpaste', LimitLength);
document.documentElement.attachEvent('onblur', PressLength);
//
// 字符数控制函数(通过在text和textarea中添加maxlen属性)---结束
//


////////////////////////////////////////////////////////////////
///来源wma_report.js 
///测试 沈剑峰


// 单条记录绑定到控件上
function intiTextBox()
{
	var fieldtype;		// 输入类型( checkbox, text, hidden)
	var controls = document.all;

	for(var i=0; i<controls.length; i++)
	{
		fieldtype = controls[i].datatype;
		
		if (isNumType(fieldtype))
		{
			controls[i].style.textAlign = "right";
		    controls[i].onfocus     = focusEvent;
		    controls[i].onblur      = blurEvent;
		    controls[i].onkeypress  = keypressEvent;
		    controls[i].onkeyup     = keyupEvent;
		    if(controls[i].onchange == null)
				controls[i].onchange    = changeEvent;
		}
	}
}

//
// 提示窗体Popup的变量
//

var _reportPopup;

function getPopup()
{
	if (_reportPopup == null)
	{
		_reportPopup = window.createPopup();
		_reportPopup.document.body.onmousedown = function() { getPopup().hide(); };
	}
	return _reportPopup;
}

function isIE() 
{
	if(document.all) 
		return true;
	return false;
}

function isNumType(datatype)
{
    return (datatype == "int" || datatype == "num0" || datatype == "num2" || datatype == "num4");
}

function getDatatype(obj)
{
    return obj.datatype
}

function getInfobox()
{
	return document.getElementById("infobox");
}

function getErrorMsg(obj)
{
	var msg = "";
	switch(getDatatype(obj))
	{
	    case "int":
		    if(!(obj.value.trim().isNum()))
		    msg = "您只能输入整数!"
		    break;
	    case "num0":
		    if(!(obj.value.trim().isNum0()))
		    msg = "您不能输入带有小数点的数!"
		    break;
	    case "num2":
		    if(!(obj.value.trim().isNum2()))
		    msg = "您只能输入带两位小数点的小数!"
		    break;
	    case "num4":
		    if(!(obj.value.trim().isNum4()))
		    msg = "您只能输入带四位小数点的小数!"
		    break;
	}
	return msg;
}

function getTipMsg(obj)
{
    return obj.tipmsg;
}

/////////////////////////////////////////////////////////////
//                UI Functions
/////////////////////////////////////////////////////////////
function changeEvent(evnt)
{
	var obj;
	if (isIE()) 
	{
		obj = event.srcElement;
	}
	else
	{
		obj = evnt.target;
	}
	if(obj.datatype == 'num2')
	{
		if(obj.value == '')
			return;
		var v = parseFloat(obj.value)
		obj.value = v.toFixed(2)
	}
}
function focusEvent(evnt)
{	
	var obj;
	if (isIE()) 
	{
		obj = event.srcElement;
	}
	else
	{
		obj = evnt.target;
	}
	
	showInfo(obj, 0);
    if (isNumType(obj.datatype))
	{
		obj.value = removeCommas(obj.value.trim())
        obj.style.textAlign = "left";
	    obj.focus();
	    obj.select();
    }
}

function blurEvent(evnt)
{
	var obj;
	if (isIE()) 
	{
		obj = event.srcElement;
	}
	else 
	{
		obj = evnt.target;
	}
	getPopup().hide();

    if (isNumType(obj.datatype) && obj.datatype != "int")	
	{
        obj.style.textAlign = "right";
		obj.value = addCommas(obj.value.trim());
    }		
}

function keypressEvent(evnt)
{
	var obj;
	var keyCode;
	
	if (isIE()) 
	{
		obj = event.srcElement;
		keyCode = event.keyCode;
	}
	else 
	{
		obj = evnt.target;
		keyCode = evnt.keyCode;
	}
	
	var dt = getDatatype(obj);
	
	//整数类型, 不带小数点
	if (dt == "int" || dt == "num0")
	{
		if ((keyCode >= 48 && keyCode <= 57) || keyCode == 45)
		{
			return true
		}
		else
		{
			return false;
		}
	}
	//浮点数类型, 可以带小数点
	else if (dt == "num2" || dt == "num4")
	{
		if ((keyCode >= 48 && keyCode <= 57) || keyCode == 46 || keyCode == 45)
		{
			return true
		}
		else
		{
			return false;
		}
	}
	return true;
}

function keydownEvent(evnt)
{
	var keyCode;
	
	if (isIE()) 
	{
		keycode = event.keyCode;
	}
	else 
	{
		keycode = evnt.keyCode;
	}
	
	if (event.keyCode == 13)
	{
		event.keyCode = 9;
	}		
}

function keyupEvent(evnt)
{
	var obj;
	if (isIE()) 
	{
		obj = event.srcElement;
	}
	else 
	{
		obj = evnt.target;
	}
	showInfo(obj, 0);
}

function getLeft(src)
{
	var left = src.offsetLeft;
	while (src = src.offsetParent)
	{
		left += src.offsetLeft;
	}
	return left;
}

//
// display 0、显示警示 1、显示提醒 
//
function showInfo(obj, display)
{    
	var infobox = getInfobox();
	if(!infobox)
		return
	//显示内容
	if(display == 1)
	{
		if (obj.style.backgroundColor == "yellow")
		{
			showInfo(obj, 0);
			return;
		}

        if (!getTipMsg(obj))
            return;
		
		infobox.style.display = "block";
		infobox.innerHTML = "<img src='../images/standard_msg_warning.gif'> " + getTipMsg(obj);

		var left;
		if (getLeft(obj) + obj.offsetWidth + infobox.clientWidth > document.body.clientWidth)
		{
			left = - infobox.clientWidth - 2;
		}
		else
		{
			left = obj.offsetWidth;
		}
		
		getPopup().document.body.innerHTML = "<DIV style='FONT-SIZE: 12px; color:#333333; padding: 10px 10px 10px 10px; LINE-HEIGHT: 18px; BORDER: #E3E3E3 solid 1px; BACKGROUND: #FFFFEE;'>" + infobox.innerHTML + "</DIV>";
		getPopup().show(left, 0, infobox.offsetWidth, infobox.offsetHeight, obj);
		
		infobox.style.display = "none";
	}
	else if(display == 0)
	{
		var msg = getErrorMsg(obj);
		if (msg != "")
		{			
			infobox.style.display = "block";
			infobox.innerHTML	= "<img src='../images/standard_msg_error.gif'> " + msg;
			obj.style.backgroundColor = "yellow"

			var left;
			if (getLeft(obj) + obj.offsetWidth + infobox.clientWidth > document.body.clientWidth)
			{
				left = - infobox.clientWidth - 2;
			}
			else
			{
				left = obj.offsetWidth;
			}
			
			getPopup().document.body.innerHTML = "<DIV style='FONT-SIZE: 12px; color:#333333; padding: 10px 10px 10px 10px; LINE-HEIGHT: 18px; BORDER: #E3E3E3 solid 1px; BACKGROUND: #FFFFEE;'>" + infobox.innerHTML + "</DIV>";
			getPopup().show(left, 0, infobox.offsetWidth, infobox.offsetHeight, obj);
			
			infobox.style.display = "none";				
		}
		else if (obj.style.backgroundColor == "yellow")
		{
			obj.style.backgroundColor = "white";
			showInfo(obj, 1);
		}
	}
}
////////////////////////////////////////////////////////////////////////
