
var NS4 = (typeof(document.layers) != 'undefined')         ? true : false;
var DOM = (typeof(document.getElementById) != 'undefined') ? true : false;
var IE  = (typeof(document.all) != 'undefined')            ? true : false;
var IE4 = IE && !DOM;

var browserOK = NS4 || DOM || IE || IE4;

var LastLayer = 'none';
var CloseTmr  = null;
var ImgRoot   = '';

function initAnimImage(imageName, imgOn, imgOff) {
	document [imageName + "on"]      = new Image;
	document [imageName + "on"].src  = ImgRoot + imgOn;
	document [imageName + "off"]     = new Image;
	document [imageName + "off"].src = ImgRoot + imgOff;
}

function HideLayer(Name) {
	if (CloseTmr) { clearTimeout(CloseTmr); CloseTmr = null; }
	if (Name != LastLayer) {
		if (IE) {
			if (el = document.all[LastLayer + "Frame"]) {
				el.style.visibility = "hidden";
				showIEObject('SELECT');
				showIEObject('APPLET');
			}
		}
		else if (DOM) {
			if (el = $(LastLayer + "Frame")) {
				el.style.visibility = "hidden";
			}
		} 
		else if (NS4) {
			if (el = document.layers[LastLayer + "Frame"]) {
				el.visibility = "hide";
			}
		}
		LastLayer = Name;
	}
}

function ActiveImg(Name) {
	if (browserOK) {
		img = document [Name + "on"].src;
		document [Name].src = img;
		HideLayer(Name);
		if (IE) {
			if (el = document.all[Name + "Frame"]) {
				hideIEObject('SELECT', el);
				hideIEObject('APPLET', el);
				el.style.visibility = "visible";
			}
		}
		else if (DOM) {
			if (el = $(Name + "Frame")) {
				el.style.visibility = "visible";
			}
		}
		else if (NS4) {
			if (el = document.layers[Name + "Frame"]) {
				el.visibility = "show";
			}
		}
	}
}

function TimerClose() {
	if (!CloseTmr) CloseTmr = setTimeout('HideLayer()', 1000);
}

function TimerStop() {
	if (CloseTmr) { clearTimeout(CloseTmr); CloseTmr = null; }
}

function InactiveImg(Name) {
	if (browserOK) {
		img = document [Name + "off"].src;
		document [Name].src = img;
	}
}

function initPageFunctions() {
	if (typeof initLayers == 'function') {
		initLayers();
	}
	if (typeof initEditors == 'function') {
		initEditors();
	}
}

function tablelist_invert_selection(name) {
	var elements = document.forms[name].elements;
	for (var i = 0; i < elements.length; i++) {
		if (elements[i].type == 'checkbox' && elements[i].name != 'dummy') {
			elements[i].checked = !(elements[i].checked);
			tablelist_item_click(elements[i]);
		}
	}
}

function tablelist_item_click(check_box) {
	var item = $('item-' + check_box.value);
	item.className = check_box.checked ? 'tablelist-select' : 'tablelist-normal';
}

/** FOR IE only **************************************/

/* hides <select> and <applet> objects (for IE only) */
function hideIEObject(elemID, overDiv) {
	if (IE) {
		var overLeft  = overDiv.offsetLeft;
		var overRight = overDiv.offsetLeft + overDiv.offsetWidth;
		var overTop   = overDiv.offsetTop;
		var overDown  = overDiv.offsetTop + overDiv.offsetHeight;
		var alltags   = document.all.tags(elemID);
		for (i = 0; obj = alltags[i]; i++) {
			if (!obj || !obj.offsetParent) { continue; }
			// Find the element's offsetTop and offsetLeft relative to the BODY tag.
			objLeft   = obj.offsetLeft;
			objTop    = obj.offsetTop;
			objParent = obj.offsetParent;
			while (objParent.tagName.toUpperCase() != "BODY") {
				objLeft  += objParent.offsetLeft;
				objTop   += objParent.offsetTop;
				objParent = objParent.offsetParent;
			}
			objHeight = obj.offsetHeight;
			objWidth  = obj.offsetWidth;
			if (overRight <= objLeft);
			else if (overDown <= objTop);
			else if (overTop >= (objTop + objHeight + 5));
			else if (overLeft >= (objLeft + objWidth + 5));
			else {
				obj.style.visibility = "hidden";
			}
		}
	}
}

/* unhides <select> and <applet> objects (for IE only) */
function showIEObject(elemID) {
	if (IE) {
		var alltags = document.all.tags(elemID);
		for (i = 0; obj = alltags[i]; i++) {
			if (!obj || !obj.offsetParent) { continue; }
			obj.style.visibility = "";
		}
	}
}

/* Tab in form */

function _hideTabSection(tabid, secid) {
	if (tab = $(tabid)) tab.className = 'form-section';
	if (sec = $(secid)) sec.style.display = 'none';
}

function _showTabSection(tabid, secid) {
	if (tab = $(tabid)) tab.className = 'form-section-active';
	if (sec = $(secid)) sec.style.display = 'block';
}

function toggleTabSection(preTabName, preSecName, posNum, maxNum) {
	if (!DOM) return;
	for (i = maxNum; i > 0; i--) { _hideTabSection(preTabName + i, preSecName + i); }
	_showTabSection(preTabName + posNum, preSecName + posNum);
}

function activateBlock(ctrObj, blockName) {
	if (!DOM) return;
	if (obj = $(blockName)) obj.style.display = (ctrObj.checked ? 'block' : 'none');
}

function $(id) {
	return document.getElementById(id);
}

function parseJson(data) {
	if (data.substring(0,1) != '{') {
		return { status: 0, data: data.length ? data : 'Unspecified error' };
	}
	return eval('(' + data + ');');
}

function absolutePosition(el) {
	var sLeft = 0, sTop = 0;
	var isDiv = /^div$/i.test(el.tagName);
	if (isDiv && el.scrollLeft) {
		sLeft = el.scrollLeft;
	}
	if (isDiv && el.scrollTop) {
		sTop = el.scrollTop;
	}
	var r = { x: el.offsetLeft - sLeft, y: el.offsetTop - sTop };
	if (el.offsetParent) {
		var tmp = absolutePosition(el.offsetParent);
		r.x += tmp.x;
		r.y += tmp.y;
	}
	return r;
}

function sruComplete(req) {
	var ret = parseJson(req.responseText);
	if (typeof ret['status'] == 'undefined' || ret['status'] == 0) {
		alert('Error!\n' + ret['data']);
		return;
	}
	var uid    = ret['id'];
	var data   = ret['data'];
	var reload = data['reload'];
	var text   = data['text'];
	for (var div in text) {
		var val = text[div];
		if ($(div) && val) {
			if (div == 'panel-dialog') hideIEObject('SELECT');
			Element.update(div, val);
			if (div == 'panel-dialog') {
				$('panel-dialog').style.width  = '';
				dialogWindow = new Lightbox.base('panel-dialog', { closeOnOverlayClick : false });
			}
		}
//		else {
//			alert('sruComplete: Not exists div "' + div + '"!');
//		}
	}
	if (data['execute']) {
		eval(data['execute']);
	}
	if (data['msg']) {
		if (data['msg'].length == 2) DisplayMessage(data['msg'][0], data['msg'][1]);
	}
	if (reload) {
		for (var i = 0; i < reload.length; i++) {
			if (reload[i]) {
				sru(reload[i]);
			}
		}
	}
}

function sru(uid) {
	var status = 0;
	var error  = '';
	var req = new Ajax.Request(AppAjaxPath + uid, {
		method: 'post',
		parameters: (arguments.length > 1 ? 'eval=' + arguments[1] + '&PrintPage=' : 'PrintPage='),
		onFailure: function() { alert('NetTeam Alert!\nonFailure Error!'); },
		onException: function(re, ex) {
			error = (ex.name == 'NS_ERROR_NOT_AVAILABLE') ? 'Brak połączenia z serwerem!' : 'Nieznany (' + ex.name + ')';
		},
		onSuccess: function(req) {
			status = 1;
			sruComplete(req);
		},
		onComplete: function() {
			if (status == 0) DisplayMessage('Wystąpił błąd: ' + error, 'crit');
		}
	});
}
