var browser={
  _ua:navigator.userAgent.toLowerCase(),

  _get_ua_name:function()
  {
    if(window.opera)
    {
      return'opera';
    }

    var browserUAs=[];
    browserUAs['msie']='ie';
    browserUAs['firefox']='firefox';
    browserUAs['safari']='safari';
    browserUAs['netscape']='netscape';
    browserUAs['aol']='aol';
    browserUAs['nintendo wii']='wii';
    browserUAs['konqueror']='konqueror';
    browserUAs['camino']='camino';
    browserUAs['lynx']='lynx';
    browserUAs['links']='links';
    
    for(b_agent in browserUAs)
    {
      if(this._ua.indexOf(b_agent)!=-1)
      {
        return browserUAs[b_agent];
      }
    }
    
    return'other';
  },

  _get_os:function()
  {
    var this_os;
    
    switch(true)
    {
      case((this._ua.indexOf("windows")!=-1)||(this._ua.indexOf("win")!=-1)):
        this_os='windows';
      break;

      case(this._ua.indexOf("mac")!=-1):
        this_os='mac';
      break;

      case(this._ua.indexOf("linux")!=-1):
        this_os='linux';
      break;

      case(this._ua.indexOf("nintendo wii")!=-1):
        this_os='wii';
      break;

      case((this._ua.indexOf("freebsd")!=-1)||(this._ua.indexOf("netbsd")!=-1)||(this._ua.indexOf("sunos")!=-1)):
        this_os='bsd';
      break;

      default:
        this_os='other';
    };
    
    return this_os;
  },

  _detect_mobile:function()
  {
    if(this._get_os!='other')
    {
      return false;
    }
    else
    {
      var mobile_clues=new Array('docomo','up.browser','nokia','symbian','phillips','phone','reqwirelessweb','imode','mobile','smartphone','sagem','samsung','netfront','cellphone','windows ce','portalmmm','sec-sghe','lge','vitelcom','nitro');
      var mobile_num=mobile_clues.length;
      
      for(m=0;m<mobile_num;m++)
      {
        if(this._ua.indexOf(mobile_clues[m])!=-1)
        {
          return true;
        };
      };
      
      return false;
    }
  },

  get_page_size:function()
  {
    var xScroll=document.documentElement.scrollWidth;
    var yScroll=document.documentElement.scrollHeight;
    
    return{w:xScroll,h:yScroll};
  },

  get_page_width:function()
  {
    var psize=this.get_page_size;
    return psize.w;
  },

  get_page_height:function()
  {
    var psize=this.get_page_size;return psize.h;
  },

  _get_viewport_size:function()
  {
    var viewportWidth;
    var viewportHeight;
    
    if(self.innerHeight)
    {
      return function()
      {
        viewportWidth=self.innerWidth;
        viewportHeight=self.innerHeight;
        var viewportsize={w:viewportWidth,h:viewportHeight};return viewportsize;
      }
    }
    else if(document.documentElement&&document.documentElement.clientHeight)
    {
      return function()
      {
        viewportWidth=document.documentElement.clientWidth;
        viewportHeight=document.documentElement.clientHeight;

        var viewportsize={w:viewportWidth,h:viewportHeight};
        
        return viewportsize;
      }
    }
    else if(document.body)
    {
      return function()
      {
        viewportWidth=document.body.clientWidth;
        viewportHeight=document.body.clientHeight;

        var viewportsize={w:viewportWidth,h:viewportHeight};
        
        return viewportsize;
      }
    }

    return false;
  },

  _check_cookie_support:function()
  {
    var cookies_enabled=(navigator.cookieEnabled?true:false);

    if(typeof navigator.cookieEnabled=="undefined"&&!cookies_enabled)
    {
      document.cookie="testcookie";
      cookies_enabled=((document.cookie.indexOf("testcookie")!=-1)?true:false);
    };

    return cookies_enabled;
  },

  _get_flash_version:function()
  {
    if(typeof deconcept!='undefined')
    {
      var flaver=deconcept.SWFObjectUtil.getPlayerVersion();
      return flaver.major;
    }

    return 0;
  },

  _output:function()
  {
    this.ua_name=this._get_ua_name();
    this.version=parseInt(navigator.appVersion);

    if(this.ua_name=='ie')
    {
      if(window.attachEvent&&!window.createPopup)
      {
        this.version=5;
      }

      if(window.createPopup&&!document.compatMode)
      {
        this.version=5.5;
      }

      if((document.compatMode&&document.all)&&!window.XMLHttpRequest)
      {
        this.version=6;
      }

      if(window.XMLHttpRequest&&document.all)
      {
        this.version=7;
      }
    }

    this.is_gecko=((this._ua.indexOf('gecko')!=-1)?true:false);
    this.os=this._get_os();
    this.is_mobile=this._detect_mobile();
    this.cookies=this._check_cookie_support();
    this.flash_version=this._get_flash_version();
    this.get_viewport_size=this._get_viewport_size();
    this.viewport_size=this.get_viewport_size();
    this.viewport_width=this.viewport_size.w;
    this.viewport_height=this.viewport_size.h;
    this.screen_width=screen.width;
    this.screen_height=screen.height;
    this._ua=null;
    this._get_ua_name=null;
    this._get_os=null;
    this._detect_mobile=null;
    this._support_level=null;
    this._get_viewport_size=null;
    this._check_cookie_support=null;
    this._get_flash_version=null;
  }
};

var cursor_pos=function(e)
{
  e=e||window.event;if(e.pageX||e.pageY)

  {
    return{x:e.pageX,y:e.pageY};
  }
  else
  {
    var de=document.documentElement;
    var b=document.body;
    var ex=e.clientX+(de.scrollLeft||b.scrollLeft)-(de.clientLeft||0);
    var wy=e.clientY+(de.scrollTop||b.scrollTop)-(de.clientTop||0);
    return{x:ex,y:wy};
   }
};

var get_page_scroll=function()
{
  if(typeof(window.pageYOffset)=='number')
  {
    return window.pageYOffset;
  }
  else if(document.body&&document.body.scrollTop)
  {
    return document.body.scrollTop;
  }
  else if(document.documentElement&&document.documentElement.scrollTop)
  {
    return document.documentElement.scrollTop;
  }
  else
  {
    return 0;
  }
};

var dom = {
  get_style:function(elID, cssAtt)
  {
    var a=elID;
    var b;
    
    if(a.currentStyle)
    {
      b=a.currentStyle[cssAtt];
    }
    else
    {
      try
      {
        b=document.defaultView.getComputedStyle(a,null).getPropertyValue(cssAtt);
      }
      catch(e)
      {
      }
    }
      
    return b;
  },

  box_dimensions:function(boxID)
  {
    if(boxID)
    {
      var current_style=this.get_style;
      var boxDims={w:0,h:0};
      
      boxDims.w=current_style(boxID,'width');
      boxDims.w=boxDims.w.replace('px','');
      boxDims.h=current_style(boxID,'height');
      boxDims.h=boxDims.h.replace('px','');
      
      if(boxDims.h=='auto')
      {
        if(boxID.style.pixelHeight)
        {
          boxDims.h=boxID.style.pixelHeight;
        }
        else
        {
          boxDims.h=boxID.offsetHeight;
        }
      }
      
      return boxDims;
    }
    
    return false;
  },

  position_pop:function(popID, windowDims, buffer, position_it, event)
  {
    if((typeof(browser)=='undefined')||(typeof(cursor_pos)=='undefined'))
    {
      return false;
    }
    
    var pop=popID;
    var tipDims=this.box_dimensions(popID);
    var linkPos=cursor_pos(event);
    var scrolled=get_page_scroll();
    var pinfo={go_right:true,go_up:false,go_down:false,w:tipDims.w,h:tipDims.h,x:0,y:0,abort:false};
    
    var x_space={left:linkPos.x,right:(windowDims.w-linkPos.x)};
    var y_space={over:(linkPos.y-scrolled),under:(windowDims.h-(linkPos.y-scrolled))};
    var half_h=Math.ceil(tipDims.h/2);
    var buf=(buffer?buffer:{left:5,right:5,over:10,under:10});
    var no_room_x=((x_space.right<(tipDims.w-0+buf.right))&&(x_space.left<(tipDims.w-0+buf.left)));
    var no_room_y=false;
    var cant_go_middle=((y_space.over<half_h)||(y_space.under<half_h));
    var cant_go_up=(y_space.over<(tipDims.h-0+buf.over));
    var cant_go_down=(y_space.under<(tipDims.h-0+buf.under));
    
    if(cant_go_middle)
    {
      if(cant_go_up&&cant_go_down)
      {
        no_room_y=true;
      }
    }
    
    if(no_room_x||no_room_y)
    {
      pinfo.abort=true;
      return pinfo;
    }
    
    if(x_space.right<tipDims.w)
    {
      pinfo.go_right = false;
      pinfo.x        = ((linkPos.x-tipDims.w)-buf.left)+'px';
    }
    else
    {
      pinfo.x=((linkPos.x)-0+buf.right)+'px';
    }
    
    if(y_space.over<half_h)
    {
      pinfo.go_down = true;
      pinfo.y       = (linkPos.y-0+buf.under)+'px';
    }
    else if(y_space.under<half_h)
    {
      pinfo.go_up = true;
      pinfo.y     = ((linkPos.y-tipDims.h)-buf.over)+'px';
    }
    else
    {
      pinfo.y=(linkPos.y-half_h)+'px';
    };
    
    if(position_it)
    {
      pop.style.left = pinfo.x;
      pop.style.top  = pinfo.y;
    }
    
    return pinfo;
  }
};

browser._output();
