function addWindowOnload(callback)
{
	if (typeof window.attachEvent != "undefined") {
		window.attachEvent("onload", callback);
	}
	else if (typeof window.addEventListener != "undefined") {
		window.addEventListener("load", callback, false);
	}
	else if (window.onload != null) {
		var origOnload = window.onload;
		window.onload = function(e) {
			origOnload(e);
			callback();
		};
	}
	else {
		window.onload = callback;
	}
}


function getDay(day) {
	var arr = new Array("Sunday", "Monday", "Tuesday", "Wednesday", 
						 "Thursday", "Friday", "Saturday")
	return arr[day];
}

function getMonth(month){
	var arr = new Array("January", "February", "March",
							   "April", "May", "June",
							   "July", "August", "September",
							   "October", "November", "December") 
	return arr[month];
}

function getMonthAbr(month){
	var arr = new Array("Jan", "Feb", "Mar", "Apr", "May", "Jun",
							   "Jul", "Aug", "Sep", "Oct", "Nov", "Dec");
	return arr[month];
}

function getDaySuffix(day) {
	var tmp = day % 10;
	if (day < 10 || day >= 20) {
		if (tmp == 1) { return "st"; }
		else if (tmp == 2) { return "nd"; }
		else if (tmp == 3) { return "rd"; }
		else { return "th"; }
	}
	else { return "th"; }
}

function gmt2localtime(time) {
	var local = new Date(time);
	tmp = local.getTime() + (-(local.getTimezoneOffset() * 60000));
	return new Date(tmp); 
}

function datestr(unixtime, holder) {
	var d = $(holder);
	d.innerHTML = getDatestr(unixtime);

}

function getDatestr(unixtime) {
	var cur = new Date(unixtime * 1000);
	cur = gmt2localtime(cur);
	var year = (cur.getYear() < 1000) ? cur.getYear() + 1900 : cur.getYear(); 
	var str = (cur.getHours() < 10 ? "0" : "") + cur.getHours() + ":" +
			  (cur.getMinutes() < 10 ? "0" : "") + cur.getMinutes() + ":" +
			  (cur.getSeconds() < 10 ? "0" : "") + cur.getSeconds() + " " +
			  cur.getDate() + getDaySuffix(cur.getDate()) + " " +
			  getMonth(cur.getMonth()) + " " + year;
	return str;
}


function ut2array(unixtime) {
	var cur = new Date(unixtime * 1000);
	var year = (cur.getYear() < 1000) ? cur.getYear() + 1900 : cur.getYear(); 
	var tmp = new Array();
	tmp[0] = year;
	tmp[1] = ((cur.getMonth() + 1) < 10 ? "0" : "") + (cur.getMonth() + 1); 
	tmp[2] = (cur.getDate() < 10 ? "0" : "") + (cur.getDate()); 
	tmp[3] = (cur.getHours() < 10 ? "0" : "") + cur.getHours(); 
	tmp[4] = (cur.getMinutes() < 10 ? "0" : "") + cur.getMinutes(); 
	tmp[5] = (cur.getSeconds() < 10 ? "0" : "") + cur.getSeconds(); 
	return tmp;	
}

// FIXME safari
function findPosX(obj)
{
	var curleft = 0;
	if (obj.offsetParent)
	{
		while (obj.offsetParent)
		{
			curleft += obj.offsetLeft
			obj = obj.offsetParent;
		}
	}
	else if (obj.x)
		curleft += obj.x;
	return curleft;
}

function getwidth() {
	var width = 0;
	if (typeof(window.innerWith) != 'undefined')
		width = window.innerWidth;
	else {
		if (document.documentElement &&
		    typeof(document.documentElement.clientWidth) != 'undefined' &&
		    document.documentElement.clientWidth != 0) {
			width = document.documentElement.clientWidth;
		}
		else {
			width = document.body.clientWidth;
		}
	}

	return (width);
}

function imgfit(img, rmargin)
{
	var avail_width = getwidth();
	var leftoffset = findPosX(document.images[img]);
	var iwidth, iheight;

	orig_width = document.images[img].width;
	orig_height = document.images[img].height;


	avail_width -= leftoffset;
	iwidth = avail_width - rmargin;
	iheight = (orig_height/orig_width) * iwidth;

	if (iwidth < orig_width) {
		document.images[img].width = iwidth;
		document.images[img].height = iheight;
	}
}

function nop() {}

/*
function subtract_vertical(layer, height, button_exp, button_sub) {
	startHeight = $(layer).offsetHeight;
	Element.makeClipping(layer);

	var te = document.getElementsByClassName(button_exp, layer); 
	var ts = document.getElementsByClassName(button_sub, layer); 

	Element.hide(ts[0]);
	Element.show(te[0]);

	new Rico.Effect.Size(layer, null, height, 50, 20, null);
	return startHeight;
}

function expand_vertical(layer, height, button_exp, button_sub) {
	var te = document.getElementsByClassName(button_exp, layer); 
	var ts = document.getElementsByClassName(button_sub, layer); 
	Element.hide(te[0]);
	Element.show(ts[0]);
	new Rico.Effect.Size(layer, null, height, 50, 20, null);
}
*/

function getCalendar(frame, uid, year, mon, path) {
	var pars = 'u='+uid+'&y='+year+'&m='+mon+'&f='+frame;
	if (path != null)
		pars += '&p='+path;

	var handler = function(req) {
		var f = $(frame);
		f.innerHTML = req.responseText;
		f.innerHTML.evalScripts();
	};

	backend = path + 'backend/';
	var req = new Ajax.Request(backend+'calendar.php',
		{ method: 'get', parameters: pars,
			onComplete: handler});
}

function closepopup(name)
{
	Element.remove($(name));
}

function popup_noret(url, layer, path)
{
	popup(url, layer, path);
}

function popup(url, layer, path)
{
    Position.prepare();
    var tmp = Position.realOffset(document.body);
    var scroll_y = Position.deltaY; 
    var tmp = Element.getDimensions(document.body);
    var offset_x = tmp.width;

    var e = document.createElement('div');
	e.id = '_popup_' + Math.floor(Math.random()*1000);
    Element.hide(e);
    layer.appendChild(e);

	e.innerHTML = '<a href="javascript:closepopup(\'' + e.id + '\');">'+
'<img src="' + path + 'img/cross.gif" border="0"/></a>';
    var c = document.createElement('div');
	e.appendChild(c);

	var handler = function(req) {
		c.innerHTML = req.responseText;
		c.innerHTML.evalScripts();
    	var orig = Element.getDimensions(e);
    	var xpos = (offset_x - orig.width)/2;
    	var ypos = scroll_y + 100;
    	Element.setStyle(e, { position:'absolute',
			'border-top': '1px solid grey',
			'border-left': '1px solid grey',
			'border-right': '1px solid black',
			'border-bottom': '1px solid black',
			padding: '0.5em',
			background: '#ffffff',
        	top: ypos + 'px',
        	left: xpos + 'px'});

    	Element.show(e);
	};
	var eHandler = function(req) {
		Element.remove(e);	
	}

	var req = new Ajax.Request(url,
		{ method: 'get', onComplete: handler, onError: eHandler});

	return e;
}

function popup2_noret(url, layer, path)
{
	popup2(url, layer, path);
}
function popup2(url, path)
{
    Position.prepare();
	var layer = document.body;
    var tmp = Position.realOffset(document.body);
    var scroll_y = Position.deltaY; 
    var tmp = Element.getDimensions(document.body);
    var offset_x = tmp.width;
	var id = Math.floor(Math.random()*1000);

    var e = document.createElement('div');
	e.id = '_popup_' + id; 
    Element.hide(e);
    layer.appendChild(e);

	e.innerHTML = '<a href="javascript:popup_close(\'' + id + '\');">'+
'<img src="' + path + 'img/cross.gif" border="0"/></a>';
    var c = document.createElement('div');
	e.appendChild(c);

	var handler = function(req) {
		c.innerHTML = req.responseText;
		c.innerHTML.evalScripts();
    	var orig = Element.getDimensions(e);
    	var xpos = (offset_x - orig.width)/2;
    	var ypos = scroll_y + 100;
    	Element.setStyle(e, { position:'absolute',
			'border-top': '1px solid grey',
			'border-left': '1px solid grey',
			'border-right': '1px solid black',
			'border-bottom': '1px solid black',
			padding: '0.5em',
			background: '#ffffff',
        	top: ypos + 'px',
        	left: xpos + 'px'});

    	Element.show(e);
	};
	var eHandler = function(req) {
		Element.remove(e);	
	}

	var req = new Ajax.Request(url,
		{ method: 'get', onComplete: handler, onError: eHandler});

	return e;
}

function containsDOM (container, containee) {
  var isParent = false;
  do {
    if ((isParent = container == containee))
      break;
    containee = containee.parentNode;
  }
  while (containee != null);
  return isParent;
}

function checkMouseEnter (element, evt) {
  if (element.contains && evt.fromElement) {
    return !element.contains(evt.fromElement);
  }
  else if (evt.relatedTarget) {
    return !containsDOM(element, evt.relatedTarget);
  }
}

function checkMouseLeave (element, evt) {
  if (element.contains && evt.toElement) {
    return !element.contains(evt.toElement);
  }
  else if (evt.relatedTarget) {
    return !containsDOM(element, evt.relatedTarget);
  }
}

function getMousePos(e) {
	var posx = 0;
	var posy = 0;
	if (e.pageX || e.pageY) {
		posx = e.pageX;
		posy = e.pageY;
	}
	else if (e.clientX || e.clientY) 	{
		posx = e.clientX + document.body.scrollLeft
			+ document.documentElement.scrollLeft;
		posy = e.clientY + document.body.scrollTop
			+ document.documentElement.scrollTop;
	}
	return new Array(posx, posy);
}

function cookie_create(name, value) {
	document.cookie = name+"="+value+"; path=/";
}

function cookie_read(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}
