/**
 * Rozszerzenie funkcjonalności obiektu window o informacje dotyczące
 * rozmiaru obszaru roboczego (dokumentu)
**/

window.size = function()
{
	var iWidth = 0;
	var iHeight = 0;

	if(!window.innerWidth)
	{
		if(!(document.documentElement.clientWidth == 0))
		{
			iWidth = document.documentElement.clientWidth;
			iHeight = document.documentElement.clientHeight;
		}
		else
		{
			iWidth = document.body.clientWidth;
			iHeight = document.body.clientHeight;
		}
	}
	else
	{
		iWidth = window.innerWidth;
		iHeight = window.innerHeight;
	}
	return {width:iWidth, height:iHeight};
}

window.center = function()
{
	var hWnd = (arguments[0] != null) ? arguments[0] : {width:0,height:0};

	var _x = 0;
	var _y = 0;
	var offsetX = 0;
	var offsetY = 0;

	//IE
	if(!window.pageYOffset)
	{
		//strict mode
		if(!(document.documentElement.scrollTop == 0))
		{
			offsetY = document.documentElement.scrollTop;
			offsetX = document.documentElement.scrollLeft;
		}
		//quirks mode
		else
		{
			offsetY = document.body.scrollTop;
			offsetX = document.body.scrollLeft;
		}
	}
	//w3c
	else
	{
		offsetX = window.pageXOffset;
		offsetY = window.pageYOffset;
	}

	_x = ((this.size().width-hWnd.width)/2)+offsetX;
	_y = ((this.size().height-hWnd.height)/2)+offsetY;

	return{x:_x,y:_y};
}

/*** Okienka ***/
function showPopup(elemId)
{
	popupElem = document.getElementById(elemId);
	
	if(!popupElem)
	return;

	popupElem.style.left = window.center().x - 175 + "px";
	popupElem.style.top = window.center().y - 40 + "px";

	popupElem.style.display = 'block';
}

function hidePopup(elemId)
{
	popupElem = document.getElementById(elemId);
	
	if(!popupElem)
	return;
	
	popupElem.style.display = 'none';
}

/*** Pobranie obiektu elementu po id ***/
function $(elemId)
{
	return document.getElementById(elemId);
}

/*** Dodawanie zdarzeń do obiektów ***/
/*** Autor: John Resig (http://ejohn.org/blog/flexible-javascript-events/) ***/
function addEvent(obj, type, fn)
{
	if (obj.addEventListener)
	obj.addEventListener(type, fn, false);
	else
	if(obj.attachEvent)
	{
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
	}
}

/*** Dodawanie zdarzeń do obiektów ***/
/*** Autor: John Resig (http://ejohn.org/blog/flexible-javascript-events/) ***/
function removeEvent(obj, type, fn)
{
	if ( obj.detachEvent )
	{
		obj.detachEvent( 'on'+type, obj[type+fn] );
		obj[type+fn] = null;
	}
	else
	obj.removeEventListener( type, fn, false );
}
/*** Pozostałe ***/
function strpos(haystack, needle, offset)
{
    // Finds position of first occurrence of a string within another  
    // 
    // version: 908.406
    // discuss at: http://phpjs.org/functions/strpos
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Onno Marsman    
    // +   bugfixed by: Daniel Esteban
    // *     example 1: strpos('Kevin van Zonneveld', 'e', 5);
    // *     returns 1: 14
    var i = (haystack+'').indexOf(needle, (offset ? offset : 0));
    return i === -1 ? false : i;
}

/**
 * Zwijanie i rozwijanie listy elementów
 *
 * @param string id - identyfikator elementu
 * @param boolean forcedState - true wymuś rozwinięcie, false wymuś zwinięcie
**/
function listRoller(id, forcedState)
{
	listElem = $(id);
	
	if(!listElem)
	return;
	
	if(forcedState == true || forcedState == false)
	{
		listElem.style.display = (forcedState == true ? 'block' : 'none');
		listElem.rolled = forcedState;
	}
	else
	{
		if(!listElem.rolled || listElem.rolled == false)
		{
			listElem.style.display = 'block';
			listElem.rolled = true;
		}
		else
		{
			listElem.style.display = 'none';
			listElem.rolled = false;
		}
	}
}

/*** Myszka ***/
function mousePosition(e)
{
	var posx = 0;
	var posy = 0;
	if (!e) var e = window.event;
	if (e.pageX || e.pageY)
	{
		posx = e.pageX;
		posy = e.pageY;
	}
	else if (e.clientX || e.clientY)
	{
		posx = e.clientX;
		posy = e.clientY;
	}
	
	return {x:posx, y:posy};
}



