/*--------------------------------------------------------------------------------
%Browser capabalities%

Browser    
  +Agent

  +isGecko        %browser engine name%
  +isAppleWebKit

  +isKonqueror    %browser name%
  +isSafari
  +isOmniweb
  +isOpera
  +isIcab
  +isAol
  +isIE
  +isMozilla
  +isFirebird
  +isNS

  +isIECompatible   %spoofing and compatible browsers%
  +isNSCompatible

  +geckoVersion     %rendering engine versions%
  +equivalentMozilla
  +appleWebKitVersion

  +dom        %dom support%

  +cssmode    %css compatibility mode%

  +isWin      %platform%
  +isWin32
  +isMac
  +isUnix
  +isLinux


- - - - - - - - - - - - - - - - - - - - - - - - - - - 
%Debug object%

Debug
  +Show()
  +Print(text)
  +Hide()


- - - - - - - - - - - - - - - - - - - - - - - - - - - 
%Array extensions%

Array.prototype.indexOf(str)
Array.prototype.has(str)
Array.prototype.indexOfId(iElementId)
Array.prototype.tail(value)
Array.prototype.head()

- - - - - - - - - - - - - - - - - - - - - - - - - - - 
%HTML Objects management%

getWindowWidth ()
getWindowHeight()
getWinXOffset()
getWinYOffset()
getElementById(id)
getElementName(eElement)
getElementHtml(eElement)
getElementLeft(eElement)
getElementTop(eElement)
findElementLeft(eElement)
findElementTop(eElement)
moveElementTo(eElement,left,top)
moveElementBy(eElement,left,top)
getElementWidth (eElement)
getElementHeight(eElement)
resizeElementTo(eElement,width,height)
resizeElementBy(eElement,width,height)
setElementVisibility(eElement,visible)
setElementStyle(eElement,style)
setElementZIndex(eElement,order)
setElementDisplay(eElement,value)

- - - - - - - - - - - - - - - - - - - - - - - - - - - 
%String management%

extractFilename(fullPath)
translate(text, Data, prefix)

--------------------------------------------------------------------------------*/
Browser = new Object;
Browser.Agent = UA = navigator.userAgent.toLowerCase(); 

// browser engine name
Browser.bGecko = (UA.indexOf('gecko') != -1 && UA.indexOf('safari') == -1);
Browser.bAppleWebKit = (UA.indexOf('applewebkit') != -1);

// browser name
Browser.bKonqueror = (UA.indexOf('konqueror') != -1); 
Browser.bSafari = (UA.indexOf('safari') != - 1);
Browser.bOmniweb = (UA.indexOf('omniweb') != - 1);
Browser.bOpera = (UA.indexOf('opera') != -1); 
Browser.bIcab = (UA.indexOf('icab') != -1); 
Browser.bAol = (UA.indexOf('aol') != -1); 
Browser.bIE = (UA.indexOf('msie') != -1 && !Browser.bOpera && (UA.indexOf('webtv') == -1) ); 
Browser.bMozilla = (Browser.bGecko && UA.indexOf('gecko/') + 14 == UA.length);
Browser.bFirebird = (UA.indexOf('firebird/') != -1);
Browser.bNS = ( (Browser.bGecko) ? (UA.indexOf('netscape') != -1) : ( (UA.indexOf('mozilla') != -1) && !Browser.bOpera && !Browser.bSafari && (UA.indexOf('spoofer') == -1) && (UA.indexOf('compatible') == -1) && (UA.indexOf('webtv') == -1) && (UA.indexOf('hotjava') == -1) ) );

// spoofing and compatible browsers
Browser.bIECompatible = ( (UA.indexOf('msie') != -1) && !Browser.bIE);
Browser.bNSCompatible = ( (UA.indexOf('mozilla') != -1) && !Browser.bNS && !Browser.bMozilla);

// rendering engine versions
Browser.geckoVersion = ( (Browser.bGecko) ? UA.substring( (UA.lastIndexOf('gecko/') + 6), (UA.lastIndexOf('gecko/') + 14) ) : -1 );
Browser.equivalentMozilla = ( (Browser.bGecko) ? parseFloat( UA.substring( UA.indexOf('rv:') + 3 ) ) : -1 );
Browser.appleWebKitVersion = ( (Browser.bAppleWebKit) ? parseFloat( UA.substring( UA.indexOf('applewebkit/') + 12) ) : -1 );

// dom support
Browser.iDom = document.all?(document.getElementById?2:1):(document.getElementById?4:(document.layers?3:0));

// css compatibility mode
Browser.cssmode = document.compatMode ? "strict" : 'quirks';

// platform
Browser.bWin = (UA.indexOf('win') != -1);
Browser.bWin32 = (Browser.bWin && ( UA.indexOf('95') != -1 || UA.indexOf('98') != -1 || UA.indexOf('nt') != -1 || UA.indexOf('win32') != -1 || UA.indexOf('32bit') != -1 || UA.indexOf('xp') != -1) );
Browser.bMac = (UA.indexOf('mac') != -1);
Browser.bUnix = (UA.indexOf('unix') != -1 || UA.indexOf('sunos') != -1 || UA.indexOf('bsd') != -1 || UA.indexOf('x11') != -1)
Browser.bLinux = (UA.indexOf('linux') != -1);

//--------------------------------------------------------------------------------

Array.prototype.indexOf = function(str) {
  for (var i = 0; i < this.length; i++ )
    if (this[i] == str) return i;
  return -1;
};

Array.prototype.has = function(str) {
  return (this.indexOf(str) >= 0);
}

Array.prototype.indexOfId = function(iId) {
  for (var i = 0; i < this.length; i++ ) 
    if (String(iId) == String(this[i].iId)) return i;
  return -1;
}

Array.prototype.tail = function(value) {
  this[this.length] = value;
}

Array.prototype.head = function() {
  if (this.length <= 0) return null;
  value = this[0];
  for (var i = 0; i < this.length - 1; i++ )
    this[i] = this[i + 1]
  this.length--;
  return value;
}

//--------------------------------------------------------------------------------

String.prototype.xmlDecode = function() {
	return this.replace(/&amp;/g, "&").replace(/&lt;/g, "<").replace(/&gt;/g, ">")
}

String.prototype.xmlEncode = function() {
	return this.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;")
}

String.prototype.trim = function() {
   return this.replace(/^\s*|\s*$/g, "");
}

//--------------------------------------------------------------------------------

function getWindowWidth () {
  if(Browser.iDom == 4 || Browser.iDom == 3) return window.innerWidth;
  if(Browser.iDom == 2 || Browser.iDom == 1) return document.body.clientWidth;
  return 0;
}

function getWindowHeight() {
  if(Browser.iDom == 4 || Browser.iDom == 3) return window.innerHeight;
  if(Browser.iDom == 2 || Browser.iDom == 1) return document.body.clientHeight;
  return 0;
}

function getWinXOffset() {
  if(Browser.iDom == 4) return window.scrollX;
  if(Browser.iDom == 2 || Browser.iDom == 1) return document.body.scrollLeft;
  if(Browser.iDom == 3) return window.pageXOffset;
  return 0;
}

function getWinYOffset() {
  if(Browser.iDom == 4) return window.scrollY;
  if(Browser.iDom == 2 || Browser.iDom == 1) return document.body.scrollTop;
  if(Browser.iDom == 3) return window.pageYOffset;
  return 0;
}

function getElementById(id) {
  if(Browser.iDom == 4 || Browser.iDom == 2) return document.getElementById(id);
  if(Browser.iDom == 1) return document.all(id);
  if(Browser.iDom == 3) {
    var s = '';
    for(var i = 1; i<arguments.length; i++) s+= 'document.layers.'+arguments[i]+'.';
    return eval(s+'document.layers.'+id);
  }
  return null;
}

function getElementName(eElement) {
  if(Browser.iDom == 4 || Browser.iDom == 2 || Browser.iDom == 1) return eElement.id;
  if(Browser.iDom == 3) return eElement.name;
  return '';
}

function getElementHtml(eElement) {
  if(Browser.iDom == 4 || Browser.iDom == 2 || Browser.iDom == 1) return eElement.innerHTML;
  if(Browser.iDom == 3) return eElement.innerHTML;
  return '';
}

function getElementLeft(eElement) {
  if(Browser.iDom == 4 || Browser.iDom == 2) return eElement.offsetLeft;
  if(Browser.iDom == 1) return eElement.style.pixelLeft;
  if(Browser.iDom == 3) return eElement.left;
  return 0;
}

function getElementTop(eElement) {
  if(Browser.iDom == 4 || Browser.iDom == 2) return eElement.offsetTop;
  if(Browser.iDom == 1) return eElement.style.pixelTop;
  if(Browser.iDom == 3) return eElement.top;
  return 0;
}


function findElementLeft(eElement) {
	if (eElement.offsetParent) {
  	var left = 0;
		while (eElement.offsetParent) {
			left += getElementLeft(eElement);
			eElement = eElement.offsetParent;
		}
    return left;
	}
	else if (eElement.x) return eElement.x;
}

function findElementTop(eElement) {
	if (eElement.offsetParent) {
  	var top = 0;
		while (eElement.offsetParent) {
			top += getElementTop(eElement);
			eElement = eElement.offsetParent;
		}
    return top;
	}
	else if (eElement.y) return eElement.y;
}

function moveElementTo(eElement,left,top) {
  if(Browser.iDom == 4) {
    eElement.style.left = left+'px';
    eElement.style.top = top +'px';
    return;
  }
  if(Browser.iDom == 2 || Browser.iDom == 1) {
    eElement.style.pixelLeft = left;
    eElement.style.pixelTop = top;
    return;
  }
  if(Browser.iDom == 3) {
    eElement.moveTo(left,top);
    return;
  }
}

function moveElementBy(eElement,left,top) {
  if(Browser.iDom == 4) {
    eElement.style.left = eElement.offsetLeft+left;
    eElement.style.top = eElement.offsetTop +top;
    return;
  }
  if(Browser.iDom == 2) {
    eElement.style.pixelLeft = eElement.offsetLeft+left;
    eElement.style.pixelTop = eElement.offsetTop +top;
    return;
  }
  if(Browser.iDom == 1) {
    eElement.style.pixelLeft += left;
    eElement.style.pixelTop += top;
    return;
  }
  if(Browser.iDom == 3) {
    eElement.moveBy(left,top);
    return;
  }
}

function getElementWidth (eElement) {
  if(Browser.iDom == 4 || Browser.iDom == 2) return eElement.offsetWidth;
  if(Browser.iDom == 1) return eElement.style.pixelWidth;
  if(Browser.iDom == 3) return eElement.clip.width;
  return 0;
}

function getElementHeight(eElement) {
  if(Browser.iDom == 4 || Browser.iDom == 2) return eElement.offsetHeight;
  if(Browser.iDom == 1) return eElement.style.pixelHeight;
  if(Browser.iDom == 3) return eElement.clip.height;
  return 0;
}

function resizeElementTo(eElement,width,height) {
  if(Browser.iDom == 4) {
    eElement.style.width = width +'px';
    eElement.style.height = height+'px';
    return;
  }
  if(Browser.iDom == 2 || Browser.iDom == 1) {
    eElement.style.pixelWidth = width;
    eElement.style.pixelHeight = height;
    return;
  }
  if(Browser.iDom == 3) {
    eElement.resizeTo(width,height);
    return;
  }
}

function resizeElementBy(eElement,width,height) {
  if(Browser.iDom == 4) {
    eElement.style.width = (eElement.offsetWidth +width )+'px';
    eElement.style.height = (eElement.offsetHeight+height)+'px';
    return;
  }
  if(Browser.iDom == 2) {
    eElement.style.pixelWidth = eElement.offsetWidth +width;
    eElement.style.pixelHeight = eElement.offsetHeight+height;
    return;
  }
  if(Browser.iDom == 1) {
    eElement.style.pixelWidth += width;
    eElement.style.pixelHeight+= height;
    return;
  }
  if(Browser.iDom == 3) {
    eElement.resizeBy(width,height);
    return;
  }
}

function setElementVisibility(eElement,visible) {
  if(Browser.iDom == 4 || Browser.iDom == 2 || Browser.iDom == 1) {
    eElement.style.visibility = (visible)?'inherit':'hidden';
    return;
  }
  if(Browser.iDom == 3) {
    eElement.visibility = (visible)?'inherit':'hide';
    return;
  }
}

function setElementStyle(eElement,style) {
}

function setElementZIndex(eElement,order) {
  if(Browser.iDom == 4 || Browser.iDom == 2 || Browser.iDom == 1) {
    eElement.style.zIndex = order;
    return;
  }
  if(Browser.iDom == 3) {
    eElement.zIndex = order;
    return;
  }
}

function setElementDisplay(eElement, value) {
  eElement.style.display = value;
}

//--------------------------------------------------------------------------------

function extractFilename(sFullPath) {
  var iLast = sFullPath.lastIndexOf("/");
  var sFileName = sFullPath.substring(iLast + 1 , sFullPath.length);
  return sFileName
} 

function translate(sText, Data, sPrefix) {
  if (!sPrefix) sPrefix = "";

  for (var key in Data) {
    sName = sPrefix + key;
    if (typeof Data[key] == "object") 
      sText = translate(sText, Data[key], sName + ".")
    else  {
      Expression = new RegExp("__" + sName + "__", "g");
      sText = sText.replace(Expression, Data[key]);
    }
  }
  return sText;
}

