/** @file bau.browser.js
 *  @brief this file contains general Bauglir object for browser
 *  @version $Id: bau.browser.js,v 1.8 2009-05-06 16:03:37 bauglir Exp $
 *  @author Bronislav Klucka, Bronislav.Klucka@bauglir.com,
 *          Copyright &copy; 2009+ Bronislav Klucka
 *
 * This script is licenced under BSD licence: http://licence.bauglir.com/bsd.php
 *
 *
 */
Bauglir.Browser = {};
Bauglir.Browser.libVersion = '000.900';
Bauglir.Browser.Application = 'unknown';
Bauglir.Browser.Version = 'unknown';
Bauglir.Browser.ViewportWidth = 'unknown';
Bauglir.Browser.ViewportHeight = 'unknown';
Bauglir.Browser.ScrollBarWidth = 0;

Bauglir.Browser.Msie6 = false;
Bauglir.Browser.Msie7 = false;
Bauglir.Browser.Msie8 = false;
Bauglir.Browser.Msie = false;
Bauglir.Browser.Opera = false;
Bauglir.Browser.Firefox = false;
Bauglir.Browser.Safari = false;
Bauglir.Browser.Chrome = false;
Bauglir.Browser.Konqueror = false;


Bauglir.Browser._$_$GetScrollerWidth = function() {
    var scr = null;
    var inn = null;
    var wNoScroll = 0;
    var wScroll = 0;

    // Outer scrolling div
    scr = document.createElement('div');
    scr.style.position = 'absolute';
    scr.style.top = '-1000px';
    scr.style.left = '-1000px';
    scr.style.width = '100px';
    scr.style.height = '50px';
    // Start with no scrollbar
    scr.style.overflow = 'hidden';

    // Inner content div
    inn = document.createElement('div');
    inn.style.width = '100%';
    inn.style.height = '200px';

    // Put the inner div in the scrolling div
    scr.appendChild(inn);
    // Append the scrolling div to the doc
    document.body.appendChild(scr);

    // Width of the inner div sans scrollbar
    wNoScroll = inn.offsetWidth;
    // Add the scrollbar
    if (Bauglir.Browser.Msie) scr.style.overflow = 'scroll';
    else scr.style.overflow = 'auto';
    // Width of the inner div width scrollbar
    wScroll = inn.offsetWidth;

    // Remove the scrolling div from the doc
    document.body.removeChild(
        document.body.lastChild);

    // Pixel width of the scroller
    return (wNoScroll - wScroll);
}

Bauglir.Browser._$_$FillData = function()
{
  //Application
  if (window.opera)
    Bauglir.Browser.Application = 'Opera';
  else if ((navigator.appName.toLowerCase() == 'netscape') && (navigator.userAgent.toLowerCase().indexOf("firefox") >= 0))
    Bauglir.Browser.Application = 'Firefox';
  else if ((navigator.appName.toLowerCase() == 'netscape') && (navigator.userAgent.toLowerCase().indexOf("chrome") >= 0))
    Bauglir.Browser.Application = 'Chrome';
  else if ((navigator.appName.toLowerCase() == 'netscape') && (navigator.userAgent.toLowerCase().indexOf("safari") >= 0))
    Bauglir.Browser.Application = 'Safari';
  else if ((navigator.appName.toLowerCase() == 'microsoft internet explorer') && (navigator.userAgent.toLowerCase().indexOf("msie") >= 0))
    Bauglir.Browser.Application = 'MSIE';
  else if ((navigator.appName.toLowerCase() == 'netscape') && (navigator.userAgent.toLowerCase().indexOf("konqueror") >= 0))
    Bauglir.Browser.Application = 'Konqueror';


  //VERSION
  var arVersion = new Array();
  switch(Bauglir.Browser.Application)
  {
    case "Opera":
      Bauglir.Browser.Opera = true;
      arVersion = navigator.appVersion.split(" ");
      Bauglir.Browser.Version = (arVersion[0]);
    break;
    case "Firefox":
      Bauglir.Browser.Firefox = true;
      arVersion = navigator.userAgent.split("Firefox/");
      Bauglir.Browser.Version = (arVersion[1]);
    break;
    case "Chrome":
      Bauglir.Browser.Chrome = true;
      arVersion = navigator.userAgent.split("Chrome/");
      arVersion = arVersion[1].split(" ");
      Bauglir.Browser.Version = (arVersion[0]);
    break;
    case "Safari":
      Bauglir.Browser.Safari = true;
      arVersion = navigator.userAgent.split("Version/");
      arVersion = arVersion[1].split(" ");
      Bauglir.Browser.Version = (arVersion[0]);
    break;
    case "MSIE":
      arVersion = navigator.userAgent.split("MSIE");
      arVersion = arVersion[1].split(";");
      Bauglir.Browser.Version = (arVersion[0]);
    break;
    case "Konqueror":
      Bauglir.Browser.Konqueror = true;
      arVersion = navigator.userAgent.split("Konqueror/");
      arVersion = arVersion[1].split(";");
      Bauglir.Browser.Version = (arVersion[0]);
    break;
  }
  Bauglir.Browser.Version = Bauglir.Browser.Version.trim();
  Bauglir.Browser.Application = Bauglir.Browser.Application.trim();

  Bauglir.Browser.Msie6 = (Bauglir.Browser.Application == 'MSIE') && (Bauglir.Browser.Version == '6.0');
  Bauglir.Browser.Msie7 = (Bauglir.Browser.Application == 'MSIE') && (Bauglir.Browser.Version == '7.0');
  Bauglir.Browser.Msie8 = (Bauglir.Browser.Application == 'MSIE') && (Bauglir.Browser.Version == '8.0');
  Bauglir.Browser.Msie = (Bauglir.Browser.Application == 'MSIE');


  Bauglir.Browser._$_$onresize(null);
};

Bauglir.Browser._$_$onresize = function(e)
{
  /*
  Bauglir.Browser.ViewportWidth = window.innerWidth || (document.documentElement ? document.documentElement.clientWidth : document.body.clientWidth);
  Bauglir.Browser.ViewportHeight = window.innerHeight || (document.documentElement ? document.documentElement.clientHeight : document.body.clientHeight);
  */
  try
  {
    if (Bauglir.Browser.Msie)
    {
      Bauglir.Browser.ViewportWidth = document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth;
      Bauglir.Browser.ViewportHeight = document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight;
    }
    else
    {
      Bauglir.Browser.ViewportWidth = window.innerWidth;
      Bauglir.Browser.ViewportHeight = window.innerHeight;
    }
  } catch (e) {}
}


/** TESTING CORE **/
if (Bauglir.libVersion < Bauglir.Browser.libVersion)
  {throw ('Reguires Bauglir Core version ' + Bauglir.libVersion + '.');}

/** TESTING jQuery **/
try
{
  jQuery('body');
}
catch (e)
{
  {throw ('Reguires jQuery version 1.3.1.');}
}

/** PREPARING **/


Bauglir.Browser._$_$FillData();
if (false && Bauglir.Browser.Application == 'MSIE') $(window).resize(function (){setTimeout(Bauglir.Browser._$_$onresize, 1)}); //MSIE sometimes fills client window data after triggering event
else $(window).resize(Bauglir.Browser._$_$onresize);



$(document).ready(function () {
  if (Bauglir.Browser.Application == 'MSIE')
  {
    var anchors = document.getElementsByTagName('A');
    for(var i = 0, j = anchors.length; i < j; i++)
      anchors[i].hideFocus = true;
  }
  Bauglir.Browser._$_$onresize(null);
  Bauglir.Browser.ScrollBarWidth = Bauglir.Browser._$_$GetScrollerWidth();
});




