﻿/*---------------------------------------------------------------------------*\
|  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)");
	    }
	    alert(fn.toString());
	    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;*/
}

//格式化日期字符串
function Epoint_FormatDate_Character(sDate,bShowLongDate,sCharacter,sFormatTime) 
{
    if(sDate.length > 10)
    {
        switch(sFormatTime)
        {
            case "HH":
                sDate = sDate + ":00:00";
                break;
            case "HHMM":
                sDate = sDate + ":00";
                break;
            default:
                break;
        }
    }
    sDate = Epoint_FormatDate(sDate,bShowLongDate);
    if(sCharacter=="-")
    {
        sDate=sDate.replace("/","-");
        sDate=sDate.replace("/","-");
    }
    
    if(sCharacter=="年")
    {
        sDate=sDate.replace("/","年");
        sDate=sDate.replace("/","月");
        if(sDate.indexOf(" ") != -1)
	        sDate=sDate.replace(" ","日 ");
	    else
	        sDate+="日";
    }
    
    if(sDate.length > 10)
    {
        var aDate = sDate.split(' ');
        var aTime = aDate[1].split(':');
        switch(sFormatTime)
        {
            case "HH":
                return aDate[0] + " " + aTime[0];
            case "HHMM":
                return aDate[0] + " " + aTime[0] + ":" + aTime[1];
            default:
                return sDate;
        }
    }
    
    
    return sDate;
}

//格式化日期字符串
function Epoint_FormatDate(sDate,bShowLongDate) 
{
	while((sDate.indexOf("-") > -1))
	{
		var re=/-/i;
		sDate=sDate.replace(re,"/");
	}
	
	if((sDate.indexOf("年") != -1) && (sDate.indexOf("/") == -1))
	{
	    sDate=sDate.replace("年","/");
	    sDate=sDate.replace("月","/");
	    sDate=sDate.replace("日","");
	}
	if(sDate.length > 10)
	{
	    var aDate = sDate.split(' ');
	    var aDate1 = aDate[0].split('/');
	    var aTime = aDate[1].split(':');
	    try
	    {
	        var dScrap = new Date(parseInt(aDate1[0],10),parseInt(aDate1[1],10)-1,parseInt(aDate1[2],10),aTime[0],aTime[1],aTime[2]);	
            if (dScrap == "NaN")
            {
                var dNow = new Date();
                return Epoint_FormatLongDate(dNow.getFullYear(),(dNow.getMonth()+1),dNow.getDate(),bShowLongDate) +" "+Epoint_FormatTime(dNow.getHours(),dNow.getMinutes(),dNow.getSeconds());
            }
            return Epoint_FormatLongDate(dScrap.getFullYear(),(dScrap.getMonth()+1),dScrap.getDate(),bShowLongDate) +" "+Epoint_FormatTime(dScrap.getHours(),dScrap.getMinutes(),dScrap.getSeconds());        
        }
        catch(e)
        {
            return sScrap;
        }
	}
	else
	{
        var dScrap = new Date(sDate);	
        if (dScrap == "NaN") 
        {
            var dNow = new Date();
            return Epoint_FormatLongDate(dNow.getFullYear(),(dNow.getMonth()+1),dNow.getDate(),bShowLongDate) ;
        }

        return Epoint_FormatLongDate(dScrap.getFullYear(),(dScrap.getMonth()+1),dScrap.getDate(),bShowLongDate)
	}
}

function Epoint_FormatLongDate(iYear,iMonth,iDay,bShowLongDate)
{
    
        
    var sMonth = iMonth;
    var sDay = iDay;
    if(!bShowLongDate)
        return iYear+"/"+sMonth+"/"+sDay;
    if(iMonth<10)
        sMonth = "0" + sMonth;
    if(iDay<10)
        sDay = "0" + sDay;
    return iYear+"/"+sMonth+"/"+sDay;
}

function Epoint_FormatTime(iHour,iMinute,iSecond)
{
    var sHour = iHour;    
    var sMinute = iMinute;
    var sSecond = iSecond;
    if(iHour<10)
        sHour = "0" + sHour;
    if(iMinute<10)
        sMinute = "0" + sMinute;
    if(iSecond<10)
        sSecond = "0" + sSecond;    
    return sHour+":"+sMinute+":"+sSecond;    
}