// (c) Copyright Innet Corporation.
// this source is subject to the ShiBo Ticket System.
// All other rights reserved.

/// <summary>
/// 提供与服务端的AJAX通信服务
/// </summary>
function Behavior() {
    this.xmlHttp = null;
    
    /// <summary>
    /// 状态 是否繁忙
    /// </summary>
    this.status = false;
    

}

Behavior.prototype = {
     
     
     
      /// <summary>
      /// 执行AJAX操作
      /// </summary>
      /// <param name="url">
      ///  AJAX服务端URL地址
      /// </param>
      /// <param name="type">
      /// 执行操作的方式 post/get
      /// </param>
      /// <param name="params">
      /// send方法参数
      /// </param>
      /// <param name="callback">
      /// 回调函数
      /// </param>
      $do : function (url,type,params,callback) {
      
                 var url= sys.config.$__server + sys.config.$__serverPath + url + "?do=" + sys.config.$__language + "," + params;
                 
                 XMLHttp.sendReq(type,url,"",callback);
      }

}

var XMLHttp = {
    _objPool: [],
    _getInstance: function ()
    {
        for (var i = 0; i < this._objPool.length; i ++)
        {
            if (this._objPool[i].readyState == 0 || this._objPool[i].readyState == 4)
            {
                return this._objPool[i];
            }
        }
        // IE5中不支持push方法
        this._objPool[this._objPool.length] = this._createObj();
        return this._objPool[this._objPool.length - 1];
    },
    _createObj: function ()
    {
        if (window.XMLHttpRequest)
        {
            var objXMLHttp = new XMLHttpRequest();
        }
        else
        {
            var MSXML = ['MSXML2.XMLHTTP.5.0', 'MSXML2.XMLHTTP.4.0', 'MSXML2.XMLHTTP.3.0', 'MSXML2.XMLHTTP', 'Microsoft.XMLHTTP'];
            for(var n = 0; n < MSXML.length; n ++)
            {
                try
                {
                    var objXMLHttp = new ActiveXObject(MSXML[n]);
                    break;
                }
                catch(e)
                {
                
                }
            }
        } 
        // mozilla某些版本没有readyState属性
        if (objXMLHttp.readyState == null)
        {
            objXMLHttp.readyState = 0;
            objXMLHttp.addEventListener("load", function ()
            {
                objXMLHttp.readyState = 4;
                if (typeof objXMLHttp.onreadystatechange == "function")
                {
                    objXMLHttp.onreadystatechange();
                }
            }, false);
        }
        return objXMLHttp;
    },
    // 发送请求(方法[post,get], 地址, 数据, 回调函数,显示等待的)
    sendReq: function (method, url, data, callback)
    {
        var objXMLHttp = this._getInstance();
        with(objXMLHttp)
        {
            try
            {
                // 加随机数防止缓存
                if (url.indexOf("?") > 0)
                {
                    url += "&randnum=" + Math.random();
                }
                else
                {
                    url += "?randnum=" + Math.random();
                }
                open(method, url, true);
                // 设定请求编码方式
                setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');
                send(data);
                onreadystatechange = function ()
                {
//                    if (objXMLHttp.readyState == 4 && (objXMLHttp.status == 200 || objXMLHttp.status == 304))
//                    {
                        callback(objXMLHttp);
//                    }
                    
                }
            }
            catch(e)
            {
                alert(e);
            }
        }
    }
}; 
//===================================================================
// (c) Copyright Innet Corporation.
// this source is subject to the 9ipiao.com
// All other rights reserved.

/// <summary>
/// 浏览器类型
/// </summary>
var BrowserType = {
   IE     : 0,
   Firefox : 1,
   Opera  : 2,
   Other  : 3
}

/// <summary>
/// 提供浏览器兼容服务
/// </summary>
function Browser(){
    /// <summary>
    /// 当前浏览器类型
    /// </summary>
    this.type = BrowserType.IE;
    /// <summary>
    /// 对象是否已经被初始化
    /// </summary>
    this.inited = false;
}
Browser.prototype = {


    /// <summary>
    /// 对象初始化方法
    /// </summary>
    init : function(){ 
        if(navigator.userAgent.indexOf("Firefox") >= 0) 
            this.type = BrowserType.Firefox;
        else if(navigator.userAgent.indexOf("MSIE") >= 0) 
            this.type = BrowserType.IE;
        else if(navigator.userAgent.indexOf("Opera") >= 0) 
            this.type = BrowserType.Opera;
        else
            this.type = BrowserType.Other;
       if(!this.inited)
            this.inited = true;
    },
    getYear : function(value){
       var s = 0;
       switch(this.type){
            case BrowserType.IE:
                if(value <= 1900)
                   s  = value + 1900;
                else
                   s = value;    
                break;
            case BrowserType.Firefox:
                s = value + 1900;
                break;
            case BrowserType.Opera:
                s =  value + 1900;
                break;
        }
        return s;
    },
    /// <summary>
    /// 获取对象innerText值
    /// </summary>
    /// <param name="element">
    /// html对象
	/// </param>
    getText : function(element){
        var s = "";
        switch(this.type){
            case BrowserType.IE:
                s = element.innerText;
                break;
            case BrowserType.Firefox:
                s = element.textContent;
                break;
            case BrowserType.Opera:
                s = element.textContent;
                break;
        }
        return s;
    },
    /// <summary>
    /// 获取event事件中的事件发生对象
    /// </summary>
    /// <param name="evt">
    /// evt对象
	/// </param>
    evtTarget : function(evt){
        var obj = null;
        switch(this.type){
            case BrowserType.IE:
                obj = window.event.srcElement;
                break;
            case BrowserType.Firefox:
                obj = evt.target;
                break;
            case BrowserType.Opera:
                obj = evt.target;
                break;
        }
        return obj;
    },
    /// <summary>
    /// 获取XmlNode.text值
    /// </summary>
    /// <param name="element">
    /// html对象
	/// </param>
    getXmlText : function(element){
        var s = "";
        switch(this.type){
            case BrowserType.IE:
                s = element.text;
                break;
            case BrowserType.Firefox:
                s = element.textContent;
                break;
            case BrowserType.Opera:
                s = element.textContent;
                break;
        }
        return s;
    },
    /// <summary>
    /// 设置对象innerText值
    /// </summary>
    setText : function(element, value){
    
        switch (this.type) {
            case BrowserType.IE:
                element.innerText = value;
                break;
            case BrowserType.Firefox:
                element.textContent = value;
                break;
            case BrowserType.Opera:
                break;
            default:
                break;
        }
    },
    /// <summary>
    /// 设置object.style.left值
    /// </summary>
    /// <param name="element">
    /// html对象
	/// </param>
	/// <param name="value">
    /// left值
	/// </param>
    setLeft : function(element, value){
        
        switch (this.type){
            case BrowserType.IE:
                 element.style.left = value;
                 break;
            case BrowserType.Firefox:
                 element.style.left = value + "px";
                 break;
            case BrowserType.Opera:
                 element.style.left = value;
                 break;
           defalut:
                 break;
        }
    },
    /// <summary>
    /// 设置object.style.lineHeight值
    /// </summary>
    /// <param name="element">
    /// html对象
	/// </param>
	/// <param name="value">
    /// lineHeight值
	/// </param>
    setLineHeight : function(element, value){
        
        switch (this.type){
            case BrowserType.IE:
                 element.style.lineHeight = value;
                 break;
            case BrowserType.Firefox:
                 element.style.lineHeight = value + "px";
                 break;
            case BrowserType.Opera:
                 element.style.lineHeight = value;
                 break;
           defalut:
                 break;
        }
    },
    /// <summary>
    /// 设置object.style.width值
    /// </summary>
    /// <param name="element">
    /// html对象
	/// </param>
	/// <param name="value">
    /// width值
	/// </param>
    setWidth : function(element, value){
        
        switch (this.type){
            case BrowserType.IE:
                 element.style.width = value;
                 break;
            case BrowserType.Firefox:
                 element.style.width = value + "px";
                 break;
            case BrowserType.Opera:
                 element.style.width = value;
                 break;
           defalut:
                 break;
        }
    },
    /// <summary>
    /// 设置object.style.height值
    /// </summary>
    /// <param name="element">
    /// html对象
	/// </param>
	/// <param name="value">
    /// height值
	/// </param>
    setHeight : function(element, value){
        
        switch (this.type){
            case BrowserType.IE:
                 element.style.height = value;
                 break;
            case BrowserType.Firefox:
                 element.style.height = value + "px";
                 break;
            case BrowserType.Opera:
                 element.style.height = value;
                 break;
           defalut:
                 break;
        }
    },
    /// <summary>
    /// 设置object.style.top值
    /// </summary>
    /// <param name="value">
    /// top值
	/// </param>
    setTop : function(element, value) {
        
        switch (this.type){
            case BrowserType.IE:
                 element.style.top = value;
                 break;
            case BrowserType.Firefox:
                 element.style.top = value + "px";
                 break;
            case BrowserType.Opera:
                 element.style.top = value;
                 break;
           defalut:
                 break;
        }
    },
    /// <summary>
    /// 当对象引发onmouseout事件时设置对象的className属性
    /// </summary>
    /// <param name="element">
    /// html对象
	/// </param>
	/// <param name="equalsElement">
    /// 比较的对象<查看是否为对象本身还是内部对象>
	/// </param>
	/// <param name="className">
    /// 样式属性
	/// </param>
    onOutCss : function(element, equalsElement, className) {
        switch (this.type){
            case BrowserType.IE:
                 if(!this.contains(event.toElement))
                     element.className = className;
                 break;
            case BrowserType.Firefox:
                 element.onmouseout = function (theEvent) {
                     if(theEvent.relatedTarget == equalsElement) {
                         element.className = className;
                     }
                 }
                 break;
            case BrowserType.Opera:
                 element.className = className;
                 break;
        }
    },
    opacityStep : function(obj, start, end, step){
    
          switch(this.type){
              case BrowserType.IE:
                   if(!obj.filters.alpha)
                      obj.style.filter = "alpha(opacity:"+ start * 100 +")"; 
                   else
                      obj.filters.alpha.opacity = start * 100;
                   var i = setInterval(function(){
                   if(parseFloat(obj.filters.alpha.opacity) < end * 100){
                      obj.filters.alpha.opacity += step * 100 + 20;
                   }
                   else{
                      clearInterval(i);
                   } 
                   },1);
                   break;
              case BrowserType.Firefox:
                    obj.style.opacity = start;
                    var i = setInterval(function(){  
                    if(parseFloat(obj.style.opacity) < end){
                      obj.style.opacity = parseFloat(obj.style.opacity) + step;
                    }
                    else{
                      clearInterval(i);
                    }
                    },1);
                   break;
              case BrowserType.Opera:
                   break;
          }
    },
    addFav :function(website,descn){
         switch (this.type){
             case BrowserType.IE:
                 window.external.addFavorite(website,descn);
                 break;
             case BrowserType.Firefox:
                 window.sidebar.addPanel(descn, website, "");
                 break;
         }
    },
    setHome : function(website){
        switch(this.type){
            case BrowserType.IE:
                document.body.style.behavior='url(#default#homepage)';
                document.body.setHomePage(website);
                break;
                
            case BrowserType.Firefox:
                 try
                 { 
                     netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); 
                 } 
                 catch (e) 
                 { 
                     alert( "该操作被浏览器拒绝，如果想启用该功能，请在地址栏内输入 about:config,然后将项 signed.applets.codebase_principal_support 值该为true" ); 
                 }
                 var prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components. interfaces.nsIPrefBranch);
                 prefs.setCharPref('browser.startup.homepage',website);
                 break;
        } 
    }
}
