if (typeof(DEBUG) == "undefined") {
	var DEBUG = false;
}

function include(filename) {
	var script = document.createElement('script');
	script.src = WEB_URL+'/js/'+filename+'.js';
	script.type = 'text/javascript';
	document.documentElement.firstChild.appendChild(script);
}

function addOnLoadEvent(f) {
	if(window.addEventListener){
		window.addEventListener("load", f, false);
	} else if(window.attachEvent) {
		window.attachEvent("onload", f);
	} else {
		if (window.onload) {
			var old = window.onload;
			window.onload = function () {
				old();
				f();
				}
		} else {
			window.onload = f;
		}
	}
}

function cursorPosition(e) {
	var pos = new Array();
	if (!e) var e = window.event;
	if (e.pageX || e.pageY) {
		pos['x'] = e.pageX;
		pos['y'] = e.pageY;
	} else if (e.clientX || e.clientY) {
		pos['x'] = e.clientX + document.body.scrollLeft
				+ document.documentElement.scrollLeft;
		pos['y'] = e.clientY + document.body.scrollTop
				+ document.documentElement.scrollTop;
	}
	return pos;
}

function windowHeight() {
	return (window.innerHeight)?window.innerHeight:document.documentElement.clientHeight;
}


/********************************************************/
/*					Support functions					*/
/********************************************************/
addOnLoadEvent(function(){ include('lang'); });

var checkingRules = new Array();

function checkForm(id){
  var msg = HF_Lang.BAD_FORM_INPUT;
  var result = true;

  for(i in checkingRules[id]) {
	var rule = checkingRules[id][i];
	if (rule.rule) {
	  eval("var r = (" + rule.rule + ");");
	  if (!r) {
		msg += "\n  - " + rule.description;
		result = false;
	  }
	} else {
	  if (document.getElementById(rule.element) == null) { 	  // radiobox
		  if (document.getElementById(rule.element+"_1") != null) {
			var i = 0;
			var el = null;
			var checked = false;
			while((el = document.getElementById(rule.element+"_" + ++i)) != null) {
			  if (el.checked) {
				checked = true;
				if (!el.value.match(new RegExp(rule.regex))) {
				  msg += "\n  - ";
				  if (rule.description != "")
					msg += rule.description;
				  else
					msg += HF_Lang.INVALID_VALUE_FOR + ": " + document.getElementById(rule.element + "_label").innerHTML.replace(': *', '').replace(':', '');
				  result = false;
				}
				break;
			  }
			}
			if (!checked && !"".match(new RegExp(rule.regex))) {
			  msg += "\n  - ";
			  if (rule.description != "")
				msg += rule.description;
			  else
				msg += HF_Lang.INVALID_VALUE_FOR + ": " + document.getElementById(rule.element + "_label").innerHTML.replace(': *', '').replace(':', '');
			  result = false;
			}
		  }
	  } else if (document.getElementById(rule.element).type == "checkbox") { // checkbox
	  	var el = document.getElementById(rule.element);
	  	if ((!el.checked || !el.value.match(new RegExp(rule.regex))) && !"".match(new RegExp(rule.regex))) {
		  msg += "\n  - ";
		  if (rule.description != "")
			msg += rule.description;
		  else
			msg += HF_Lang.INVALID_VALUE_FOR + ": " + document.getElementById(rule.element + "_label").innerHTML.replace(': *', '').replace(':', '');
		  result = false;
		}
	  } else if (document.getElementById(rule.element).type == "textarea") { // textarea
	  	var el = document.getElementById(rule.element);
		if (!document.getElementById(rule.element).value.replace(/\n/g, "").match(new RegExp(rule.regex))) {
		  msg += "\n  - ";
		  if (rule.description != "")
			msg += rule.description;
		  else
			msg += HF_Lang.INVALID_VALUE_FOR + ": " + document.getElementById(rule.element + "_label").innerHTML.replace(': *', '').replace(':', '');
		  result = false;
		}
	  } else { // other inputs
		if (!document.getElementById(rule.element).value.match(new RegExp(rule.regex))) {
		  msg += "\n  - ";
		  if (rule.description != "")
			msg += rule.description;
		  else
			msg += HF_Lang.INVALID_VALUE_FOR + ": " + document.getElementById(rule.element + "_label").innerHTML.replace(': *', '').replace(':', '');
		  result = false;
		}
	  }
	}
  }
  if (!result)
	alert(msg);

  return result;
}



/********************************************************/
/*			Support functions - "design" style			*/
/********************************************************/
var isHrefClick=false;

//Hideline the object
function Hideline(obj, hideline) {
  if (hideline){
	obj.className += " hidelined";
  }else{
	obj.className = obj.className.replace(" hidelined", " ");
  }
}

// Send confirmed (confirmed=1) request to opener window and close current window,
// if user confirm message
function ConfirmOpenerLink(linkObj, message) {
  var confirmed = confirm(message);
  if (confirmed){
	opener.location = linkObj.href+'&confirmed=1';
	window.close();
  }
  return false;
}

// Send confirmed (confirmed=1) request,
// if user confirm message
function ConfirmLink(linkObj, message) {
  var confirmed = confirm(message);
  if (confirmed){
	document.location = linkObj.href+'&confirmed=1';
  }
  return false;
}

// Open popup window
function PopupLink(link, resizable) {
  var _width = screen.availWidth, _height = screen.availHeight;
  var my_left = 0, my_top = 0;
  var my_width = 800;
  var my_height = 400;

  if (_width > my_width) my_left = (_width-my_width)/2;
  if (_height > my_height) my_top = (_height-my_height)/2;

  return !open(link, "", "toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars="+(resizable?"yes":"no")+",resizable="+(resizable?"yes":"no")+",copyhistory=no,top="+my_top+",left="+my_left+",width="+my_width+",height="+my_height);
}


// Set value to openner object
function setToOpener(objId, val, closeWindow, linkType, originalUrl) {
	if (typeof(closeWindow) == "undefined")
		closeWindow = true;

	// To FCK wysiwyg editor
	if(objId == "___editor___") {
		window.opener.SetUrl('/['+linkType+':'+val+']');
	} else if(objId == "___editorFiltered___") {
		url = '/['+linkType+':'+val+']';

		window.opener.parent.opener.parent.FCKFilterStringArray[originalUrl] = url;
		window.opener.SetUrl(originalUrl);
	} else {
		opener.document.getElementById(objId).value = val;
		if (opener.document.getElementById(objId).onchange)
			opener.setTimeout("document.getElementById('"+objId+"').onchange()", 1);
	}
	
	if (closeWindow)
		window.close();
	return false;
}



/********************************************************/
/*				CSS Class based functions				*/
/********************************************************/
// Adding some functions to "CSS marked" objects

function addHideline() {
  if (!document.getElementsByTagName) return false;
  var rows = document.getElementsByTagName("tr");
  for (var i=0; i < rows.length; i++) {
    if (rows[i].className.match("oddRow|evenRow")) {
      rows[i].onmouseover = function() { Hideline(this, true); }
      rows[i].onmouseout = function() { Hideline(this, false); }
    }
  }
}

function addIsHrefClick() {
  if (!document.getElementsByTagName) return false;
  var rows = document.getElementsByTagName("tr");
  for (var i=0; i < rows.length; i++) {
	if (rows[i].className.match("oddRow|evenRow")) {
	  var hrefs = rows[i].getElementsByTagName("a");
	  for (var ii=0; ii < hrefs.length; ii++) {
		if (!hrefs[ii].onclick) {
		  hrefs[ii].onclick = function() {isHrefClick=true;};
		} else {
		  hrefs[ii].onclickOriginal = hrefs[ii].onclick;
		  hrefs[ii].onclick = function(event) { isHrefClick=true; return this.onclickOriginal(event); };
		}
	  }

	  var forms = rows[i].getElementsByTagName("form");
	  for (var ii=0; ii < forms.length; ii++) {
		if (!forms[ii].onclick) {
		  forms[ii].onclick = function() {isHrefClick=true;};
		} else {
		  forms[ii].onclickOriginal = forms[ii].onclick;
		  forms[ii].onclick = function(event) { isHrefClick=true; return this.onclickOriginal(event); };
		}
	  }
	}
  }
}

function addConfirmLink() {
  if (!document.getElementsByTagName) return false;
  var hrefs = document.getElementsByTagName("a");
  for (var i=0; i < hrefs.length; i++) {
	if (hrefs[i].className.match("confirmLink")) {
	  var msg = ((hrefs[i].title!="")?hrefs[i].title:hrefs[i].text);
	  msg = msg.replace(/"/g, '\\"');
	  if (hrefs[i].className.match("openerLink")) {
		eval('hrefs[i].onclick = function() { return ConfirmOpenerLink(this, "' + msg + '?");};');
	   } else {
		eval('hrefs[i].onclick = function() { return ConfirmLink(this, "' + msg + '?");};');
	   }
	}
  }
}

function addPopupLink() {
  if (!document.getElementsByTagName) return false;
  var hrefs = document.getElementsByTagName("a");
  for (var i=0; i < hrefs.length; i++) {
	if (hrefs[i].className.match("popupWindow")) {
	  eval('hrefs[i].onclick = function() { return PopupLink("'+hrefs[i]+'"); }');
	} else if (hrefs[i].className.match("popupImage")) {
	  eval('hrefs[i].onclick = function() { return PopupLink("'+hrefs[i]+'.html", true); }');
	} else if (hrefs[i].className.match("resizablePopupWindow")) {
	  eval('hrefs[i].onclick = function() { return PopupLink("'+hrefs[i]+'", true); }');
	} else if (hrefs[i].className.match("blankWindow")) {
	  eval('hrefs[i].onclick = function() { return !window.open("'+hrefs[i]+'"); }');
	}
  }
}

function addButtons() {
  if (!document.getElementsByTagName) return false;
  var hrefButtons = document.getElementsByTagName("a");
  for (var i=0; i < hrefButtons.length; i++) {
    if (hrefButtons[i].className.match("button")) {
      if (navigator.userAgent.indexOf('Opera') < 0) {
		  var button = document.createElement('button');
		  button.innerHTML = hrefButtons[i].innerHTML;
		  eval('button.onclick = function() {document.location = "' + hrefButtons[i].href + '";};');

		  hrefButtons[i].parentNode.replaceChild(button, hrefButtons[i]);
	  } else {
		  var form = document.createElement('form');
		  form.method = "post";
		  eval('form.action = "' + hrefButtons[i].href + '";');

		  var submit = document.createElement('input');
		  submit.type = "submit";
		  submit.value = hrefButtons[i].innerHTML;
		  form.appendChild(submit);

		  hrefButtons[i].parentNode.replaceChild(form, hrefButtons[i]);
	  }
	  i--;
    }
  }
}

function addLeftMenuColapsing() {
  if (!document.getElementById('left_menu')) return false;
  if (!document.getElementsByTagName) return false;
  var menuHeads = document.getElementById('left_menu').getElementsByTagName("h4");
  for (var i=0; i < menuHeads.length; i++) {
	var ul = menuHeads[i].nextSibling;
	while (!ul.tagName || !ul.tagName.toLowerCase().match("ul")) {
	  ul = ul.nextSibling;
	}
	if (ul.className.match("collapsed|expanded")) {
	  menuHeads[i].onclick = function() {
		var obj = this.nextSibling;
		while (!obj.tagName || !obj.tagName.toLowerCase().match("ul")) {
		  obj = obj.nextSibling;
		}
		obj.style.display=(obj.style.display=='none')?'':'none';
	  };

	  if (ul.className.match("collapsed")) {
		ul.style.display = 'none';
	  }
	}
  }
}

function addSortCollAnimation() {
  if (!document.getElementsByTagName) return false;
  var headColls = document.getElementsByTagName("th");
  for (var i=0; i < headColls.length; i++) {
	if (headColls[i].className.match("sortableColl")) {
	  var imgObj = headColls[i].firstChild.lastChild;
	  if (imgObj.tagName && imgObj.tagName == "img") {
		if (headColls[i].firstChild.lastChild.src.match('desc')) {
		  headColls[i].firstChild.onmouseover = function() {
			this.lastChild.src = this.lastChild.src.replace('desc', 'asc');
			this.lastChild.alt = HF_Lang.TABLE_SORT_ASC;
		  };
		} else if (headColls[i].firstChild.lastChild.src.match('asc')) {
		  headColls[i].firstChild.onmouseover = function() {
			this.lastChild.src = this.lastChild.src.replace('asc', 'desc');
			this.lastChild.alt = HF_Lang.TABLE_SORT_DESC;
		  };
		}
		if (headColls[i].firstChild.lastChild.src.match('asc')) {
		  headColls[i].firstChild.onmouseout = function() {
			this.lastChild.src = this.lastChild.src.replace('desc', 'asc');
			this.lastChild.alt = HF_Lang.TABLE_SORT_ASC;
		  };
		} else if (headColls[i].firstChild.lastChild.src.match('desc')) {
		  headColls[i].firstChild.onmouseout = function() {
			this.lastChild.src = this.lastChild.src.replace('asc', 'desc');
			this.lastChild.alt = HF_Lang.TABLE_SORT_DESC;
		  };
		}
		headColls[i].firstChild.onclick = function() {
		  this.onmouseout = null;
		  this.onmouseover = null;
		};
	  }
	}
  }
}

function addJsSelectBox() {
	if (!document.getElementsByTagName) return false;
	var divs = document.getElementsByTagName("div");
	for (var i=0; i < divs.length; i++) {
		if (divs[i].className.match("jsSelectBox")) {
			var select = document.createElement("select");
			select.onchange = function() {
				document.location = this.value;
			};
			var bs = divs[i].getElementsByTagName("b");
			var option = document.createElement("option");
			option.innerHTML = bs[0].innerHTML;
			option.style.fontWeight = "bold";
			select.appendChild(option);

			var hrefs = divs[i].getElementsByTagName("a");
			for (var ii=0; ii < hrefs.length; ii++) {
				var option = document.createElement("option");
				option.innerHTML = hrefs[ii].innerHTML;
				option.value = hrefs[ii].href;
				select.appendChild(option);
			}
			
			divs[i].innerHTML = "";
			divs[i].appendChild(select);
		}
	}
}

function addHTMLEditor() {
	if (!document.getElementsByTagName) return false;
	var textareas = document.getElementsByTagName("textarea");
	for (var i=0; i < textareas.length; i++) {
		if (textareas[i].className.match("HTMLEditor")) {
			var textArea = textareas[i];

			var sBasePath = WEB_URL + '/js/fck/';
			var oFCKeditor = new FCKeditor(textArea.id, textArea.style.width, textArea.style.height);
			oFCKeditor.BasePath     = sBasePath;
			oFCKeditor.Config['CustomConfigurationsPath'] = sBasePath + 'config_general.js';
			if (navigator.userAgent.indexOf('Opera') < 0) {
				oFCKeditor.ToolbarSet = 'Default';
			}
			// Drop down menus are not suitable with Opera
			else {
				oFCKeditor.ToolbarSet = 'Opera';
			}


			if (typeof(textArea.form.HTMLEditorOnSubmitOriginal) == "undefined") {
				if (typeof(FCKFilterStringArray) == "undefined") {
					FCKFilterStringArray = new Array();
				}

				textArea.form.HTMLEditorOnSubmitOriginal = textArea.form.onsubmit;
				textArea.form.onsubmit = function(e) {
					var HTMLEditors = this.getElementsByTagName("textarea");
					for (var ii=0; ii < HTMLEditors.length; ii++) {
						if (HTMLEditors[ii].className.match("HTMLEditor")) {
							var textAreaObj = document.getElementById(HTMLEditors[ii].id + "___Frame").contentWindow.document.getElementsByTagName("iframe");
							textAreaObj = textAreaObj[0].contentDocument.firstChild.lastChild;
							var textAreaHTML = textAreaObj.innerHTML;

							for(filter in FCKFilterStringArray) {
								eval('textAreaHTML = textAreaHTML.replace(/' + filter.replace(/\//g, '\\/') + '/g, "' + FCKFilterStringArray[filter] + '");');
							}
							textAreaObj.innerHTML = textAreaHTML;
						}
					}

					result = this.HTMLEditorOnSubmitOriginal(e);

					if (!result) {
						var HTMLEditors = this.getElementsByTagName("textarea");
						for (var ii=0; ii < HTMLEditors.length; ii++) {
							if (HTMLEditors[ii].className.match("HTMLEditor")) {
								var textAreaObj = document.getElementById(HTMLEditors[ii].id + "___Frame").contentWindow.document.getElementsByTagName("iframe");
								HTMLEditorReplaceUris(textAreaObj[0].contentDocument.firstChild.lastChild);
							}
						}
					}

					return result;
				}
			}

			oFCKeditor.ReplaceTextarea();
			
/*
			// NOT NEEDED NOW - it's done in HF_Form class
			eval('setTimeout(function() {'
				+ ' var textAreaObj = document.getElementById(textArea.id + "___Frame").contentWindow.document.getElementsByTagName("iframe");'
				+ ' HTMLEditorReplaceUris(textAreaObj[0].contentWindow.document.firstChild.lastChild);'
				+ '}, 5000);');
*/
		}
	}
}

function HTMLEditorReplaceUris(editorContent) {
	var editorContentHTML = editorContent.innerHTML.replace(/%5B/g, "[").replace(/%5D/g, "]");
	for(filter in FCKFilterStringArray) {
		eval('editorContentHTML = editorContentHTML.replace(/' + FCKFilterStringArray[filter].replace(/\//g, '\\/').replace(/\[/g, '\\[').replace(/\]/g, '\\]') + '/g, "' + filter + '");');
	}
	editorContent.innerHTML = editorContentHTML;
}


/********************************************************/
/*	Call CSS Class based functions after window on load	*/
/********************************************************/
window.onload = function() {
	addHideline();
	addConfirmLink();
	addPopupLink();
	addIsHrefClick();
	addButtons();
	addLeftMenuColapsing();
	addSortCollAnimation();
	addJsSelectBox();

	// Should be last - take log time
	addHTMLEditor();
}



/***********************************************************
funkce createCookie a readCookie vytvoril Peter-Paul Koch
http://www.quirksmode.org/
***********************************************************/
var Cookies = {
	init: function () {
		var allCookies = document.cookie.split('; ');
		for (var i=0;i<allCookies.length;i++) {
			var cookiePair = allCookies[i].split('=');
			this[cookiePair[0]] = cookiePair[1];
		}
	},
	create: function (name,value,days) {
		if (days) {
			var date = new Date();
			date.setTime(date.getTime()+(days*24*60*60*1000));
			var expires = "; expires="+date.toGMTString();
		}
		else var expires = "";
		document.cookie = name+"="+value+expires+"; path=/";
		this[name] = value;
	},
	erase: function (name) {
		this.create(name,'',-1);
		this[name] = undefined;
	}
};
addOnLoadEvent(function(){Cookies.init()});

function createCookie(name, value, days) {
	Cookies.create(name, value, days);
}
function readCookie(name) {
	return Cookies[name];
}
