function add_onload(func)
{
	var oldonload = window.onload;
	if (typeof(window.onload) != 'function') {
		window.onload = func;
	} else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}

function print_r(obj) {
	var count_obj = 0;
	function _output(str) {
		debug(str);
	}
	function _print_r(obj, name, level) {
		var s = "";
		if (obj == undefined || level > 4) return;
		for (var i = 0; i < level; i++) { s += "\t"; }
		s += " - " + name + ":" + typeof(obj) + "=" + obj;
		_output(s);
		if (name == "document" || typeof(obj) != "object") return;
		for ( key in obj ) {
			if (count_obj++ > 150) return;
			_print_r(obj[key], key, level + 1);
		}
	}
	_print_r(obj, "*", 0);
}


function documentbody()
{
	return (!window.opera && document.compatMode && document.compatMode!="BackCompat")? document.documentElement : document.body
}


//Window Size
var clientWidth = 0;
var clientHeight = 0;
function getClientSize()
{
	var db = documentbody();
	if (db) {
		clientWidth = (db.clientWidth) ? db.clientWidth : window.innerWidth;
		clientHeight = (db.clientHeight) ? db.clientHeight : window.innerHeight;
	}
}
window.onresize = function()
{
	getClientSize();
}
add_onload(getClientSize);


//Mouse Position
var mouseX = 0;
var mouseY = 0;
var clientX = 0;
var clientY = 0;
function getMouseXY(e) {
	if (typeof e != 'undefined' && e.pageX != undefined) { // grab the x-y pos.s if browser is NS
		mouseX = e.pageX;
		mouseY = e.pageY;
		clientX = e.clientX;
		clientY = e.clientY;
	}
	else { // grab the x-y pos.s if browser is IE
		mouseX = event.clientX + documentbody().scrollLeft;
		mouseY = event.clientY + documentbody().scrollTop;
		clientX = event.clientX;
		clientY = event.clientY;
		
	}
	
	if (mouseX < 0){mouseX = 0;}
	if (mouseY < 0){mouseY = 0;}  
}

function debug(msg, clear)
{
	if (clear) {
		$('debug').innerHTML = '';
	}
	$('debug').innerHTML += msg + "<br>\n";
}







var PREVIEW_CANCEL = false;
var preview_thumb;
var preview_photo;
var preview_width;
var preview_height;
var preview_position;
var preview_padding = 15;
function preview(e, thumb, photo, width, height, position)
{
	getMouseXY(e);
	PREVIEW_CANCEL = false;
	
	if (thumb == preview_thumb) {
		document.onmousemove = preview_move;
		preview_start();
		return;
	}
	
	preview_thumb = thumb;
	preview_photo = photo;
	preview_width = width;
	preview_height = height;
	preview_position = position;
	
	if (preview_position == undefined) preview_position = 'right';
	
	preview_thumb.onmouseout = preview_out;
	
	$('preview').innerHTML = '<img src="' + preview_photo + '" width="' + preview_width + '" height="' + preview_height + '" onload="preview_start()">';
	
	document.onmousemove = preview_move;
/*
	$('preview-image').src = preview_photo;
	$('preview-image').thumb = preview_thumb;
	$('preview-image').onload = preview_start;
	$('preview-image').thumb.onmouseout = preview_close;
*/
}

function preview_start(e)
{
	if (PREVIEW_CANCEL) return;
	preview_follow();
	$('preview').style.display = 'block';
}

function preview_move(e)
{
	getMouseXY(e); 
	preview_follow();
}

function preview_follow()
{
	//debug('mouseY='+mouseY+', clientY='+clientY);
	var top = mouseY - (preview_height / 2);
	if (top + preview_height + preview_padding > clientHeight + documentbody().scrollTop) {
		top = clientHeight + documentbody().scrollTop - (preview_height + preview_padding);
	}
	if (top < preview_padding + documentbody().scrollTop) {
		top = preview_padding + documentbody().scrollTop;
	}
	
	var left = (preview_position == 'right') ? parseInt(mouseX) + preview_padding : parseInt(mouseX) - preview_padding - preview_width;
	if (left + preview_width + preview_padding > clientWidth) {
		left = parseInt(mouseX) - preview_padding - preview_width;
		
	}
	if (left < preview_padding) {
		left = parseInt(mouseX) + preview_padding;
		
	}
	
	$('preview').style.top = top + 'px';
	$('preview').style.left = left + 'px';
}

function preview_out()
{
	preview_close();
}

function preview_close()
{
	//debug('mouseout');
	PREVIEW_CANCEL = true;
	document.onmousemove = null;
	$('preview').style.display = 'none';
}


function nl2br(str)
{
	return String(str).split("\n").join("<br />");
}
function nl2br2(str)
{
	return String(str).split(" ");
}

function movie(movieName) {
	if (navigator.appName.indexOf("Microsoft") != -1) {
		return window[movieName];
	}
	else {
		return document[movieName];
	}
}
