﻿// JScript 文件

function FireControlEvent(controlObj,eventName)
{
    if(document.all)   
    {
        if(eventName=="click")
        {
            controlObj.click();
        }
        else
        {
            controlObj.fireEvent("on"+eventName);
        }
    }
    else
    {
        var evt=document.createEvent("MouseEvent");   
        evt.initEvent(eventName,true,true);   
        controlObj.dispatchEvent(evt);
    }
}
function addControlEvent(obj, evType, fn){
 if (obj.addEventListener){
    obj.addEventListener(evType, fn, false);
    return true;
 } else if (obj.attachEvent){
    var r = obj.attachEvent("on"+evType, fn);
    return r;
 } else {
    return false;
 }
}
//===========================================================================================
/// <summary>
/// 显示遮罩层时隐藏掉不能被遮住的html控件
/// </summary>
function HideElement(elmID)
{
	if(document.all) 
	{
		for(i = 0; i < document.all.tags( elmID ).length; i++) 
		{
			obj = document.all.tags( elmID )[i];
			if(!obj||obj.style.display=="none"||obj.className.toLowerCase()) continue;
			if(obj.parentNode.firstChild.tagName!=null&&obj.parentNode.firstChild.tagName.toLowerCase()=="span")
			{
			    obj.parentNode.firstChild.innerText=obj.options[obj.selectedIndex].text;
			}
			obj.style.visibility  = "hidden";
		}
	}
}
//===========================================================================================

//===========================================================================================
/// <summary>
/// 隐藏遮罩层时显示隐藏的不能被遮住的html控件
/// </summary>
function ShowElement(elmID) 
{
	if(document.all) 
	{
		for(i = 0; i < document.all.tags( elmID ).length; i++)
		 {
			obj = document.all.tags(elmID)[i];
			if(!obj) continue;
			if(obj.parentNode.firstChild.tagName!=null&&obj.parentNode.firstChild.tagName.toLowerCase()=="span")
			{
			    obj.parentNode.firstChild.innerText="";
			}
			obj.style.visibility = "";
		}
	}
}
//===========================================================================================
//===========================================================================================
/// <summary>
/// 设置Repeater中一组RadioButton单选
/// </summary>
function SetUniqueRadioButton(nameregex, current)
{
   re = new RegExp(nameregex);
   for(i = 0; i < document.forms[0].elements.length; i++)
   {
      elm = document.forms[0].elements[i]
      if (elm.type == 'radio')
      {
         if (re.test(elm.name))
         {
            elm.checked = false;
         }
      }
   }
   current.checked = true;
}
//===========================================================================================

function PreviewUploadImage(uploader,container)
{
    container.src = uploader.value;
    SetUploadImage(container);
}
function SetUploadImage(container)
{   
    container.style.display="";
    var picWidth=120;
    var picHeight=70;
    var imgWidth = container.width;
    var imgHeight = container.height;
    var percentageWidth =imgWidth/picWidth;
    var percentageHeight =imgHeight/picHeight;
    if(percentageWidth>percentageHeight)
    {
        container.width=picWidth;
    }
    else
    {
        container.height=picHeight;
    }    
}
function OpenPopWin(width, height,winObj,maskObj) {
    winObj.style.display="";
    maskObj.style.display="";
    CenterPopWin(width, height,winObj,maskObj);
    HideElement("SELECT");
}
function ClosePopWin(winObj,maskObj) {
    winObj.style.display="none";
    maskObj.style.display="none";
    ShowElement("SELECT");
}
function CenterPopWin(width, height,winObj,maskObj) {
		if (width == null || isNaN(width)) {
			width = winObj.offsetWidth;
		}
		if (height == null) {
			height = winObj.offsetHeight;
		}
		
		//var theBody = document.documentElement;
		var theBody = document.getElementsByTagName("BODY")[0];
		theBody.style.overflow = "hidden";
		
		var scTop = parseInt(theBody.scrollTop,10);
		var scLeft = parseInt(theBody.scrollLeft,10);
		
		maskObj.style.top = scTop + "px";
		maskObj.style.left = scLeft + "px";
		
	
		SetMaskSize(maskObj);
		

		var fullHeight = GetViewportHeight();
		var fullWidth = GetViewportWidth();
		
		winObj.style.top = (scTop + ((fullHeight - (height)) / 2)) + "px";
		winObj.style.left =  (scLeft + ((fullWidth - width) / 2)) + "px";
		
		//alert(fullWidth + " " + width + " " + gPopupContainer.style.left);

}
function SetMaskSize(maskObj) {
	var theBody = document.getElementsByTagName("BODY")[0];
			
	var fullHeight = GetViewportHeight();
	var fullWidth = GetViewportWidth();
	
	// Determine what's bigger, scrollHeight or fullHeight / width
	if (fullHeight > theBody.scrollHeight) {
		popHeight = fullHeight;
	} else {
		popHeight = theBody.scrollHeight;
	}
	
	if (fullWidth > theBody.scrollWidth) {
		popWidth = fullWidth;
	} else {
		popWidth = theBody.scrollWidth;
	}
	
	maskObj.style.height = popHeight + "px";
	maskObj.style.width = popWidth + "px";
	
}
/**
 * Code below taken from - http://www.evolt.org/article/document_body_doctype_switching_and_more/17/30655/
 *
 * Modified 4/22/04 to work with Opera/Moz (by webmaster at subimage dot com)
 *
 * Gets the full width/height because it's different for most browsers.
 */
function GetViewportHeight() {
	if (window.innerHeight!=window.undefined) return window.innerHeight;
	if (document.compatMode=='CSS1Compat') return document.documentElement.clientHeight;
	if (document.body) return document.body.clientHeight; 
	return window.undefined; 
}
function GetViewportWidth() {
	if (window.innerWidth!=window.undefined) return window.innerWidth; 
	if (document.compatMode=='CSS1Compat') return document.documentElement.clientWidth; 
	if (document.body) return document.body.clientWidth; 
	return window.undefined; 
}

 /// <summary>
/// 限制文本输入框的文字长度
/// </summary>
/// <param name="obj">文本输入框的对象实例</param>
/// <param name="count">限制的字符长度</param>
function LimitTextBoxLength(obj,count)
{
    if(obj.createTextRange){ //for ie
        obj.focus();
        var slct = document.selection;
        var rng = slct.createRange();//obj.createTextRange();
        obj.select();
        rng.setEndPoint("StartToStart", slct.createRange());
        var cursor = rng.text.length;
        rng.collapse(false);
        rng.select();

        if(obj.value.length>count)
        {
            var overLength = (obj.value.length - count);
            var strart = cursor-overLength;
            var result = obj.value.substring(0, strart);
            result += obj.value.substring(cursor, obj.value.length);
            obj.value = result;
        }
    }else{ //for mozilla
        var iStart = obj.selectionStart;
        var iEnd = obj.selectionEnd;
        if(obj.value.length>count)
        {
            iStart-=obj.value.length-count;
        }
        obj.value=obj.value.substring(0,iStart)+obj.value.substring(iEnd,obj.value.length)
        endRange=obj.value.length;
        obj.setSelectionRange(endRange,endRange)
    }
}

function LimitInput(obj,dataType)
{
    switch(dataType.toLowerCase())
    {
        case "int":
            validValue=obj.value.replace(/[^\d]/g,'');
            break;
    }
    if(obj.value!=validValue)
    {
        obj.value=validValue;
    }
}
var isIE; 
var isNav; 
isIE = (navigator.appName == "Microsoft Internet Explorer"); 
isNav = (navigator.appName == "Netscape"); 
function TransformXml(xslUrl,xmlUrl)
{
	try
	{
		if (isIE) 
		{ 
			var xml = new ActiveXObject("Microsoft.XMLDOM") 
			xml.async = false 
			xml.load(xmlUrl) 
			if(xml.text=="")
			{
				return "";
			}
			var xsl = new ActiveXObject("Microsoft.XMLDOM") 
			xsl.async = false 
			xsl.load(xslUrl) 

			return xml.transformNode(xsl);
		} 
		else if(isNav) 
		{ 
			var processor = new XSLTProcessor(); 
			var xslt = document.implementation.createDocument("", "", null); 
			xslt.async = false; 
			xslt.load(xslUrl); 
			processor.importStylesheet(xslt); 

			var src_doc = document.implementation.createDocument("","", null); 
			src_doc.async = false; 
			src_doc.load(xmlUrl); 
			var result = processor.transformToDocument(src_doc); 
			var xmls = new XMLSerializer(); 
			return xmls.serializeToString(result); 
		}
	}catch(e)
	{
		return "";
	}
}


//===========================================================================================


/// <summary>创建xml对象</summary>
/// <returns>返回创建成功的xml对象</returns>
function createDomDoc()
{        
    if(isIE)
    {
        var signatures=["Msxml2.DOMDocument.5.0","Msxml2.DOMDocument.4.0","Msxml2.DOMDocument.3.0","Msxml2.DOMDocument","Microsoft.XmlDom"];
	    for(var i=0;i<signatures.length;i++){try{ this.domDoc=new ActiveXObject(signatures[i]);return this.domDoc;}catch(e){}}
	    return null;
	}
	else
	{
	    return document.implementation.createDocument("","",null);
	}
}

/// <summary>根据xpath取符合条件的节点集合</summary>
/// <param name="domDoc">xml对象</param>
/// <param name="xpath">xpath语句</param>
/// <returns>返回符合条件的节点集合</returns>
function selectNodes(domDoc, xpath)
{
    if (isIE)
		return domDoc.selectNodes(xpath) ;
	else{
		var aNodeArray = new Array();
		var xPathResult = domDoc.evaluate(xpath, domDoc, domDoc.createNSResolver(domDoc.documentElement), XPathResult.ORDERED_NODE_ITERATOR_TYPE, null) ;
		if (xPathResult){
			var oNode = xPathResult.iterateNext() ;
			while(oNode){
				aNodeArray[aNodeArray.length] = oNode ;
				oNode = xPathResult.iterateNext();
			}
		}
		return aNodeArray ;
	}
}

/// <summary>返回xml对象的内容字符串</summary>
/// <param name="domDoc">xml对象</param>
/// <returns>返回xml对象的内容字符串</returns>
function lookXml(domDoc){
	if(isIE){return domDoc.xml;}
	else{
		var serializer=new XMLSerializer();
		var xml=serializer.serializeToString(domDoc);
		return xml;
	}
}

/// <summary>根据url异步加载xml对象</summary>
/// <param name="domDoc">传入创建好的xml对象</param>
/// <param name="url">xml文件存在的地址（有人说此方法只能访问本服务器上的文件，尚未验证）</param>
/// <param name="fun">加载成功后执行的函数名（带一个xml对象参数）</param>
/// <returns>无</returns>
function loadByUrl(domDoc, url, fun)
{
    domDoc.async = true;
    if(isIE)
    {
        domDoc.onreadystatechange = function() 
        { 
            //alert(domDoc.readyState);
            if (domDoc.readyState == 4) 
            {
   		        //alert("readyState载入完毕!");
   		        fun(domDoc);
            } 
        } 
    }
    else
    {
        domDoc.onload = function(success)
        {
            if(success)
            {
                //alert("onload加载完成。");
                fun(domDoc);
            }
        }
    }
    domDoc.load(url);
}

/// <summary>获取节点的内容</summary>
/// <param name="obj">xml节点对象</param>
/// <returns>返回节点内的值</returns>
function getText(obj)
{
    return obj.firstChild.nodeValue;
}

/// <summary>获取节点属性</summary>
/// <param name="obj">xml节点对象</param>
/// <param name="key">属性名</param>
/// <returns>返回节点指定属性的值</returns>
function getKey(obj, key)
{
    var o=obj.getAttribute(key);
    return o==null?"":o;
}

/// <summary>设置节点的内容</summary>
/// <param name="obj">xml节点对象</param>
/// <param name="text">要写入节点的内容</param>
/// <returns>无</returns>
function setText(obj, text)
{
    obj.firstChild.nodeValue=text;
}

/// <summary>设置节点的属性</summary>
/// <param name="obj">xml节点对象</param>
/// <param name="key">属性名</param>
/// <param name="text">要写入节点属性的内容</param>
/// <returns>无</returns>
function setKey(obj, key, text)
{
    obj.setAttribute(key,text);
}

if (!isIE){
    var  ex;
    XMLDocument.prototype.__proto__.__defineGetter__("xml" ,function (){
         try {
             return  new XMLSerializer().serializeToString(this);
        } catch (ex){
             var  d  =  document.createElement("div");
            d.appendChild(this.cloneNode( true ));
             return  d.innerHTML;
        }
    });
    Element.prototype.__proto__.__defineGetter__("xml",  function (){
         try {
             return   new  XMLSerializer().serializeToString(this);
        } catch (ex){
             var  d  =  document.createElement("div");
            d.appendChild(this.cloneNode(true));
             return  d.innerHTML;
        }
    });
    XMLDocument.prototype.__proto__.__defineGetter__("text",  function (){
         return   this.firstChild.textContent;
    });
    Element.prototype.__proto__.__defineGetter__("text",  function (){
         return   this.textContent;
    });

    XMLDocument.prototype.selectSingleNode = Element.prototype.selectSingleNode = function (XPath){
        alert("selectSingleNode");
         var  x = this.selectNodes(xpath);
         alert(x);
         alert(x.length);
         if ( !x || x.length < 1 ) return  null;
         return  x[0];
    }
    XMLDocument.prototype.selectNodes = Element.prototype.selectNodes = function (xpath){       
     alert("selectNodes");
        var xpe = new XPathEvaluator();
     alert("1");         
      var nsResolver = xpe.createNSResolver(this.ownerDocument == null ? this.documentElement : this.ownerDocument.documentElement);       
         alert("2");    
           var result = xpe.evaluate(xpath, this, nsResolver, 0, null);
         alert("3");    
         var  found =  [];
         var  res;         
         while (res = result.iterateNext())
        found.push(res);
        return found;
    }
    
    Node.prototype.transformNode = function (oXslDom) { 
                 
        var oProcessor = new XSLTProcessor(); 
        oProcessor.importStylesheet(oXslDom); 
     
        var oResultDom = oProcessor.transformToDocument(this); 
        var sResult = oResultDom.xml; 
     
        if (sResult.indexOf(" <transformiix:result") >  -1) { 
            sResult = sResult.substring(sResult.indexOf("> ") + 1, sResult.lastIndexOf(" <")); 
        } 
     
        return sResult;                 
    };
}