// add and remove event

function addEvent( obj, type, fn ) {
	if (obj.addEventListener) {
		obj.addEventListener( type, fn, false );
		EventCache.add(obj, type, fn);
	}
	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] );
		EventCache.add(obj, type, fn);
	}
	else {
		obj["on"+type] = obj["e"+type+fn];
	}
}

var EventCache = function(){
	var listEvents=[];
	return {
		listEvents: listEvents,
		add: function(node, sEventName, fHandler){
			listEvents.push(arguments);
		},
		flush: function(){
			var i, item;
			for(i = listEvents.length - 1; i >= 0; i = i - 1){
				item=listEvents[i];
				if(item[0].removeEventListener){item[0].removeEventListener(item[1], item[2], item[3]);}
				if(item[1].substring(0, 2) != "on"){item[1] = "on" + item[1];}
				if(item[0].detachEvent){item[0].detachEvent(item[1], item[2]);}
				item[0][item[1]] = null;
			}
		}
	};
}();

function removeEvent( obj, type, fn )
{
	if (obj.removeEventListener){
		obj.removeEventListener( type, fn, false );
	}
	else if (obj.detachEvent){
		obj.detachEvent( "on"+type, obj[type+fn] );
		obj[type+fn] = null;
		obj["e"+type+fn] = null;
	}
}

// Keeping Compact Forms Accessible

function hideLabel (field_id, hide) {
	var field_for;
	var labels = document.getElementsByTagName('label');
	for (var i = 0; i < labels.length; i++) {
		field_for = labels[i].htmlFor || labels[i].getAttribute('for');
		if (field_for == field_id) {
			labels[i].style.textIndent = (hide) ? '-1000px' : '0px';
			return true;
		}
	}
}

function initOverLabels () {
	if (!document.getElementById) { return; }

	var labels, id, field;

	// Set focus and blur handlers to hide and show
	// LABELs with 'overlabel' class names.
	labels = document.getElementsByTagName('label');
	for (var i = 0; i < labels.length; i++) {

		if (labels[i].className == 'overlabel') {

			// Skip labels that do not have a named association
			// with another field.
			id = labels[i].htmlFor || labels[i].getAttribute('for');
			if (!id || !(field = document.getElementById(id))) {
				continue;
			}

			// Change the applied class to hover the label
			// over the form field.
			labels[i].className = 'overlabel-apply';

			// Hide any fields having an initial value.
			if (field.value !== '') {
				hideLabel(field.getAttribute('id'), true);
			}

			// Set handlers to show and hide labels.
			field.onfocus = function () {
				hideLabel(this.getAttribute('id'), true);
			};
			field.onblur = function () {
				if (this.value === '') {
					hideLabel(this.getAttribute('id'), false);
				}
			};

			// Handle clicks to LABEL elements (for Safari).
			labels[i].onclick = function () {
				var id, field;
				id = this.getAttribute('for');
				if (id && (field = document.getElementById(id))) {
					field.focus();
				}
			};

		}
	}
}

/*
JSTarget function by Roger Johansson, www.456bereastreet.com
*/
var JSTarget = {
	init: function(att,val) {
		var d=document;
		if(!d.getElementById||!d.createElement) { return; }
		if (document.getElementById && document.createElement && document.appendChild) {
			var strAtt = ((typeof att == 'undefined') || (att === null)) ? 'class' : att;
			var strVal = ((typeof val == 'undefined') || (val === null)) ? 'non-html' : val;
			var arrLinks = document.getElementsByTagName('a');
			var oLink;
			var oRegExp = new RegExp("(^|\\s)" + strVal + "(\\s|$)");
			for (var i = 0; i < arrLinks.length; i++) {
				oLink = arrLinks[i];
				if ((strAtt == 'class') && (oRegExp.test(oLink.className)) || (oRegExp.test(oLink.getAttribute(strAtt)))) {
					oLink.onclick = JSTarget.openWin;
				}
			}
		}
	},
	openWin: function(e) {
		var event = (!e) ? window.event : e;
		if (event.shiftKey || event.altKey || event.ctrlKey || event.metaKey) { return true; }
		else {
			var oWin = window.open(this.getAttribute('href'), '_blank');
			if (oWin) {
				if (oWin.focus) {
					oWin.focus();
				}
			}
			return false;
		}
		oWin = null;
		return true;
	}
};

// CSS functions
function swapClass(e,sClass){
	if(e) { e.className = sClass; }
}
function addClass(e, name){
	delClass(e, name);
	return e && (e.className += (e.className ? ' ' : '') + name);
}
function delClass(e, name){
	return e && (e.className = e.className.replace(new RegExp('^' + name + '\\b\\s*|\\s*\\b' + name + '\\b', 'g'), ''));
}
function hasClass(e, name){
	return (!e || !e.className) ? false : (new RegExp('\\b' + name + '\\b')).test(e.className);
}
// Function getElementsByClassName
var getElementsByClassName=function(oElm, strTagName, strClassName){
	var arrElements=(strTagName=='*' && oElm.all)?oElm.all:oElm.getElementsByTagName(strTagName);
	var arrReturnElements=[];
	strClassName=strClassName.replace(/\-/g, "\\-");
	var oRegExp=new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for(var i=0;i<arrElements.length;i++){
		oElement=arrElements[i];
		if(oRegExp.test(oElement.className)){
			arrReturnElements.push(oElement);
		}
	}
	return (arrReturnElements);
};

// Zebra tables
function ZebraTables() {
	var d=document;
	if(!d.getElementById||!d.getElementsByTagName) return;
	var tables = document.getElementsByTagName("table");

	for(var x=0;x!=tables.length;x++){
		var table = tables[x];

		if(hasClass(tables[x],"zebra")) {
			var tbodies = table.getElementsByTagName("tbody");
			for (var h = 0; h < tbodies.length; h++) {
				var even = true;
				var trs = tbodies[h].getElementsByTagName("tr");
				for (var i = 0; i < trs.length; i++) {
					if(even){
						if(!hasClass(trs[i],"even")){ addClass(trs[i],"even"); }
					}
					even = !even;
				}
			}
		}
	}
}

// Add unobtrusive print link
function AddPrintLink(targetEl,targetText){
	if (!document.getElementById || !document.createTextNode) {return;} // Check for DOM support
	if (!document.getElementById(targetEl)) {return;} // Check that the target element actually exists
	if (!window.print&&!typeof(window.print)) {return;} // Check that the browser supports window.print
	var targetElement = document.getElementById(targetEl).getElementsByTagName("li")[5];

	var li = document.createElement('li');
	var oLink = document.createElement('a');
	oLink.id = 'printbutton'; // Give the link an id to allow styling
	oLink.href = '#'; // Make the link focusable for keyboard users
	oLink.appendChild(document.createTextNode(targetText));
	oLink.onclick = function() {window.print(); return false;} // Return false prevents the browser from following the link and jumping to the top of the page after printing
	li.appendChild(oLink);
	//targetElement.parentNode.insertBefore(li,targetElement);
	targetElement.parentNode.insertBefore(li,targetElement.nextSibling);
}

// Resize body text
function textSize(size){

	if (!document.body  || !document.body.style) { return; }
	var SizeCurrent;
	var CurrentValue;
	var CurrentUnit;
	var x;
	var body = document.getElementsByTagName('body')[0];

	if (body.style && body.style.fontSize){
		SizeCurrent = body.style.fontSize;
	}
	else if (typeof(getComputedStyle) != 'undefined'){
		SizeCurrent = getComputedStyle(body,'').getPropertyValue('font-size');
	}
	else if (body.currentStyle){
		SizeCurrent = body.currentStyle.fontSize;
	}

	x = /([\d.]+)(.+)/.exec(SizeCurrent);
	CurrentValue = x[1];
	CurrentUnit = x[2];

	// Zoom in
	if (size == "bigger") {
		switch(CurrentUnit){
			case '%': CurrentValue = parseFloat(CurrentValue) + 1; break;
			case 'em': CurrentValue = parseFloat(CurrentValue) + 0.2; break;
			case 'ex': CurrentValue = parseFloat(CurrentValue) + 1; break;
			case 'pc': CurrentValue = parseFloat(CurrentValue) + 1; break;
			case 'pt': CurrentValue = parseFloat(CurrentValue) + 1; break;
			case 'px': CurrentValue = parseFloat(CurrentValue) + 1; break;
			case 'in': CurrentValue = parseFloat(CurrentValue) + 1; break;
			case 'mm': CurrentValue = parseFloat(CurrentValue) + 1; break;
			case 'cm': CurrentValue = parseFloat(CurrentValue) + 1; break;
		}

		body.style.fontSize = CurrentValue + CurrentUnit;
		return false;
	}
	if (size == "smaller") {
		switch(CurrentUnit){
			case '%': CurrentValue = parseFloat(CurrentValue) - 1; break;
			case 'em': CurrentValue = parseFloat(CurrentValue) - 0.1; break;
			case 'ex': CurrentValue = parseFloat(CurrentValue) - 1; break;
			case 'pc': CurrentValue = parseFloat(CurrentValue) - 1; break;
			case 'pt': CurrentValue = parseFloat(CurrentValue) - 1; break;
			case 'px': CurrentValue = parseFloat(CurrentValue) - 1; break;
			case 'in': CurrentValue = parseFloat(CurrentValue) - 1; break;
			case 'mm': CurrentValue = parseFloat(CurrentValue) - 1; break;
			case 'cm': CurrentValue = parseFloat(CurrentValue) - 1;	break;
		}

		body.style.fontSize = CurrentValue + CurrentUnit;
		return false;
	}
}

// text-increase and text-decrease
function textplus() {
	tp = document.getElementById('text-increase');
	if(!tp || !document.body  || !document.body.style) { return; }
	tp.onclick = function() {
		textSize('bigger');
		return false;
	};
}
function textminus() {
	tm = document.getElementById('text-decrease');
	if(!tm || !document.body  || !document.body.style) { return; }
	tm.onclick = function() {
		textSize('smaller');
		return false;
	};
}

// ************************
// load all event in onload
// ************************
addEvent(window, 'load', function(){
	textplus();
	textminus();
	setInterval(initOverLabels, 50);
	JSTarget.init("rel","external");
	AddPrintLink("language-menu-options","Drukuj");
});
