/**
*	Juman common js functions
*	(c) Pavel Gudanets
*	
*/


//  Get browser window parameters
function get_window_data()
{
	// width & height
	var width = 0, height = 0;
	if (typeof( window.innerWidth ) == 'number') // non-IE
	{
		width = window.innerWidth;
		height = window.innerHeight;
	}
	else if (document.documentElement && document.documentElement.clientWidth) // IE 6+ in 'standards compliant mode'
	{
		width = document.documentElement.clientWidth;
		height = document.documentElement.clientHeight;
	}
	else if (document.body) // IE4 compatible
	{
		width = document.body.clientWidth;
		height = document.body.clientHeight;
	}

	// scrollX & scrollY
	var scrollX = 0, scrollY = 0;
	if (typeof( window.pageYOffset ) == 'number')
	{
		//Netscape compliant
		scrollY = window.pageYOffset;
		scrollX = window.pageXOffset;
	}
	else if (document.body && ( document.body.scrollLeft || document.body.scrollTop ) )
	{
		//DOM compliant
		scrollY = document.body.scrollTop;
		scrollX = document.body.scrollLeft;
	}
	else if (document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) )
	{
		//IE6 standards compliant mode
		scrollY = document.documentElement.scrollTop;
		scrollX = document.documentElement.scrollLeft;
	}
	return {
		'width' : width,
		'height' : height,
		'scrollX' : scrollX,
		'scrollY' : scrollY
		};
}


//  Get user's screen parameters
function get_screen_data()
{
	var screen_height=0; var screen_width=0;
	if (self.screen)
	{
		screen_width = screen.width;
		screen_height = screen.height;
	}
	else if (self.java)
	{
		var jkit = java.awt.Toolkit.getDefaultToolkit();
		var scrsize = jkit.getScreenSize();
		screen_width = scrsize.width;
		screen_height = scrsize.height;
	}
	return {'width':screen_width, 'height':screen_height}
}


function get_mouse_coords(event)
{
	var x, y;
	if (browser() == 'netscape')
	{
		x = event.pageX;
		y = event.pageY;
	}
	else // if (navigator.appName.indexOf("Microsoft")>-1)
	{
		x = window.event.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft) - document.documentElement.clientLeft;
		y = window.event.clientY + (document.documentElement.scrollTop || document.body.scrollTop) - document.documentElement.clientTop;
	}

	return {
	'x' : x,
	'y' : y
	};
}

// when page is scrolled, getBoundingClientRect() returns buggy information.
function get_obj_area(obj)
{
	var left = obj.offsetLeft;
	var top = obj.offsetTop;
	var width = obj.offsetWidth;
	var height = obj.offsetHeight;

	var obj2 = obj;
	left = 0;
	top = 0;
	while (obj2)
	{
		left += obj2.offsetLeft + zero(obj2.style.borderLeftWidth);
		top += obj2.offsetTop + zero(obj2.style.borderTopWidth);
		obj2 = obj2.offsetParent;
	}

	return {
	'left' : left,
	'right' : left + width,
	'top' : top,
	'bottom' : top + height,
	'width' : width,
	'height' : height
	};
}


// get point data
function get_rect_data(event, objWidth, objHeight)
{
	var b = browser();
	var mouse = get_mouse_coords(event);
	var windata = get_window_data();
	var objX = mouse['x'] - (b == 'ie' ? 0 : windata['scrollX']);
	var objY = mouse['y'] - (b == 'ie' ? 0 : windata['scrollY']);

	var maxX = windata['width'] + windata['scrollX'];
	var maxY = windata['height'] + windata['scrollY'];

	if (objX + objWidth > maxX - 20)
	{
		objX = maxX - objWidth - 20;
		if (objX < 0)
			objX = 0;
	}
	if (objY + objHeight > maxY - 20)
	{
		objY = maxY - objHeight - 20;
		if (objY < 0)
			objY = 0;
	}
	return {'x':objX, 'y':objY};
}

// Check if point is inside area
function coords_inside_obj(point, obj)
{
	var obj_params = get_obj_area(obj);

	if (point['x'] > obj_params['left'] &&
		point['x'] < obj_params['right'] &&
		point['y'] > obj_params['top'] &&
		point['y'] < obj_params['bottom'])
		return true;
	else
		return false;
}


function browser()
{
	if (navigator.appName.indexOf("Microsoft")>-1)
		return 'ie';
	if (navigator.appName.indexOf("Opera")>-1)
		return 'opera';
	if (navigator.appName.indexOf("Netscape")>-1)
		return 'netscape';
	return navigator.appName;
}

function zero(v)
{
	var v1 = parseInt(v);
	if (isNaN(v1))
		v1 = parseFloat(v);
	return(isNaN(v1)?0:v1);
}

String.prototype.replaceAll = function(search, replace)
{
	return this.split(search).join(replace);
}


var Event =
{
	add: function(obj, type, fn)
	{
		if (obj.attachEvent)
		{
			obj['e'+type+fn] = fn;
			obj[type+fn] = function() { obj['e'+type+fn](window.event, obj); }
			obj.attachEvent('on'+type,obj[type+fn]);
		}
		else if (obj.addEventListener)
		{
			obj['e'+type+fn] = fn;
			obj[type+fn] = function(event) { obj['e'+type+fn](event, obj); }
			obj.addEventListener(type,obj[type+fn], false);
		}
	},

	remove: function(obj,type,fn)
	{
		if (obj.detachEvent)
		{
			obj.detachEvent('on'+type,obj[type+fn]);
			obj[type+fn] = null;
		}
		else if (obj.addEventListener)
		{
			obj.removeEventListener(type,fn, false);
		}
	}
}


