/*

(C)2008 B-Lex IT

*/

var toddUserAgent = navigator.userAgent.toLowerCase();
var toddUserAgentIsGecko = (toddUserAgent.indexOf('gecko') != -1); // Mozilla, Firefox or compatible, using Gecko engine
//var toddUserAgentIsFirefox = toddUserAgentIsGecko && (toddUserAgent.indexOf('firefox') != -1);
var toddUserAgentIsOpera = (toddUserAgent.indexOf('opera') != -1);
var toddUserAgentIsIE = (typeof document.attachEvent != 'undefined') && (!toddUserAgentIsOpera);
var toddUserAgentIsIE7 = toddUserAgentIsIE && !!window.XMLHttpRequest;
//var toddUserAgentIsMac = (toddUserAgent.indexOf('macintosh') != -1);
//var toddUserAgentIsWebKit = (toddUserAgent.indexOf('applewebkit') != -1); // Safari or compatible, using WebKit engine
//var toddUserAgentIsCamino = (toddUserAgent.indexOf('camino') != -1);
//var toddUserAgentIsKonqueror = (toddUserAgent.indexOf('konqueror') != -1);

if (toddUserAgentIsOpera && window.opera != undefined && window.opera.version != undefined)
  var toddUserAgentOperaVersion = parseFloat(opera.version());




var toddHoverOnlyWorksOnAnchor = toddUserAgentIsIE && !toddUserAgentIsIE7;

if (typeof window.console == 'undefined') {
  window.console = {};
  console.log = function() { };
  console.warn = function() { };
  console.error = function() { };
  console.group = function() { };
  console.groupEnd = function() { };
}


// tell IE not to keep reloading background images over and over and over
if(toddUserAgentIsIE)
{
  //ignore any errors
  try { document.execCommand("BackgroundImageCache", false, true); }
  catch(e) { }
}

function timeToString(got_time) {
  var tInSec  = got_time/1000;
  var hours   = Math.floor(tInSec/ 3600);
  var minutes = Math.floor((tInSec/60) % 60);
  var seconds = Math.floor(tInSec % 60);
  if ( hours   < 10 ) hours   = "0"+hours;
  if ( minutes < 10 ) minutes = "0"+minutes;
  if ( seconds < 10 ) seconds = "0"+seconds;
  return hours+":"+minutes+":"+seconds;
}

/*
http://webreflection.blogspot.com/2006/11/my-domcontentloaded-final-solution.html

- FireFox 1+
- Opera 8+ (not tested in 7)
- Safari 2+ (not tested in 1)
- KDE 3.4 or greater
- Internet Explorer 5+ (not tested in IE 5.2 for Mac)
*/
function onContent(f){//(C)webreflection.blogspot.com
  var a,b=navigator.userAgent,d=document,w=window,
  c="__onContent__",e="addEventListener",o="opera",r="readyState",
  s="<scr".concat("ipt defer src='//:' on",r,"change='if(this.",r,"==\"complete\"){this.parentNode.removeChild(this);",c,"()}'></scr","ipt>");
  w[c]=(function(o){return function(){w[c]=function(){};for(a=arguments.callee;!a.done;a.done=1)f(o?o():o)}})(w[c]);
  if(d[e])d[e]("DOMContentLoaded",w[c],false);
  if(/WebKit|Khtml/i.test(b)||(w[o]&&parseInt(w[o].version())<9))
  (function(){/loaded|complete/.test(d[r])?w[c]():setTimeout(arguments.callee,1)})();
  else if(/MSIE/i.test(b))d.write(s);
}

// see http://www.spellcoder.nl/showpage.php?page=CSS-Transparancy
function setOpacity(elem, opacity)
{
  if(toddUserAgentIsIE)
  {
//    if (opacity < 1)
//      opacity = 1; // IE7 bug, text smoothing cuts out if 0

    if (opacity==100)
      elem.style.filter = 'none'; // don't make IE waste CPU time by filtering when it has no effect
    else
      elem.style.filter = 'alpha(opacity='+opacity+')';
  }
  else
    elem.style.opacity = opacity/100;
}

function capableofRGBA()
{
  /*
  Browsers capable of RGBA:
    - Firefox 3
    - Google Chrome
    - Safari 3 (not tested in SF2)
    - Opera core 2.2 engine (Opera 10?)

  Browsers *not* capable of RGBA:
    - Firefox 1, 1.5, 2
    - Internet Explorer 6/7
    - Opera 9.2x / 9.5x / 9.6x
  */

  var elem = document.createElement('div');

  if (toddUserAgentIsIE)
  {
    // IE doesn't allow setting seperate properties before the element is in the DOM
    // we can't use this for other browsers since Opera won't directly clean cssText of unparsable stuff
    elem.style.cssText = 'color: rgba(255,255,255,0.5)';
  }
  else
  {
    // test works for Firefox, Chrome and IE (Safari not tested), fails with Opera
    elem.style.color = 'rgba(255,255,255,0.5)';
  }

  return (elem.style.cssText != '')
}

function toddInArray(needle, haystack)
{
  var acount = haystack.length;

  while(acount--)
    if (haystack[acount] == needle)
      return true;

  return false;
}

function getPointerX(e) {
  return (e.pageX)?e.pageX:e.clientX;
}
function getPointerY(e) {
  return (e.pageY)?e.pageY:e.clientY;
}

function GetViewportPositionOfElement(obj)
{
        var curleft = 0;
        var curtop = 0;
        if (obj.offsetParent) {
                curleft = obj.offsetLeft
                curtop = obj.offsetTop
                while (obj = obj.offsetParent) {
                        curleft += obj.offsetLeft
                        curtop += obj.offsetTop
                }
        }
        return { x: curleft
               , y: curtop};
}

// see http://adomas.org/javascript-mouse-wheel/
function toddExplainScrollWheel(e)
{
  var scrollbar;
  var vertical = true;
  var d = 0;
  if (e.detail)
  {
    d = e.detail;// / 3;
  }
  else if (e.wheelDelta)
  {
    d = -e.wheelDelta / 40;// / 120;
    if (e.wheelDeltaX) // Horizontal scrolling (e.g. Mighty Mouse in Safari)
      vertical = false;
  }

  // Opera up to 9.10 had a bug which means the delta was inverted
  // The first release without this bug is 9.20
  if (toddUserAgentIsOpera && toddUserAgentOperaVersion < 9.20)
    d = -d;

  return {vertical: vertical, delta: d};
}

function hasClass(ele,cls) {
        return ele.className.match(new RegExp('(\\s|^)'+cls+'(\\s|$)'));
}

function addClass(ele,cls) {
        if (!this.hasClass(ele,cls)) ele.className += " "+cls;
}

function removeClass(ele,cls) {
//      if (hasClass(ele,cls)) {
                var reg = new RegExp('(\\s|^)'+cls+'(\\s|$)');
                ele.className=ele.className.replace(reg,' ');
//      }
}

function setInnerXHTML(myXHTML, myObject)
{
  myObject.innerHTML = myXHTML;
}


function toddAddEvent(obj, type, fn)
{
  if (obj.addEventListener)
  {
    obj.addEventListener(type, fn, false);
  }
  else
  {
    obj['e' + type + fn] = fn;
    obj[type + fn] = function()
    {
      obj['e'+type+fn](window.event);
    }
    obj.attachEvent('on'+type, obj[type+fn]);
  }
}

function toddRemoveEvent(obj, type, fn)
{
  if (obj.removeEventListener)
  {
    obj.removeEventListener(type, fn, false);
  }
  else
  {
    obj.detachEvent('on'+type, obj[type+fn]);
    obj[type+fn]=null;
  }
}

function showData(data)
{
    txt = '';
    for (prop in data)
      txt += prop+' = '+data[prop]+"\n";
    alert(txt);
}
