// W3BOX JavaScript repository
// version 0.2

/*==============*\
|* VARS SECTION *|
\*==============*/

// VARS: Browser detection flags
var userAgent = navigator.userAgent.toLowerCase();

var browser_opera   = (userAgent.indexOf('opera') != -1);
var browser_safari  = ((userAgent.indexOf('applewebkit') != -1) || (navigator.vendor == "Apple Computer, Inc."));
var browser_webtv   = (userAgent.indexOf('webtv') != -1);
var browser_msie    = ((userAgent.indexOf('msie') != -1) && (!browser_opera) && (!browser_safari) && (!browser_webtv));
var browser_ie4     = ((browser_msie) && (userAgent.indexOf("msie 4.") != -1));
var browser_mozilla = ((navigator.product == 'Gecko') && (!browser_safari));
var browser_konqueror   = (userAgent.indexOf('konqueror') != -1);
var browser_netscape    = ((userAgent.indexOf('compatible') == -1) && (userAgent.indexOf('mozilla') != -1) && (!browser_opera) && (!browser_webtv) && (!browser_safari));
var browser_netscape4   = ((browser_netscape) && (parseInt(navigator.appVersion) == 4));

// VARS: Detect RegExp support
var browser_regexp  = (window.RegExp) ? true : false;

// VARS: DOM style detection flags
var dom_type        = '';

if(document.getElementById)
{
	dom_type	= 'def';
}
else if(document.all)
{
	dom_type	= 'ie4';
}
else if(document.layers)
{
	dom_type	= 'ns4';
}

var object_cache = new Array();
var image_cache = new Array();

/*===================*\
|* FUNCTIONS SECTION *|
\*===================*/

// FUNCTION: Open window
function w3box_window_open(url, width, height)
{
	var dimensions = '';
	if(width)
	{
		dimensions += ',width=' + width;
	}
	if(height)
	{
		dimensions += ',height=' + height;
	}
	var opw = window.open(url, 'W3BOX', 'statusbar=no,menubar=no,toolbar=no,scrollbars=yes,resizable=yes' + dimensions);
	if(opw && opw.focus)
		opw.focus();
	return false;
}

function w3box_get_document_width()
{
	if(typeof(window.innerWidth) == 'number')
	{
		return window.innerWidth;
	}
	else if(document.documentElement && document.documentElement.clientWidth)
	{
		return document.documentElement.clientWidth;
	}
	else if(document.body && document.body.clientWidth)
	{
		return document.body.clientWidth;
	}
	return 0;
}

function w3box_get_document_height()
{
	if(typeof(window.innerHeight) == 'number')
	{
		return window.innerHeight;
	}
	else if(document.documentElement && document.documentElement.clientHeight)
	{
		return document.documentElement.clientHeight;
	}
	else if(document.body && document.body.clientHeight)
	{
		return document.body.clientHeight;
	}
	return 0;
}

function w3box_get_window_width()
{
	if(typeof(window.outerWidth) == 'number')
	{
		return window.outerWidth;
	}
	else if(document.body && document.body.clientWidth)
	{
		return document.body.clientWidth;
	}
	return 0;
}

function w3box_get_window_height()
{
	if(typeof(window.outerHeight) == 'number')
	{
		return window.outerHeight;
	}
	else if(document.body && document.body.clientHeight)
	{
		return document.body.clientHeight;
	}
	return 0;
}

function w3box_get_scroll_x()
{
	if(typeof(window.pageXOffset) == 'number')
	{
		return window.pageXOffset;
	}
	else if(document.body && document.body.scrollLeft)
	{
		return document.body.scrollLeft;
	}
	else if(document.documentElement && document.documentElement.scrollLeft)
	{
		return document.documentElement.scrollLeft;
	}
	return 0;
}

function w3box_get_scroll_y()
{
	if(typeof(window.pageYOffset) == 'number')
	{
		return window.pageYOffset;
	}
	else if(document.body && document.body.scrollTop)
	{
		return document.body.scrollTop;
	}
	else if(document.documentElement && document.documentElement.scrollTop)
	{
		return document.documentElement.scrollTop;
	}
	return 0;
}

function w3box_dialog_open(url, width, height)
{
	var dimensions = '';
	if(width)
		dimensions += ',width=' + width;
	if(height)
		dimensions += ',height=' + height;
	window.open(url, 'W3BOX', 'statusbar=no,menubar=no,toolbar=no,scrollbars=no,resizable=yes' + dimensions);
	return false;
}

function w3box_window_resize(width, height)
{
	var maxwidth = screen.availWidth - 32;
	var maxheight = screen.availHeight - 32;
	if(browser_msie)
	{
//		width += (document.body.clientWidth - document.documentElement.clientWidth);
//		height += (document.body.clientHeight - document.documentElement.clientHeight);
		width += (w3box_get_window_width() - w3box_get_document_width());
		height += (w3box_get_window_height() - w3box_get_document_height());
	}
	else
	{
		height += (top.outerHeight - top.innerHeight);
		if(!browser_mozilla)
			width += (top.outerWidth - top.innerWidth);
	}
	if(top.resizeTo)
		top.resizeTo(width, height);
	else if(window.resizeTo)
		window.resizeTo(width, height);
	return false;
}

function w3box_window_resizeto(id, width, height)
{
	var obj = w3box_get_object(id, true);
	if(!obj || !obj.width || !obj.height)
		return false;
	var xw = obj.width - w3box_get_document_width();
	var xh = obj.height - w3box_get_document_height();
	if(window && window.resizeBy)
		window.resizeBy(xw + width, xh + height);
	else
		return w3box_window_resize(width + obj.width, height + obj.height);
	if(self && self.focus)
		self.focus();
	return false;
}

// FUNCTION: Get an object
function w3box_get_object(itemid, force)
{
	if(typeof(object_cache[itemid]) == 'undefined' || force)
	{
		switch(dom_type)
		{
			case 'def':
				object_cache[itemid] = document.getElementById(itemid);
				break;
			case 'ie4':
				object_cache[itemid] = document.all[itemid];
				break;
			case 'ns4':
				object_cache[itemid] = document.layers[itemid];
				break;
		}
	}
	if(object_cache[itemid])
	{
		return object_cache[itemid];
	}
	return false;
}

function w3box_get_opener_object(itemid)
{
	switch(dom_type)
	{
		case 'def':
			return opener.document.getElementById(itemid);
		case 'ie4':
			return opener.document.all[itemid];
		case 'ns4':
			return opener.document.layers[itemid];
	}
	return false;
}

function w3box_show(id)
{
	obj = w3box_get_object(id);
	if(obj)
	{
		obj.style.display = '';
	}
}

function w3box_hide(id)
{
	obj = w3box_get_object(id);
	if(obj)
	{
		obj.style.display = 'none';
	}
}

function w3box_display_toggle(id)
{
	obj = w3box_get_object(id);
	if(obj)
	{
		if(obj.style.display == 'none')
		{
			obj.style.display = '';
		}
		else
		{
			obj.style.display = 'none';
		}
	}
	return false;
}

function w3box_check_toggle(id)
{
	obj = w3box_get_object(id);
	if(obj)
	{
		if(obj.checked == true)
		{
			obj.checked = false;
		}
		else
		{
			obj.checked = true;
		}
	}
	return false;
}

// FUNCTION: Get hovertext displayed
function w3box_hover_on(text)
{
	obj = w3box_get_object('hovertext');
	if(obj)
	{
		obj.innerHTML = text;
	}
	if(self && self.src)
	{
		window.status = text + ' [' + self.src + ']';
	}
	else
	{
		window.status = text;
	}
}

// FUNCTION: Clear hovertext
function w3box_hover_off()
{
	obj = w3box_get_object('hovertext');
	if(obj && obj.innerHTML)
	{
		obj.innerHTML = '&nbsp;';
	}
	window.status = '';
}

function w3box_status(text, link)
{
	if(window.status)
	{
		window.status = text + ' [' + link + ']';
	}
}

function w3box_nostatus()
{
	if(window.status)
	{
		window.status = '';
	}
}

function w3box_ic_load(id, src)
{
	image_cache[id] = new Image();
	image_cache[id].src = src;
}

function w3box_ic_set(iid, icid)
{
	obj = w3box_get_object(iid);
	obj.src = image_cache[icid].src;
}

