﻿/* ************************************************ *
* Utils.js
* Encapsulated by daipf at 03/08/2009,
* All Rights Reversed,
* Donot Referring or Modifying witout Permit
* MSN:dz999n999@hotmail.com
* Email:dzcouple@gmail.com
* ************************************************* */
var Utils = 
{    
	CreateXmlHttp : function()
	{
		if (window.XMLHttpRequest )
			return new XMLHttpRequest() ; 
		else if (window.ActiveXObject )
		{
			try
			{
				return new ActiveXObject("MsXml2.XmlHttp") ;
			}
			catch(e)
			{
				try
				{
					return new ActiveXObject("Microsoft.XMLHTTP");
				}
				catch(e)
				{
					return null;
				}
			}
		}
	},
	
  /***功能:格式化时间*示例:DateUtil.Format("yyyy/MM/dd","Thu Nov 9 20:30:37 UTC+0800 2006 ");*返回:2006/11/09*/	
  DateUtilFormat:function(fmtCode,date){    
    var result,d,arr_d;        var patrn_now_1=/^y{4}-M{2}-d{2}\sh{2}:m{2}:s{2}$/;    var patrn_now_11=/^y{4}-M{1,2}-d{1,2}\sh{1,2}:m{1,2}:s{1,2}$/;        var patrn_now_2=/^y{4}\/M{2}\/d{2}\sh{2}:m{2}:s{2}$/;    var patrn_now_22=/^y{4}\/M{1,2}\/d{1,2}\sh{1,2}:m{1,2}:s{1,2}$/;        var patrn_now_3=/^y{4}年M{2}月d{2}日\sh{2}时m{2}分s{2}秒$/;    var patrn_now_33=/^y{4}年M{1,2}月d{1,2}日\sh{1,2}时m{1,2}分s{1,2}秒$/;        var patrn_date_1=/^y{4}-M{2}-d{2}$/;    var patrn_date_11=/^y{4}-M{1,2}-d{1,2}$/;        var patrn_date_2=/^y{4}\/M{2}\/d{2}$/;    var patrn_date_22=/^y{4}\/M{1,2}\/d{1,2}$/;        var patrn_date_3=/^y{4}年M{2}月d{2}日$/;    var patrn_date_33=/^y{4}年M{1,2}月d{1,2}日$/;        var patrn_time_1=/^h{2}:m{2}:s{2}$/;    var patrn_time_11=/^h{1,2}:m{1,2}:s{1,2}$/;    var patrn_time_2=/^h{2}时m{2}分s{2}秒$/;    var patrn_time_22=/^h{1,2}时m{1,2}分s{1,2}秒$/;        if(!fmtCode){fmtCode="yyyy/MM/dd hh:mm:ss";}    if(date){        d=new Date(date);        if(isNaN(d)){            msgBox("时间参数非法\n正确的时间示例:\nThu Nov 9 20:30:37 UTC+0800 2006\n或\n2006/       10/17");            return;}    }else{        d=new Date();    }    if(patrn_now_1.test(fmtCode))    {        arr_d=Utils.splitDate(d,true);        result=arr_d.yyyy+"-"+arr_d.MM+"-"+arr_d.dd+" "+arr_d.hh+":"+arr_d.mm+":"+arr_d.ss;    }    else if(patrn_now_11.test(fmtCode))    {        arr_d=Utils.splitDate(d);        result=arr_d.yyyy+"-"+arr_d.MM+"-"+arr_d.dd+" "+arr_d.hh+":"+arr_d.mm+":"+arr_d.ss;    }    else if(patrn_now_2.test(fmtCode))    {        arr_d=Utils.splitDate(d,true);        result=arr_d.yyyy+"/"+arr_d.MM+"/"+arr_d.dd+" "+arr_d.hh+":"+arr_d.mm+":"+arr_d.ss;    }    else if(patrn_now_22.test(fmtCode))    {        arr_d=Utils.splitDate(d);        result=arr_d.yyyy+"/"+arr_d.MM+"/"+arr_d.dd+" "+arr_d.hh+":"+arr_d.mm+":"+arr_d.ss;    }    else if(patrn_now_3.test(fmtCode))    {        arr_d=Utils.splitDate(d,true);        result=arr_d.yyyy+"年"+arr_d.MM+"月"+arr_d.dd+"日"+" "+arr_d.hh+"时"+arr_d.mm+"分"+arr_d.ss+"秒";    }    else if(patrn_now_33.test(fmtCode))    {        arr_d=Utils.splitDate(d);        result=arr_d.yyyy+"年"+arr_d.MM+"月"+arr_d.dd+"日"+" "+arr_d.hh+"时"+arr_d.mm+"分"+arr_d.ss+"秒";    }        else if(patrn_date_1.test(fmtCode))    {        arr_d=Utils.splitDate(d,true);        result=arr_d.yyyy+"-"+arr_d.MM+"-"+arr_d.dd;    }    else if(patrn_date_11.test(fmtCode))    {        arr_d=Utils.splitDate(d);        result=arr_d.yyyy+"-"+arr_d.MM+"-"+arr_d.dd;    }    else if(patrn_date_2.test(fmtCode))    {        arr_d=Utils.splitDate(d,true);        result=arr_d.yyyy+"/"+arr_d.MM+"/"+arr_d.dd;    }    else if(patrn_date_22.test(fmtCode))    {        arr_d=Utils.splitDate(d);        result=arr_d.yyyy+"/"+arr_d.MM+"/"+arr_d.dd;    }    else if(patrn_date_3.test(fmtCode))    {        arr_d=Utils.splitDate(d,true);        result=arr_d.yyyy+"年"+arr_d.MM+"月"+arr_d.dd+"日";    }    else if(patrn_date_33.test(fmtCode))    {        arr_d=Utils.splitDate(d);        result=arr_d.yyyy+"年"+arr_d.MM+"月"+arr_d.dd+"日";    }    else if(patrn_time_1.test(fmtCode)){        arr_d=Utils.splitDate(d,true);        result=arr_d.hh+":"+arr_d.mm+":"+arr_d.ss;    }    else if(patrn_time_11.test(fmtCode)){        arr_d=Utils.splitDate(d);        result=arr_d.hh+":"+arr_d.mm+":"+arr_d.ss;    }    else if(patrn_time_2.test(fmtCode)){        arr_d=Utils.splitDate(d,true);        result=arr_d.hh+"时"+arr_d.mm+"分"+arr_d.ss+"秒";    }    else if(patrn_time_22.test(fmtCode)){        arr_d=Utils.splitDate(d);        result=arr_d.hh+"时"+arr_d.mm+"分"+arr_d.ss+"秒";    }    else{        msgBox("没有匹配的时间格式!");        return;    }       return result;
  },
  splitDate:function(d,isZero){    
    var yyyy,MM,dd,hh,mm,ss;    if(isZero){         yyyy=d.getFullYear();         MM=(d.getMonth()+1)<10?"0"+(d.getMonth()+1):d.getMonth()+1;         dd=d.getDate()<10?"0"+d.getDate():d.getDate();         hh=d.getHours()<10?"0"+d.getHours():d.getHours();         mm=d.getMinutes()<10?"0"+d.getMinutes():d.getMinutes();         ss=d.getSeconds()<10?"0"+d.getSeconds():d.getSeconds();    }else{         yyyy=d.getYear();         MM=d.getMonth()+1;         dd=d.getDate();         hh=d.getHours();         mm=d.getMinutes();         ss=d.getSeconds();      }    return {"yyyy":yyyy,"MM":MM,"dd":dd,"hh":hh,"mm":mm,"ss":ss};  
  },
      
  GetOffset:function(what, offsettype)
  {
    if(Utils.Client.Browser.IsFireFox)
    {
        return (what.offsetParent)? what[offsettype] + Utils.GetOffset(what.offsetParent, offsettype): what[offsettype]
    }
    else
    {
        return (what.offsetParent)? what[offsettype]+Utils.GetOffset(what.offsetParent, offsettype) : what[offsettype]
    }
  },

  GetOffsetOf:function(el){
    var offsets={left:Utils.GetOffset(el, "offsetLeft"), top:Utils.GetOffset(el, "offsetTop")}
    
    //bellow is just for scroll position calculation,2009.05.17
    var parent = null;
    if (el.parentNode)
    { 
        parent = el.parentNode;
    }
    else
    {
        parent = null;
    }
    while (parent && parent.tagName != 'BODY' && parent.tagName != 'HTML')
    {
        offsets.left -= parent.scrollLeft;
        offsets.top -= parent.scrollTop;
        if (parent.parentNode)
        {
            parent = parent.parentNode;
        }
        else
        {
            parent = null;
        }
    }
    //above is end
    
    return offsets;
  },
  
  GetSize:function(e)
  {
  	var size = {height:e.offsetHeight,width:e.offsetWidth};
  	return size;
  },
  
  GetRect : function(e)
  {
    var pos = Utils.GetOffsetOf(e);
    var size = Utils.GetSize(e);
    var rect = {top:pos.top,left:pos.left,width:size.width,height:size.height};
    return rect;
  },
  
  SenderOf : function(evt)
  {
  	evt = evt || window.event;
  	var e = evt.target ? evt.target : evt.srcElement;
  	return e;
  },
  
  GetElementsByTagAndName : function(tag,name)
  {
	    var elements = new Array();
	    var esbytags = document.getElementsByTagName(tag);
	    for(var i = 0;i<esbytags.length;i++)
	    {
	        var e = esbytags[i];
	        if(e)
	        {
	            var n = e.getAttribute("name");
	            if(n && n == name)
	            {
	                elements.push(e);
	            }
	        }
	    }
	    return elements;
	},
	
    GetElementsByTagAndNameAndValue : function(tag,name,sval)
    {
        var elements = new Array();
	    var esbytags = document.getElementsByTagName(tag);
	    for(var i = 0;i<esbytags.length;i++)
	    {
	        var e = esbytags[i];
	        if(e)
	        {
	            var n;
	            if(name == "for")
	            {
	               n = e.getAttribute(name) || e.getAttribute("html"+name);
	            }
	            else
	            {
	               n = e.getAttribute(name) ;
	            }
	            if(n && n == sval)
	            {
	                elements.push(e);
	            }
	        }
	    }
	    return elements;
    },
	
	GetElementByTagClass : function(tag,cls)
	{
		var elements = [];
        var esbytags = document.getElementsByTagName(tag);
        for(var i = 0;i<esbytags.length;i++)
        {
            var e = esbytags[i];
            if(e)
            {
                var n = e.getAttribute("class");
                if(n && n == cls)
                {
                    elements[elements.length] = e;
                }
            }
        }
        return elements;
	},
	
	// c is contained by m
	Contained : function(c,m)
    {
	    while (c && typeof c != "undefined" && c!=m)try {c=c.parentNode} catch(e){c=m}
	    if (c==m)
		    return true
	    else
		    return false
    }
};

Utils.Event =
{
	AddEventHandler : function(oTarget, sEventType, fnHandler)
	{
		if (oTarget.addEventListener) {
		  oTarget.addEventListener(sEventType, fnHandler, false);
		} else if (oTarget.attachEvent) {
		  oTarget.attachEvent("on" + sEventType, fnHandler);
		} else {
		  oTarget["on" + sEventType] = fnHandler;
		}
  },

  RemoveEventHandler : function(oTarget, sEventType, fnHandler)
  {
	  if (oTarget.removeEventListener) {
	      oTarget.removeEventListener(sEventType, fnHandler, false);
	  } else if (oTarget.detachEvent) {
	      oTarget.detachEvent("on" + sEventType, fnHandler);
	  } else { 
	      oTarget["on" + sEventType] = null;
	  }
	}
};

Utils.Cookie = 
{
    Set : function(name,value,days)
	{
		if(days)
		{
	  	    var exp  = new Date(); 
	  	    exp.setTime(exp.getTime() + days*24*60*60*1000);
	  	    document.cookie = name + "="+ escape(value) +";expires="+ exp.toGMTString();
		}else{
			document.cookie = name + "="+ escape(value);
		}
	},
	
	Get : function(name)
	{
        var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)"));
        if(arr != null && arr.length>2) return unescape(arr[2]); return null;
	},
	
	Del : function(name)
	{
        var exp = new Date();
        exp.setTime(exp.getTime() - 1);
        var cval=getCookie(name);
        if(cval!=null) document.cookie=name +"="+cval+";expires="+exp.toGMTString();
	}
};

Utils.QueryString = 
{
    Url : location.href,
    
    Get : function(key,dv) 
    {
        var reg = new RegExp("(^|\\?|&)"+ key +"=([^&]*)(\\s|&|$)", "i");
        if (reg.test(Utils.QueryString.Url)) 
            return unescape(RegExp.$2.replace(/\+/g, " "));
        return dv != null ? dv : '';
    },
    
    GetParams : function()
    {
        var qs;
        var urls = Utils.QueryString.Url.split('?');
        if(urls.length > 1)
            qs = urls[1];
        
        if (!qs)
		    qs=location.search.substring(1,location.search.length);

	    if (qs.length == 0) 
		    return null;

	    qs = qs.replace(/\+/g, ' ');
	    var args = qs.split('&'); 
    	var params = [];
	    for (var i=0;i<args.length;i++) {
		    var pair = args[i].split('=');
		    var name = unescape(pair[0]);
    		
		    var value = (pair.length==2)
			    ? unescape(pair[1])
			    : name;
    		
		    params[name] = value;
	    }
	    
	    return params;
    },
    
    BuildParams : function(params)
    {
        var ps;
        for(var p in params)
        {
            if(ps)
                ps = ps + "&" + p.id + "=" + p;
            else
                ps = p.id + "=" + p;
        }
        return ps;
    }
};

Utils.Client =
{
	Agent : window.navigator.userAgent.toLowerCase()
};

	
Utils.Client.Browser =
{
	IsOpera : (Utils.Client.Agent.indexOf('opera') > -1),
	IsIE : (Utils.Client.Agent.indexOf('msie') > -1),
	IsFireFox : (Utils.Client.Agent.indexOf('firefox') > -1),
	IsNetscape : (navigator.appName.toLowerCase().indexOf("netscape") != -1)
};
