﻿/*---------------------------------------------------------------------------*\
|  Subject:       EpointCommon，控件通用JS函数                                |
|  Version:       1.0                                                         |
|  Author:        徐国春                                                      |
|  FileName:      EpointCommon.js                                             |
|  Created:       2009-01-09                                                  |
|  LastModified:                                                              |
\*---------------------------------------------------------------------------*/

//判断用户是否使用IE浏览器
if(typeof(Epoint_IE) != "boolean")
	var Epoint_IE = (document.all) ? true : false;

//根据对象的ID获取对象
function Epoint_getElementById(id)
{
	if(Epoint_IE)
		return document.all[id];
	else 
		return document.getElementById(id);
}

//根据事件获取事件的目标对象
function Epoint_getSrcElement(evnt)
{
	if(Epoint_IE)
		return evnt.srcElement;
	else
		return evnt.target;
}

function Epoint_NoContextMenu() 
{
    event.cancelBubble = true
    event.returnValue = false;

    return false;
}

//根据对象，获取对象绝对位置。
function EpointGetAbsoluteLocation(o) 
{ 
    if ( arguments.length != 1 || o == null ) 
    { 
        return null; 
    } 
    var nLt=0;
    var nTp=0;
    var elmt = o;
    while( elmt = elmt.offsetParent ) 
    { 
          // add this judge 
        if ( elmt.style.position == 'absolute' || elmt.style.position == 'relative'  
            || ( elmt.style.overflow != 'visible' && elmt.style.overflow != '' ) ) 
        { 
            break; 
        }  
        nTp += elmt.offsetTop; 
        nLt += elmt.offsetLeft; 
    }     
    return { absoluteTop: nTp, absoluteLeft: nLt, 
        offsetWidth: o.offsetWidth, offsetHeight: o.offsetHeight }; 
}

//通用函数，给对象移除事件
function EpointremoveEventListener(elem, evt, fn)
{ 
	try
	{
		if(elem && elem.EpointremoveEventListener)
		{
			elem.EpointremoveEventListener(evt, fn);
			return;
		}
	}catch(ex){}
	try
	{
		if(elem && elem.detachEvent)
			elem.detachEvent('on' + evt, fn);
	}catch(ex){}
}
	
//通用函数，给对象添加事件
function EpointaddEventListener(elem,evtName,fn,flag)
{ 
	
	try{if(elem.addEventListener){elem.addEventListener(evtName,fn,flag==true); return;}}catch(ex){}
	try{if(elem.attachEvent){elem.attachEvent("on"+evtName,fn); return;}}catch(ex){}
	eval("var old=elem.on"+evtName);
	var sF=fn.toString();
	var i=sF.indexOf("(")+1;
	try
	{
	if((typeof old =="function") && i>10)
	{
		old=old.toString();
		
		var args=old.substring(old.indexOf("(")+1,old.indexOf(")"));
		args=replace(args," ","");
		if(args.length>0) args=args.split(",");
		
		old=old.substring(old.indexOf("{")+1,old.lastIndexOf("}"));
		
		sF=sF.substring(9,i);
		if(old.indexOf(sF)>=0)return;
		var s="fn=new Function(";
		for(i=0;i<args.length;i++)
		{
			if(i>0)sF+=",";
			s+="\""+args[i]+"\",";
			sF+=args[i];
		}
		sF+=");"+old;
		eval(s+"sF)");
	}
	eval("elem.on"+evtName+"=fn");
	}catch(ex){}
}

//根据属性名称查找指定对象内部的所有对象
function Epoint_getElementByAttr(elem,type,attr)
{
    var e = elem.getElementsByTagName(type);
    if(e!=null && e.length>0)
    {
        for(var i=0;i<e.length;i++)
            if(e[i].getAttribute("EpointType")==attr)
                return e[i];
    }   
    return null;
}

function Epoint_Validator(elem)
{
    if(typeof(ValidatorOnChange)=='function')
    {
        var obj = new Object();
        obj.srcElement = elem;
        if(typeof(elem.Validators)=="undefined");
            ValidatorOnLoad();            
        ValidatorOnChange(obj);                
    }
}

//字符串的Trim函数
String.prototype.Trim = function(){    
    return  this.replace(/^\s*(.*?)[\s\n]*$/g,  '$1');  
} 

//字符串的ReplaceAll函数
String.prototype.ReplaceAll  = function(s1,s2){    
    return this.replace(new RegExp(s1,"gm"),s2);    
} 
String.prototype.remove=function(str)
{
    if(this == str) return "";
    var s='';
    var len = str.length;
    var index = this.indexOf(str);
    if(index>-1)
    {
        if(index==0)
            s=this.substring(len,this.length);  
        else
        {
            index = this.indexOf(";" + str);
            s=this.substring(0,index + 1);
            if(index + len + 1<=this.length) 
                s+=this.substring(index + len + 1,this.length);                
        }
        return s;
        
    }
    else
        return this;
};

String.prototype.EpointAddStr=function(str,div)
{
    var index = this.indexOf(str);
    
    if(index==-1)
       return this + str;
    
    if(index==0)
        return this;
    else
    {
        if(div==null)
            return this + str;
        else
        {
            if(this.indexOf(div + str) > -1)
                return this;
            else
                return this + str;
        }                   
    }        
};

function array_has(val)
{
    var i;
    for(i = 0; i < this.length; i++)
    {
        if(this[i] == val)
        {
            return true;
        }
    }
    return false;
}
Array.prototype.has = array_has;
    
function array_remove(val)
{
    var i;
    var j;
    for(i = 0; i < this.length; i++)
    {
        if(this[i] == val)
        {
            for(j = i; j < this.length - 1; j++)
            {
                this[j] = this[j + 1];
            }
            this.length = this.length - 1;
        }
    }
}
Array.prototype.remove = array_remove;

function array_removeAt(index)
{
    var i;
    if(index < this.length)
    {
        for(i = index; i < this.length - 1; i++)
        {
            this[i] = this[i + 1];
        }
        this.length = this.length - 1;
    }
}
Array.prototype.removeAt = array_removeAt;
        
/* 实现了中英文混合字符串取长度*/
/* 取得字符串的字节长度        */
function Epoint_ComputeStringLength(str)
{
    if(str==null) return 0;
    return str.length;
    /* 暂时汉字计算一个字符
    var i;
    var len;
    var strTmp;
    strTmp=str;
    len = 0;
    for (i=0;i<strTmp.length;i++)
    {
        if (strTmp.charCodeAt(i)>255) len+=2; 
        else len++;
    }
    return len;*/
}

