﻿var isIE = (document.all) ? true : false;

//兼容Mozilla, Netscape, Firefox
if (!isIE) {
    //节点操作兼容
    with (window.Node.prototype) {
        replaceNode = function(o) { this.parentNode.replaceChild(o, this); }
        removeNode = function(b) {
            if (b)
                return this.parentNode.removeChild(this);
            var range = document.createRange();
            range.selectNodeContents(this);
            return this.parentNode.replaceChild(range.extractContents(), this);
        }
        swapNode = function(o) { return this.parentNode.replaceChild(o.parentNode.replaceChild(this, o), this); }
        contains = function(o) { return o ? ((o == this) ? true : arguments.callee(o.parentNode)) : false; }
    }
    //HTML元素兼容
    with (window.HTMLElement.prototype) {
        __defineGetter__("parentElement", function() { return (this.parentNode == this.ownerDocument) ? null : this.parentNode; });
        __defineGetter__("children", function() {
            var c = [];
            for (var i = 0, cs = this.childNodes; i < cs.length; i++) {
                if (cs[i].nodeType == 1)
                    c.push(cs[i]);
            }
            return c;
        });
        __defineGetter__("canHaveChildren", function() { return !/^(area|base|basefont|col|frame|hr|img|br|input|isindex|link|meta|param)$/i.test(this.tagName); });
        __defineSetter__("outerHTML", function(s) {
            var r = this.ownerDocument.createRange();
            r.setStartBefore(this);
            void this.parentNode.replaceChild(r.createContextualFragment(s), this);
            return s;
        });
        __defineGetter__("outerHTML", function() {
            var as = this.attributes;
            var str = "<" + this.tagName;
            for (var i = 0, al = as.length; i < al; i++) {
                if (as[i].specified)
                    str += ' ' + as[i].name + '="' + as[i].value + '"';
            }
            return this.canHaveChildren ? str + ">" : str + ">" + this.innerHTML + "</" + this.tagName + ">";
        });
        __defineSetter__("innerText", function(s) { return this.innerHTML = document.createTextNode(s); });
        __defineGetter__("innerText", function() {
            var r = this.ownerDocument.createRange();
            r.selectNodeContents(this);
            return r.toString();
        });
        __defineSetter__("outerText", function(s) {
            void this.parentNode.replaceChild(document.createTextNode(s), this);
            return s;
        });
        __defineGetter__("outerText", function() {
            var r = this.ownerDocument.createRange();
            r.selectNodeContents(this);
            return r.toString();
        });
        insertAdjacentElement = function(s, o) {
            return (s == "beforeBegin" && this.parentNode.insertBefore(o, this)) || (s == "afterBegin" && this.insertBefore(o, this.firstChild)) || (s == "beforeEnd" && this.appendChild(o)) || (s == "afterEnd" && ((this.nextSibling) && this.parentNode.insertBefore(o, this.nextSibling) || this.parentNode.appendChild(o))) || null;

        }
        insertAdjacentHTML = function(s, h) {
            var r = this.ownerDocument.createRange();
            r.setStartBefore(this);
            this.insertAdjacentElement(s, r.createContextualFragment(h));
        }
        insertAdjacentText = function(s, t) { this.insertAdjacentElement(s, document.createTextNode(t)); }
    }

    //XMLDOM兼容
    window.ActiveXObject = function(s) {
        document.implementation.createDocument.call(this, "text/xml", "", null);
    }
    XMLDocument.prototype.LoadXML = function(s) {
        for (var i = 0, cs = this.childNodes, cl = childNodes.length; i < cl; i++)
            this.removeChild(cs[i]);
        this.appendChild(this.importNode((new DOMParser()).parseFromString(s, "text/xml").documentElement, true));
    }
    XMLDocument.prototype.selectSingleNode = Element.prototype.selectSingleNode = function(s) { return this.selectNodes(s)[0]; }
    XMLDocument.prototype.selectNodes = Element.prototype.selectNodes = function(s) {
        var rt = [];
        for (var i = 0, rs = this.evaluate(s, this, this.createNSResolver(this.ownerDocument == null ? this.documentElement : this.ownerDocument.documentElement), XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null), sl = rs.snapshotLength; i < sl; i++)
            rt.push(rs.snapshotItem(i));
        return rt;
    }
    XMLDocument.prototype.__proto__.__defineGetter__("xml", function() {
        try {
            return new XMLSerializer().serializeToString(this);
        }
        catch (e) {
            return document.createElement("div").appendChild(this.cloneNode(true)).innerHTML;
        }
    });
    Element.prototype.__proto__.__defineGetter__("xml", function() {
        try {
            return new XMLSerializer().serializeToString(this);
        }
        catch (e) {
            return document.createElement("div").appendChild(this.cloneNode(true)).innerHTML;
        }
    });
    XMLDocument.prototype.__proto__.__defineGetter__("text", function() { return this.firstChild.textContent; });
    XMLDocument.prototype.__proto__.__defineSetter__("text", function() { return this.firstChild.textContent = s; });
    Element.prototype.__proto__.__defineGetter__("text", function() { return this.textContent; });
    Element.prototype.__proto__.__defineSetter__("text", function(s) { return this.textContent = s; });

}

//功能說明：消除字串前後的空格
//參數說明：字符串
//返 回 值：無返回值
function Trim(str)
{
	var str0 = '';
	str0 = String(str);
	var reg=/^\s*/;		//消除前面的空格
	var str1 = '';
	str1 = str0.replace(reg, '');
	reg=/\s*$/;			//消除後面的空格
	var str2 = '';
	str2 = str1.replace(reg, '');
	return str2;
}

String.prototype.Trim = function() 
{ 
    return this.replace(/(^\s*)|(\s*$)/g, ''); 
}

//字符串實際長度，數字[0-9],字母[a-z]每個算一個長度，一個漢字算二個
function StringLen(str)
{	
	var Rc = 0 
	if(str == '')
	{
		return 0 ;
	}
	var reg = /^[\u4E00-\u9FA5]*$/;
	var i = 0 ;
	for(i = 0 ; i < str.length ; i++)
	{
		if(reg.test(str.substring(i,i+1)))
		{
			Rc += 1;
		}
		Rc += 1;
	}
	return 	Rc	
}	
/*
对Float类型数值小数部分进行四舍五入
num：Float类型数值
scale：四舍五入到第几位
*/
function ForDight(num,scale)
{
    var num = Math.round(num * Math.pow(10, scale)) / Math.pow(10, scale); 
    return num; 
} 


//圖片等比縮放,調用方式如：<img src='abc.jpg' onload='javascript:DrawImage(this,480,500);'/>
//sender為<img>對象，iwidth為等比縮放之指定寬度，iheight為等比縮放之指定高度
function DrawImage(sender,iwidth,iheight) 
{ 
    var image=new Image(); 
    image.src=sender.src;
    
    if(image.width>0 && image.height>0) 
    { 
        if(image.width<iwidth && image.height<iheight) 
        {
            return;
        }
        var point = image.height/image.width;
        
        sender.width = iwidth;
        sender.height = iwidth*point;
        
        if(sender.height>iheight)
        {
            var p1 = image.width/image.height;
            sender.height = iheight;
            sender.width = iheight*p1;
        }
    }
}



//validator start



//功能說明：消除字串前後的空格
//參數說明：字符串
//返 回 值：無返回值
function Trim(str) {
    var str0 = "";
    str0 = String(str);
    var reg = /^\s*/; 	//消除前面的空格
    var str1 = "";
    str1 = str0.replace(reg, "");
    reg = /\s*$/; 		//消除後面的空格
    var str2 = ""
    str2 = str1.replace(reg, "");
    return str2;
}

//功能說明:檢證函數
//參數說明:驗證對象的ID，Msg＝提示信息，reg=正則表達式
function IsCheck(obj, Msg, reg) {
    if (typeof (obj) == 'string') {
        obj = document.getElementById(obj);
    }
    var str = obj.value;
    str = Trim(str);
    //alert(reg.test(str));
    if (!reg.test(str)) {
        alert(Trim(Msg));
        try {
            obj.focus();
        } catch (e) { }
        return false;
    }
    return true;
}

//功能說明：字符串是否由字母組成
//參數說明：字符串
//返回值：bool,由字母組成返回：true,否則返回：false
function IsABC(obj, Msg) {
    var reg = /^[a-zA-Z]+$/;
    return IsCheck(obj, Msg, reg);
}

//功能說明：字符串是否漢字組成
//參數說明：字符串
//返回值：bool,由字母組成返回：true,否則返回：false		
function IsChina(obj, Msg) {
    var reg = /^[\u4E00-\u9FA5]*$/;
    return IsCheck(obj, Msg, reg);
}

//功能說明：是否是數字(0,1,2,3,4,5,6,7,8,9)組成的字符
//參數說明：字符串
//返 回 值：bool,返回：是數字(0,1,2,3,4,5,6,7,8,9)組成的字符true,否則返回：false
function IsInt(obj, Msg) {
    var reg = /^\d+$/;
    return IsCheck(obj, Msg, reg);
}

//功能說明：是否是數值float類型的變量
//參數說明：字符串
//返 回 值：bool,返回：是數值(即float類型的變量)true,否則返回：false
function IsDecimal(obj, Msg) {
    var reg = /^((\d+(\.\d*)?)|((\d*\.)?\d+))$/;
    return IsCheck(obj, Msg, reg);
}

//功能說明：是否符合EMail格式
//參數說明：字符串
//返 回 值：bool,返回：符合EMail格式true,否則返回：false
function IsEMail(obj, Msg) {
    var reg = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;
    return IsCheck(obj, Msg, reg);
}

///功能說明：檢證字符中是不符合日期格式
///參數說明：參數是西元日期字符串
///返 回 值： bool類型，是日期格式 true ,否則返回false    
function IsDateChina(obj, Msg) {
    var reg = /^(19|20)\d\d-([1-9]|0[1-9]|1[012])-([1-9]|0[1-9]|[12][0-9]|3[01])$/;
    return IsCheck(obj, Msg, reg);
}

//檢証URL
function IsHttp(obj, Msg) {
    var reg = /(http|https|HTTP|HTTPS):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
    return IsCheck(obj, Msg, reg);
}

//jpg、GIF’、JPEG、PNG
function IsImage(obj, Msg) {
    var str = document.getElementById(obj).value;
    var Length = str.length;

    var Temp = str.lastIndexOf(".");
    if (Temp == -1) {
        alert(Msg);
        return false;
    }
    var TempFile = str.substring(Temp + 1, Length);
    TempFile = TempFile.toLowerCase();
    if (TempFile != "gif" && TempFile != "jpg" && TempFile != "jpeg" && TempFile != "png" && TempFile != "bmp") {
        alert(Msg);
        return false;
    }
    return true;
}
//检测文件类型是否正确
//fileTypes格式：'.gif,.jpg,jpeg'
function CheckFileType(obj, fileTypes) {
    var str = Trim(document.getElementById(obj).value);
    var Length = str.length;
    var Msg = '允许的文件类型为：' + fileTypes.toLowerCase();
    var Temp = str.lastIndexOf(".");
    if (Temp == -1) {
        alert(Msg);
        return false;
    }
    var type = str.substring(Temp, Length);
    type = type.toLowerCase();
    fileTypes = ',' + Trim(fileTypes).toLowerCase() + ',';
    if (fileTypes.indexOf(',' + type + ',') < 0) {
        alert(Msg);
        return false;
    }
}


//檢測是否為值空 
//適用於:textBox,DropDownList ,ListBox 
function IsEmpty(obj, Msg) {
    if (typeof (obj) == 'string') {

        obj = document.getElementById(obj);
    }

    var str = obj.value;
    str = Trim(str);
    if (str == '') {

        alert(Trim(Msg));
        try {                //如果obj是不可设置focus的对象，会引发异常
            obj.focus();
        } catch (e) { }
        return false;
    }
    return true;

}

//判斷CheckBoxList是否有勾選，若沒有勾選 顯示提示信息Msg
//參數說明:obj= 對象的id ,minItemChecked = 項目數
function CheckCheckBoxList(obj, minItemChecked) {
    var ctl = document.getElementById(obj);
    var chks = ctl.getElementsByTagName('input');
    var checked = 0;
    for (var i = 0; i < chks.length; i++) {
        if (chks[i].checked) {
            checked++;
        }
    }
    if (checked < minItemChecked) {
        alert('至少必须选择' + minItemChecked + '项！');
        try {
            chks[0].focus();
        } catch (e) { }
        return false;
    }
    return true;
}

//日期比較函數 
function CompareDate(startDate, endDate, allowNull) {
    if (Trim(startDate) != '' && Trim(endDate) != '') {
        var PintB_year, PintB_month, PintB_day;
        var PintE_year, PintE_month, PintE_day;

        var arrStart, arrEnd;
        arrStart = startDate.split("/");
        arrEnd = endDate.split("/");

        PintB_year = parseFloat(arrStart[0]);
        PintB_month = parseFloat(arrStart[1]);
        PintB_day = parseFloat(arrStart[2]);
        PintE_year = parseFloat(arrEnd[0]);
        PintE_month = parseFloat(arrEnd[1]);
        PintE_day = parseFloat(arrEnd[2]);

        if (Math.abs(PintB_year) > Math.abs(PintE_year)) {
            alert("请输入正确的日期区间﹗");
            return false;
        }
        if (Math.abs(PintB_month) > Math.abs(PintE_month) && Math.abs(PintB_year) == Math.abs(PintE_year)) {
            alert("请输入正确的日期区间﹗");
            return false;
        }
        if (Math.abs(PintB_day) > Math.abs(PintE_day) && Math.abs(PintB_year) == Math.abs(PintE_year) && Math.abs(PintB_month) == Math.abs(PintE_month)) {
            alert("请输入正确的日期区间﹗");
            return false;
        }
    }
    else {
        if (allowNull) {
            alert("请输入完整的日期区间！");
            return false;
        }
    }
    return true;
}


//日期比較函數(當startDate大於endDate時，提示msg)
function CompareDateWithMsg(startDate, endDate, msg) {
    if (Trim(startDate) != '' && Trim(endDate) != '') {
        var PintB_year, PintB_month, PintB_day;
        var PintE_year, PintE_month, PintE_day;

        var arrStart;
        arrStart = startDate.split("/");

        PintB_year = parseFloat(arrStart[0]);
        PintB_month = parseFloat(arrStart[1]);
        PintB_day = parseFloat(arrStart[2]);

        var arrEnd;
        arrEnd = endDate.split("/");

        PintE_year = parseFloat(arrEnd[0]);
        PintE_month = parseFloat(arrEnd[1]);
        PintE_day = parseFloat(arrEnd[2]);
        if (Math.abs(PintB_year) > Math.abs(PintE_year)) {
            alert(msg);
            return false;
        }
        if (Math.abs(PintB_month) > Math.abs(PintE_month) && Math.abs(PintB_year) == Math.abs(PintE_year)) {
            alert(msg);
            return false;
        }
        if (Math.abs(PintB_day) > Math.abs(PintE_day) && Math.abs(PintB_year) == Math.abs(PintE_year) && Math.abs(PintB_month) == Math.abs(PintE_month)) {
            alert(msg);
            return false;
        }
    }
    return true;
}
function CompareNumerical(minV, maxV, msg) {
    if (minV > maxV) {
        if (msg != '') {
            alert(msg);
        }
        return false;
    }
    return true;
}


//validator end



/*
对页面中所有输入框、下拉框和CheckBoxList进行非空验证
验证条件：必须存在
<label for="要验证的控件ID" type="类别"><span class="NotNull">*</span>输入项说明:</label>
如：<label for="<%=BidTypeName.ClientID %>" type="CheckBoxList" minchecked="1"><span class="NotNull">*</span>CheckBoxList:</label>
*/
function FormRequiredCheck() {
    var inputs = document.getElementsByTagName('input');
    for (var i = 0; i < inputs.length; i++) {
        CleanDefaultInput(inputs[i].id);
    }
    var areas = document.getElementsByTagName('textarea');
    for (var i = 0; i < areas.length; i++) {
        CleanDefaultInput(areas[i].id);
    }
    var spans = document.getElementsByTagName('span');
    for (var i = 0; i < spans.length; i++) {
        if (spans[i].className == 'NotNull') {
            var label = spans[i].parentNode;
            if (!RequiredCheck(label)) {

                return false;
            }
        }
    }
    return true;
}

/*
根据label标签进行进行非空验证
如：<label for="<%=BidTypeName.ClientID %>" type="CheckBoxList" minchecked="1"><span class="NotNull">*</span>CheckBoxList:</label>
*/
function RequiredCheck(objLabel) {

    if (objLabel.htmlFor) {
        var obj = objLabel.htmlFor;
        var type = objLabel.getAttribute('type');
        switch (type) {
            case 'HtmlFile':
            case 'DropDownList':
                {

                    if (objLabel.innerText) {
                        var msg = objLabel.innerText.replace('*', '请选择').replace('：', '!');
                    } else {
                        var msg = objLabel.textContent.replace('*', '请选择').replace('：', '!');
                    }
                    //CleanDefaultInput(obj);
                    if (!IsEmpty(obj, msg)) {
                        return false;
                    }
                }; break;
            case 'HtmlEditor':
                {
                    var oEditor = FCKeditorAPI.GetInstance(obj);
                    if (oEditor.EditorDocument.body.innerText.Trim() == '') {

                        if (objLabel.innerText) {
                            var msg = objLabel.innerText.replace('*', '请输入').replace('：', '!');
                        }
                        else
                        { var msg = objLabel.textContent.replace('*', '请输入').replace('：', '!'); }
                        alert(msg);
                        try {
                            oEditor.Focus();
                        } catch (e) { }
                        return false;
                    }

                }; break;
            case 'CheckBoxList':
                {
                    if (objLabel.getAttribute('minchecked')) {
                        if (objLabel.innerText) {
                            var msg = objLabel.innerText.replace('*', '').replace('：', '');
                        }
                        else
                        { var msg = objLabel.textContent.replace('*', '').replace('：', ''); }

                        msg += '至少必须选择' + objLabel.getAttribute('minchecked') + '项！';
                        if (!CheckListChecked(obj, objLabel.getAttribute('minchecked'), msg)) {
                            return false;
                        }
                    }
                }; break;
            case 'RadioButtonList':
                {
                    if (objLabel.innerText) {
                        var msg = objLabel.innerText.replace('*', '请选择').replace('：', '!');
                    }
                    else
                    { var msg = objLabel.textContent.replace('*', '请选择').replace('：', '!'); }

                    if (!CheckListChecked(obj, 1, msg)) {
                        return false;
                    }
                }; break;
            //        case 'HtmlText': 
            //        case 'HtmlPassword': 
            //        case 'HtmlTextArea': 
            default:
                {

                    if (objLabel.innerText) {

                        var msg = objLabel.innerText.replace('*', '请输入').replace('：', '!');
                    } else {
                        var msg = objLabel.textContent.replace('*', '请输入').replace('：', '!');
                    }
                    //CleanDefaultInput(obj);

                    if (!IsEmpty(obj, msg)) {
                        return false;
                    }
                }; break;
        }
    }
    return true;
}


//清除默认输入值，输入框的默认值必须与title值一致
function CleanDefaultInput(obj) {
    var ctl = obj;
    if (typeof (obj) == 'string') {
        if (obj.Trim() == '') {
            return;
        }
        ctl = document.getElementById(obj)
    }
    if (ctl.getAttribute('title')) {
        if (ctl.type && (ctl.type == 'text' || ctl.type == 'password' || ctl.type == 'file' || ctl.type == 'textarea')) {
            if (ctl.getAttribute('title') == ctl.value) {
                ctl.value = '';
            }
        }
    }
}

function CheckListChecked(obj, minItemChecked, msg) {
    var ctl = document.getElementById(obj);
    var chks = ctl.getElementsByTagName('input');
    var checked = 0;
    for (var i = 0; i < chks.length; i++) {
        if (chks[i].checked) {
            checked++;
        }
    }
    if (checked < minItemChecked) {
        alert(msg);
        try {
            chks[0].focus();
        } catch (e) { }
        return false;
    }
    return true;
}
/*
限制textarea输入长度
用法：<textarea maxlength="10" onkeyup="return IsMaxLen(this)"></textarea>
*/
function IsMaxLen(obj) {
    var nMaxLen = obj.getAttribute('maxlength') ? parseInt(obj.getAttribute('maxlength'), 10) : 0;
    if (nMaxLen > 0 && obj.value.length > nMaxLen) {
        obj.value = obj.value.substring(0, nMaxLen)
    }
}
/*
判断输入的是否是数字
<input onblur="IsNumerical(this)" maxlength="10" title="0.00" scale="2" type="text" />
如果scale > 0， 那么当小数位数大于scale时，进行四舍五入处理；
如果scale <= 0， 那么只判断是否是数值。
如果输入不真确那么就赋上title值
*/
function IsNumerical(sender) {
    if (sender.value.Trim() == '') {
        return;
    }
    var scale = parseInt(sender.getAttribute('scale'), 10);
    var def = sender.getAttribute('title');
    if (sender.value == def) {
        return true;
    }
    if (scale > 0) {
        var f = parseFloat(sender.value);
        if (!isNaN(f)) {
            sender.value = ForDight(f, scale);
        }
        else {
            alert('请输入数值！');
            sender.value = '';
            try {
                sender.focus();
            } catch (e) { }
            return false;
        }
    }
    else {
        var i = parseInt(sender.value, 10);
        if (!isNaN(i)) {
            sender.value = i;
        }
        else {
            alert('请输入数值！');
            sender.value = '';
            try {
                sender.focus();
            } catch (e) { }
            return false;
        }
    }
    return true;
}
function IsDateTime(sender) {
    if (sender.value.Trim() != '') {
        if (!IsDateChina(sender, '请输入正确的日期格式!\n格式为:yyyy-MM-dd')) {
            sender.value = '';
        }
    }
}
function IsEmail(sender) {
    if (sender.value.Trim() != '') {
        if (!IsEMail(sender, '请输入正确的E-Mail格式!')) {
            sender.value = '';
        }
    }
}
