// (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;
        } 
    }
}
