/* JSLib 
   based on different JS libraries
*/

/* Browser detect */

/*
var browser = new Object();

    !!! do it later !!!
    for counter, for example
    
function browserIs(string) {
    if (string) {
	return navigator.userAgent.toLowerCase().indexOf(string.toLowerCase())+1;
    } else {
	return navigator.userAgent.toLowerCase();
    }
}

function browserNot(string) {
    return ! browserIs(string);
}

*/


/* for inner requirments */

function _Def() {
  for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])=='undefined') return false;}
  return true;
}
function _Str(s) {
  for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])!='string') return false;}
  return true;
}
function _Num(n) {
  for(var i=0; i<arguments.length; ++i){if(typeof(arguments[i])!='number') return false;}
  return true;
}

/* D O M */

function _GetElementById(id){
    if(typeof(id)!='string') return id;
    if(document.getElementById){
	return document.getElementById(id);
    }else if(document.all){
	return document.all[id];
    }else if(document.layers){
	return document.layers[id]; //maybe I need ta del it?
    }else{
        return null;
    }
}

/* L A Y E R S */

function _Show(e) {
  if(!(e=_GetElementById(e))) return;
  if(e.style && _Def(e.style.display)) e.style.display='';//'hidden';
  if(e.style && _Def(e.style.visibility)) e.style.visibility='visible';
}
function _Hide(e) {
  if(!(e=_GetElementById(e))) return;
  if(e.style && _Def(e.style.display)) e.style.display='none';//'hidden';
  if(e.style && _Def(e.style.visibility)) e.style.visibility='hidden';//'hidden';
}
function _Hide2(e) {
  if(!(e=_GetElementById(e))) return;
//  if(e.style && _Def(e.style.display)) e.style.display='hidden';//'hidden';
  if(e.style && _Def(e.style.visibility)) e.style.visibility='hidden';//'hidden';
}

function _InnerHTML(e,s){
    if(!(e=_GetElementById(e))) return;
    if(_Def(e.innerHTML)){
	if(_Str(s)){e.innerHTML = s;}else{s = e.innerHTML;}
    }
    return s;
}

function _SetClass(e,s){
    if(!(e=_GetElementById(e))) return;
    e.className=s;
}

/* E V E N T S  (simple) */

function _AddEventListener(e,eventType,f){
    if(!(e=_GetElementById(e))) return;
    if(e.addEventListener){
	e.addEventListener(eventType,f,true);
    }else if(e.attachEvent){
	e.attachEvent('on'+eventType,f);
    }else{
	var eh='e.on'+eventType+'=f';
	eval(eh);
    }
}
function _RemoveEventListener(e,eventType,f){
    if(!(e=_GetElementById(e))) return;
    if(e.removeEventListener){
	e.removeEventListener(eventType,f,true);
    }else if(e.detachEvent){
	e.detachEvent('on'+eventType,f);
    }else{
	var eh='e.on'+eventType+'=null';
	eval(eh);
    }
}

/* W I N D O W */
function _ClientWidth(win) {
  var winWidth;
  if (win.innerWidth) {
    winWidth = win.innerWidth;
  }
  else if (win.document.documentElement && win.document.documentElement.clientWidth) {
    winWidth = win.document.documentElement.clientWidth;
  }
  else if (document.body) {
    winWidth = win.document.body.clientWidth;
  }
  return winWidth;
}

function _ClientHeight(win) {
  var winHeight;
  if (win.innerHeight) {
    winHeight = win.innerHeight;
  }
  else if (win.document.documentElement && win.document.documentElement.clientHeight) {
    winHeight = win.document.documentElement.clientHeight;
  }
  else if (win.document.body) {
    winHeight = win.document.body.clientHeight;
  }
  return winHeight;
}

function _ScrollTop(win) {
   var scrollTop = 0;
   if (win.pageYOffset) {
	   scrollTop = win.pageYOffset;
   }
   else if (win.document.documentElement && win.document.documentElement.scrollTop) {
	   scrollTop = win.document.body.scrollTop;
   }
   else if (win.document.body) {
      scrollTop = win.document.body.scrollTop;
   }
   return scrollTop;
}

function _ScrollLeft(win) {
   var scrollLeft = 0;
   if (win.pageXOffset) {
	   scrollLeft = win.pageXOffset;
   }
   else if (win.document.documentElement && win.document.documentElement.scrollLeft) {
	   scrollLeft = win.document.body.scrollLeft;
   }
   else if (win.document.body) {
      scrollLeft = win.document.body.scrollLeft;
   }
   return scrollLeft;
}

/* E L E M E N T S */

function _OffsetLeft(e) {
  if (!(e=_GetElementById(e))) return 0;
  var x = 0;
  while (e) {
    if (_Def(e.offsetLeft)) x += e.offsetLeft;
    e = _Def(e.offsetParent) ? e.offsetParent : null;
  }
  return x;
}
function _OffsetTop(e) {
  if (!(e=_GetElementById(e))) return 0;
  var y = 0;
  while (e) {
    if (_Def(e.offsetTop)) y += e.offsetTop;
    e = _Def(e.offsetParent) ? e.offsetParent : null;
  }
  return y;
}

function _MoveTo(e,iX,iY) {
  _Left(e,iX);
  _Top(e,iY);
}
function _Left(e,iX) {
  if(!(e=_GetElementById(e))) return 0;
  var css=_Def(e.style);
  if (css && _Str(e.style.left)) {
    if(_Num(iX)) e.style.left=iX+'px';
    else {
      iX=parseInt(e.style.left);
      if(isNaN(iX)) iX=0;
    }
  }
  else if(css && _Def(e.style.pixelLeft)) {
    if(_Num(iX)) e.style.pixelLeft=iX;
    else iX=e.style.pixelLeft;
  }
  return iX;
}
function _Top(e,iY) {
  if(!(e=_GetElementById(e))) return 0;
  var css=_Def(e.style);
  if(css && _Str(e.style.top)) {
    if(_Num(iY)) e.style.top=iY+'px';
    else {
      iY=parseInt(e.style.top);
      if(isNaN(iY)) iY=0;
    }
  }
  else if(css && _Def(e.style.pixelTop)) {
    if(_Num(iY)) e.style.pixelTop=iY;
    else iY=e.style.pixelTop;
  }
  return iY;
}



function _ResizeTo(e,uW,uH) {
  _Width(e,uW);
  _Height(e,uH);
}
function _Width(e,uW) {
  if(!(e=_GetElementById(e))) return 0;
  if (_Num(uW)) {
    if (uW<0) uW = 0;
    else uW=Math.round(uW);
  }
  else uW=-1;
  var css=_Def(e.style);
  if(css && _Def(e.offsetWidth) && _Str(e.style.width)) {
    if(uW>=0) _SetCW(e, uW);
    uW=e.offsetWidth;
  }
  else if(css && _Def(e.style.pixelWidth)) {
    if(uW>=0) e.style.pixelWidth=uW;
    uW=e.style.pixelWidth;
  }
  return uW;
}
function _Height(e,uH) {
  if(!(e=_GetElementById(e))) return 0;
  if (_Num(uH)) {
    if (uH<0) uH = 0;
    else uH=Math.round(uH);
  }
  else uH=-1;
  var css=_Def(e.style);
  if(css && _Def(e.offsetHeight) && _Str(e.style.height)) {
    if(uH>=0) _SetCH(e, uH);
    uH=e.offsetHeight;
  }
  else if(css && _Def(e.style.pixelHeight)) {
    if(uH>=0) e.style.pixelHeight=uH;
    uH=e.style.pixelHeight;
  }
  return uH;
}
function _GetCS(e,sP){return parseInt(document.defaultView.getComputedStyle(e,'').getPropertyValue(sP));}
function _SetCW(e,uW){
  var pl=0,pr=0,bl=0,br=0;
  if(_Def(document.defaultView) && _Def(document.defaultView.getComputedStyle)){
    pl=_GetCS(e,'padding-left');
    pr=_GetCS(e,'padding-right');
    bl=_GetCS(e,'border-left-width');
    br=_GetCS(e,'border-right-width');
  }
  else if(_Def(e.currentStyle,document.compatMode)){
    if(document.compatMode=='CSS1Compat'){
      pl=parseInt(e.currentStyle.paddingLeft);
      pr=parseInt(e.currentStyle.paddingRight);
      bl=parseInt(e.currentStyle.borderLeftWidth);
      br=parseInt(e.currentStyle.borderRightWidth);
    }
  }
  else if(_Def(e.offsetWidth,e.style.width)){ // ?
    e.style.width=uW+'px';
    pl=e.offsetWidth-uW;
  }
  if(isNaN(pl)) pl=0; if(isNaN(pr)) pr=0; if(isNaN(bl)) bl=0; if(isNaN(br)) br=0;
  var cssW=uW-(pl+pr+bl+br);
  if(isNaN(cssW)||cssW<0) return;
  else e.style.width=cssW+'px';
}
function _SetCH(e,uH){
  var pt=0,pb=0,bt=0,bb=0;
  if(_Def(document.defaultView) && _Def(document.defaultView.getComputedStyle)){
    pt=_GetCS(e,'padding-top');
    pb=_GetCS(e,'padding-bottom');
    bt=_GetCS(e,'border-top-width');
    bb=_GetCS(e,'border-bottom-width');
  }
  else if(_Def(e.currentStyle,document.compatMode)){
    if(document.compatMode=='CSS1Compat'){
      pt=parseInt(e.currentStyle.paddingTop);
      pb=parseInt(e.currentStyle.paddingBottom);
      bt=parseInt(e.currentStyle.borderTopWidth);
      bb=parseInt(e.currentStyle.borderBottomWidth);
    }
  }
  else if(_Def(e.offsetHeight,e.style.height)){ // ?
    e.style.height=uH+'px';
    pt=e.offsetHeight-uH;
  }
  if(isNaN(pt)) pt=0; if(isNaN(pb)) pb=0; if(isNaN(bt)) bt=0; if(isNaN(bb)) bb=0;
  var cssH=uH-(pt+pb+bt+bb);
  if(isNaN(cssH)||cssH<0) return;
  else e.style.height=cssH+'px';
}

/* debug functionality */
/*
window.onerror = function(msg,url,line){
    alert('Message: ' + msg + '\nin file: ' + url + '\nat line: ' + line + '\n\nUser-Agent: ' + navigator.userAgent);
    return true;
}
*/
if (!Array.prototype.push) {
	Array.prototype.push = function array_push() {
		for(var i=0;i<arguments.length;i++)
			this[this.length]=arguments[i];
		return this.length;
	}
};
if (!Array.prototype.pop) {
	Array.prototype.pop = function array_pop() {
		lastElement = this[this.length-1];
		this.length = Math.max(this.length-1,0);
		return lastElement;
	}
};

