
/**
 * A compact JavaScript-Helper Libary for Cross Browser Scripting
 * Used for twoday / antville
 * 
 * Written by Matthias Platzer at http://knallgrau.at
 * inspired by code found at various places in the net
 * especially by HTMLArea by Mihai Bazon http://students.infoiasi.ro/~mishoo
 *
 * use it as you need it
 */

addEvent = function(el, evname, func) {
  if (el.attachEvent) el.attachEvent("on" + evname, func);
  else el.addEventListener(evname, func, true);
}

stopEvent = function(evt) {
  if (evt.preventDefault) {
    evt.preventDefault();
    evt.stopPropagation();
  } else {
    evt.cancelBubble = true;
    evt.returnValue = false;
  }
}

addEvents = function(el, evs, func) {
	for (var i in evs) { addEvent(el, evs[i], func) }
}

removeEvent = function(el, evname, func) {
	if (el.detachEvent) el.detachEvent("on" + evname, func);
	else el.removeEventListener(evname, func, true);
}

removeEvents = function(el, evs, func) {
	for (var i in evs) { removeEvent(el, evs[i], func) }
}

removeClass = function(el, className) {
	if (!(el && el.className)) return;

	var cls = el.className.split(" ");
	var ar = new Array();
	for (var i = cls.length; i > 0;) {
		if (cls[--i] != className) {
			ar[ar.length] = cls[i];
		}
	}
	el.className = ar.join(" ");
}

addClass = function(el, className) {
	// remove the class first, if already there
	removeClass(el, className);
	el.className += " " + className;
}

hasClass = function(el, className) {
	if (!(el && el.className)) return false;

	var cls = el.className.split(" ");
	for (var i = cls.length; i > 0;) {
		if (cls[--i] == className) return true;
	}
	return false;
}

hitTest = function (ele1, ele2) {
	if (getAbsOffsetLeft(ele1)+ele1.offsetWidth<getAbsOffsetLeft(ele2)) return false;
	if (getAbsOffsetTop(ele1)+ele1.offsetHeight<getAbsOffsetTop(ele2)) return false;
	if (getAbsOffsetLeft(ele2)+ele2.offsetWidth<getAbsOffsetLeft(ele1)) return false;
	if (getAbsOffsetTop(ele2)+ele2.offsetHeight<getAbsOffsetTop(ele1)) return false;
	return true;
}

isUnderMouse = function (evt, ele) {
  var evt = evt ? evt : window.event;
  var sl = (window.pageXOffset ? window.pageXOffset : document.body.scrollLeft);
  var st = (window.pageYOffset ? window.pageYOffset : document.body.scrollTop);

	var x = (evt.clientX + sl);
	var y = (evt.clientY + st);
	if (x<getAbsOffsetLeft(ele)) return false;
	if (y<getAbsOffsetTop(ele)) return false;
	if (x>getAbsOffsetLeft(ele)+ele.offsetWidth) return false;
	if (y>getAbsOffsetTop(ele)+ele.offsetHeight) return false;
	return true;
}

function getAbsOffsetTop(ele) {
  var offset = 0;
  var st = (window.pageYOffset ? window.pageYOffset : document.body.scrollTop);
  do { offset += ele.offsetTop; if (window.getComputedStyle && window.getComputedStyle(ele, "").getPropertyValue("position")=="fixed") { offset+=st }; ele = ele.offsetParent; } while (ele!=null)
  return offset;
}

function getAbsOffsetLeft(ele) {
  var offset = 0;
  var sl = (window.pageXOffset ? window.pageXOffset : document.body.scrollLeft);
  do { offset += ele.offsetLeft; if (window.getComputedStyle && window.getComputedStyle(ele, "").getPropertyValue("position")=="fixed") { offset+=sl }; ele = ele.offsetParent; } while (ele!=null)
  return offset;
}


// Array functions
Array.prototype.contains = function(el) {
  for (var i=0; i<this.length; i++) {
    if (this[i] == el) return i;
  }
  return false;
}

// Cookie Functions
function ClientCookie() {
	if (document.cookie.length) { this.cookies = ' ' + document.cookie; }
}

ClientCookie.prototype.setCookie = function (key, value) {
	document.cookie = key + "=" + escape(value);
}

ClientCookie.prototype.getCookie = function (key) {
	if (this.cookies) {
		var start = this.cookies.indexOf(' ' + key + '=');
		if (start == -1) { return null; }
		var end = this.cookies.indexOf(";", start);
		if (end == -1) { end = this.cookies.length; }
		end -= start;
		var cookie = this.cookies.substr(start,end);
		return unescape(cookie.substr(cookie.indexOf('=') + 1, cookie.length - cookie.indexOf('=') + 1));
	}
	else { return null; }
}


userAgent = navigator.userAgent.toLowerCase();
isIE     = ((userAgent.indexOf("msie") != -1) && (userAgent.indexOf("opera") == -1));
isOpera  = (userAgent.indexOf("opera") != -1);
isMac     = (userAgent.indexOf("mac") != -1);
isMacIE = (isIE && isMac);
isWinIE = (isIE && !isMac);
isSafari = (userAgent.indexOf("safari") != -1);
isGecko  = (navigator.product == "Gecko" && !isSafari);

KEY_TAB = 9;
KEY_REFRESH = 116; //F5
KEY_ENTER= 13; 
TAB_INDENT = 2;
KEY_SPACE = 32;


function newXmlRequest() {
  var r = null;
  try {
    r = new ActiveXObject("Msxml2.XMLHTTP");
    if (r) return r;
  } catch(a) {}
  
  try {
    r = new ActiveXObject("Microsoft.XMLHTTP");
    if (r) return r;
  } catch(b) {}
  
	try {
	  r = new XMLHttpRequest();
    if (r) return r;
  } catch(c) {}

  return r;
}

