$.ajaxSetup({
    cache: false
});
/* Dom helpers */
function element(tagName) {
	return document.createElement(tagName);
}
function textNode(content) {
	return document.createTextNode(content);
} /**/
function refreshTimer() {
						timer = setTimeout('location.reload();',1000*20);
}

/* User agent detector */
UA = function() {
    var o={ ie:0, opera:0, gecko:0, webkit:0
    };
    var ua=navigator.userAgent, m;
	if ((/KHTML/).test(ua)) {
        o.webkit=1;
    }
    m=ua.match(/AppleWebKit\/([^\s]*)/);
    if (m&&m[1]) {
        o.webkit=parseFloat(m[1]);
    }
    if (!o.webkit) { // not webkit
        m=ua.match(/Opera[\s\/]([^\s]*)/);
        if (m&&m[1]) {
            o.opera=parseFloat(m[1]);
        } else { // not opera or webkit
            m=ua.match(/MSIE\s([^;]*)/);
            if (m&&m[1]) {
                o.ie=parseFloat(m[1]);
            } else { // not opera, webkit, or ie
                m=ua.match(/Gecko\/([^\s]*)/);
                if (m) {
                    o.gecko=1; // Gecko detected, look for revision
                    m=ua.match(/rv:([^\s\)]*)/);
                    if (m&&m[1]) {
                        o.gecko=parseFloat(m[1]);
                    }
                }
            }
        }
    }
    return o;
}();
/* end of UA detector */

function showHide(toShow) {
	var n = pocetZalozek;
	var x = toShow;

	for (i = 1; i <= n; i++) {
		var name = "layer" + i;
		var obj = document.getElementById('' + name);
		var a = "a" + i;
		var objA = document.getElementById(a);

        if(obj != null && objA != null){
            if (i != x) {
                obj.style.display = 'none';
                objA.className = '';
                //objA.style.backgroundColor = '#F0F0F0';
            }
            else {
                obj.style.display = '';
                objA.className = 'selected';
                //objA.style.backgroundColor = '#FF9900';
            }
        }
	}
}

function openWindow(url, config){
    window.taskpoolPopUpWindowName = "taskpoolPopUp_"+Math.round(Math.random()*100000);
    window.open(url, window.taskpoolPopUpWindowName, config);
}
function openWinSmall(url) {
    openWindow(url, "toolbar=no,width=400, height=400,directories=no,status=no,scrollbars=yes,resizable=yes,menubar=no,top=50");
}
function openWin(url) {
	openWindow(url, "toolbar=no,width=580, height=600,directories=no,status=no,scrollbars=yes,resizable=yes,menubar=no,top=50");
}
function openWinM(url) {
	openWindow(url, "toolbar=no,width=760, height=600,directories=no,status=no,scrollbars=yes,resizable=yes,menubar=no,top=50");
}
function openWinE(url) {
	openWindow(url, "toolbar=no,width=860, height=600,directories=no,status=no,scrollbars=yes,resizable=yes,menubar=no,top=50");
}
function openWinWide(url) {
    openWindow(url, "toolbar=no,width=1040, height=600,directories=no,status=no,scrollbars=yes,resizable=yes,menubar=no,top=50");
}
function openEditContact(url) {
    openWindow(url, "toolbar=no,width=580, height=650,directories=no,status=no,scrollbars=yes,resizable=yes,menubar=no");
}
function openWinHelp(url) {
	openWindow(url, "toolbar=no,width=800, height=500,directories=no,status=no,scrollbars=yes,resizable=yes,menubar=no");
}
function openFullscreenWin(page){
    var w = screen.width;
    var h = screen.height;
    if (ie) {      // mirne zmenseni okna v IE
      w = w-10;
      h = h-70;
    }
    openWindow(page, 'toolbar=no,width='+w+',height='+h+',left=0,top=0,resizable=yes');
    return false;
}
// layery pro exporty a ostatni akce

var ordTimer;
var otherActionsTimer;

function showMenu(div) {
    var jCont = jQuery('#'+div);
    var jFooter = jQuery('#footer');
    if((jFooter.offset().top + jFooter.outerHeight()) < (jCont.offset().top+jCont.outerHeight())){
        jCont.css("top","-"+(jCont.outerHeight()-35)+"px");
    }
    jCont.css('display','block');
}

function hideDivDelayed(div) {
	ordTimer = hideDivDelayedTimer(div);
}

function hideDivDelayedTimer(div) {
    var func = 'hideDivMenu(\'' + div + '\'); ';
    return setTimeout (func, 1500);
}

function hideDivMenu(div) {
    jQuery('#'+div).css('display','none');
}
// -----------------------------------------

YAHOO.namespace('example.dom');
function setXyTooltip(div1, div2) {
	var x = YAHOO.util.Dom.getX(div1);
	var y = YAHOO.util.Dom.getY(div1);
	YAHOO.util.Dom.setX(div2, x);
	YAHOO.util.Dom.setY(div2, y+10);
}

function showToolTipHelp(div1, div2) {
	showMenu(div2);
    setXyTooltipHelp(div1, div2);
    clearTimeout(ordTimer);
}

function setXyTooltipHelp(div1, div2) {
	var x = YAHOO.util.Dom.getX(div1) - document.getElementById(div2).offsetWidth;
	var y = YAHOO.util.Dom.getY(div1);
	YAHOO.util.Dom.setX(div2, x);
	YAHOO.util.Dom.setY(div2, y+15);
}

var ie = (navigator.userAgent.toLowerCase().indexOf("msie") != -1) && (navigator.userAgent.toLowerCase().indexOf("opera") == -1);

function cssExpr() {
	if (ie) {
		//var viewH = YAHOO.util.Dom.getViewportHeight();

		var viewW = document.documentElement.clientWidth ? document.documentElement.clientWidth : document.body.clientWidth;
		var minusW = 92; // zakladni zmenseni obsahove casti
		if (document.getElementById('mainMenuPanel')) { //pokud je na strance leve menu, zmensi se hlavni obsah vice
			minusW = 115;
		}
		if (document.getElementById('taskColorPanel') || document.getElementById('taskColorPanelFixed')) {
			//alert("je taskColorPanel/Fixed");
			var tcp;
			var name;
			if (document.getElementById('taskColorPanel')) {
				tcp = document.getElementById('taskColorPanel');
				name = "taskColorPanel";
			} else if (document.getElementById('taskColorPanelFixed')) {
				tcp = document.getElementById('taskColorPanelFixed');
				name = "taskColorPanelFixed";
			}

			if (document.getElementById('mainMenuPanel')) { //pro zobrazen� v administraci
				minusW = 125;
			} else {
				minusW = 92;
			}
			var widthTcp = tcp.offsetWidth;
			YAHOO.util.Dom.setStyle('pageContent', 'width', (viewW - minusW) + 'px');
			YAHOO.util.Dom.setStyle(name, 'width', (viewW - minusW) + 'px');
		}

		YAHOO.util.Dom.setStyle('pageContent', 'width', (viewW - minusW + 15) + 'px');

		var fixTopH = document.getElementById('fixTop').offsetHeight;
		var fixBottomH = document.getElementById('fixBottom').offsetHeight;

		var viewH = document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight;

		var minusH = fixBottomH + fixTopH + 14;
		var h = viewH - minusH;
		YAHOO.util.Dom.setStyle('page', 'height', h + 'px');
		YAHOO.util.Dom.setStyle('page', 'width', (viewW - minusW + 43) + 'px');

		YAHOO.util.Dom.setStyle('pageNoMargins', 'top', fixTopH + 'px');
		YAHOO.util.Dom.setStyle('pageNoMargins', 'height', (viewH - fixBottomH - fixTopH) + 'px');

		YAHOO.util.Dom.setStyle('fixTopCopy', 'height', fixTopH + 'px');
		YAHOO.util.Dom.setStyle('fixBottomCopy', 'height', fixBottomH + 'px');

		//alert("taskColorPanel/Fixed: " + (viewW - 60) + ", " + viewW + ", " + minusW + "\n" + "pageContent: " + (viewW - minusW) + "\n");
	}
}

if (ie) {
	if (window.attachEvent) {
		window.attachEvent("onload", cssExpr);
		window.attachEvent("onresize", cssExpr);
	} else {
		window.addEventListener("load", cssExpr, false);
		window.addEventListener("resize", cssExpr, false);
	}
}

function executeAjaxJS(http_request){
	eval(http_request.responseText);
}

//////////////////////////////////////////////////////////////
function createCookie(name,value,seconds) {
	if (seconds) {
		var date = new Date();
		date.setTime(date.getTime()+(seconds*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}
function convertHyperlinks() {
	var elements = YAHOO.util.Dom.getElementsByClassName('convertURLs');
	for (var i = 0; i < elements.length; i++) {
		var HLregexp = new RegExp(/(((ftp|http|https):\/\/)|(www\.))(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?([\/\w#?+=%@])/);
		output = elements[i].innerHTML.replace(HLregexp, function(match) { return makeLink(match) });
		elements[i].innerHTML = output;
	}
}
function makeLink(URL) {
	var proto = 'http://';
	if (URL.match(/^(ftp|http|https):\/\//)) {
		proto = URL.substring(0, URL.indexOf("//")+2);
		URL = URL.substring(URL.indexOf("//")+2);
	}
	var text = URL;
	if (URL.length > 50) {
		server = URL.substring(0, URL.indexOf("/"));
		path = URL.substring(URL.lastIndexOf("/") + 1);
		if (path.length > 30) path = path.substring((path.length - 20));
		var imp = (URL.indexOf("/") == URL.lastIndexOf("/")) ? "/..." : "/.../";
		text = server + imp + path;
	}
	return '<a href="' + proto + URL + '" title="' + proto + URL + '">' + proto + text + '</a>';
}
if (YAHOO.util.Event) { YAHOO.util.Event.on(window, "load", convertHyperlinks); }
function convertTextHyperlinks (text) {
	var output;
	var HLregexp = /(((ftp|http|https):\/\/)|(www\.))(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?([\/\w#?+=%@])/g;
	output = text.replace(HLregexp, function(match) { return makeLink(match) });
	return output;
}
function nl2br(str){
	return str.replace(/\r\n|\n|\r/g,'<br/>');
}
function resizePopup() {
	if (!window.opener) return;
	var docHeight = YAHOO.util.Dom.getDocumentHeight();
	var viewportHeight = YAHOO.util.Dom.getViewportHeight();
	if (UA.ie > 0) {
		if (!YAHOO.util.Dom.get('pageContent')) return;
		if (!YAHOO.util.Dom.get('pageNoMargins')) return;
		var diff = YAHOO.util.Dom.get('pageContent').offsetHeight - YAHOO.util.Dom.get('pageNoMargins').offsetHeight;
		if (diff > 0 && (screen.height - docHeight - diff) > 120) {
			self.resizeTo(YAHOO.util.Dom.getDocumentWidth(), docHeight+diff+90);
		}
	} else {
	if (docHeight <= viewportHeight) {
		return;
	}
	if ((screen.height - docHeight) > 120 && !window.opera) {
			self.resizeTo(YAHOO.util.Dom.getDocumentWidth()+8, docHeight+59);
		}
	}
}
if (YAHOO.util.Event && window.opener) { YAHOO.util.Event.on(window, "load", resizePopup); }
/* Log object */
var Log = {
	add: function(message) {
		if (typeof console === "object") console.info(message);
	}
}
if (YAHOO.util.Event) { YAHOO.util.Event.on(window, "load", Log.createConsole); }
/* Useful array functions */
Array.prototype.removeItem = function(itemToRemove) {
	var j = 0;
	while (j < this.length) {
		if (this[j] == itemToRemove) {
			this.splice(j, 1);
		} else {
			j++;
		}
	}
}
function arrayRemoveItem(array, itemToRemove) {
	var j = 0;
	while (j < array.length) {
		if (array[j] == itemToRemove) {
			array.splice(j, 1);
		} else {
			j++;
		}
	}
	return array;
}
Array.prototype.valueExists = function (value) {
	var j = 0;
	while (j < this.length) {
		if (this[j] == value) return true;
		j++;
	}
	return false;
}
function arrayValueExists (value) {
	var j = 0;
	while (j < array.length) {
		if (array[j] == value) return true;
		j++;
	}
	return false;
}
function strReplace (search, replace, subject)
{
  var result = "";
  var  oldi = 0;
  for (i = subject.indexOf (search)
     ; i > -1
     ; i = subject.indexOf (search, i))
  {
    result += subject.substring (oldi, i);
    result += replace;
    i += search.length;
    oldi = i;
  }
  return result + subject.substring (oldi, subject.length);
}
/* Loader object */
var LoadedElement = {};
var Loader = {
	startTime: false,
	windowLoaded: false,
	onLoadComplete: null,
	config: new Array, // stored paths of scripts
	stylesToLoad: new Array,
	toLoad: new Array, // pre-window load buffer
	loading: new Array,
	loaded: new Array,
	actions: new Array,
	isComplete: true,
	register: function(name) {
		if (typeof YAHOO == "undefined") return;
		YAHOO.register(name, LoadedElement, {}); // register custom non-YUI scripts into register
	},
	isLoaded: function (name) {
		return eval('typeof YAHOO.env.modules["' + name + '"] === "object"');
	},
	addCSSFile: function (path) {
		var element = document.createElement("link");
		element.setAttribute("type","text/css");
		element.setAttribute("rel","stylesheet");
		element.setAttribute("href",path);
		document.getElementsByTagName("head")[0].appendChild(element);
	},
	addJSFile: function (path) {
		var element = document.createElement("script");
		element.setAttribute("type","text/javascript");
		element.setAttribute("src",path);
		document.getElementsByTagName("head")[0].appendChild(element);
	},
	check: function (name, iterator) {
		if (!iterator) iterator = 1;
		if (iterator > 500) { Loader.log("Unable to load: " + name); return; }
		if (!Loader.isLoaded(name)) {
			//Loader.log("checking for " + name);
			iterator++;
			setTimeout(function () { Loader.check(name, iterator); }, 40);
		} else {
			Loader.log("Loading " + name + " finished");
			Loader.loaded.push(name);
			Loader.loading.removeItem(name);
			Loader.loadNext();
		}
	},
	requireStyle: function(path) {
		Loader.stylesToLoad.push(path);
	},
	loadStyles: function() {
		if (Loader.stylesToLoad.length < 1) return;
		for (var i = 0; i < Loader.stylesToLoad.length; i++) {
			Loader.log("Loading CSS: " + Loader.stylesToLoad[i]);
			Loader.addCSSFile(Loader.stylesToLoad[i]);
		}
		Loader.stylesToLoad = new Array();
	},
	require: function (name, path) {
		Loader.config[name] = path;
		Loader.toLoad.push(name);
	},
	execute: function () {
		if (Loader.windowLoaded !== true) {
			YAHOO.util.Event.on(window, 'load', Loader.act);
		} else {
			Loader.act();
		}
	},
	act: function() {
		Loader.isComplete = false;
		Loader.startTime = new Date();
		Loader.loadStyles();
		Loader.loadNext();
	},
	loadNext: function() {
		if (Loader.toLoad.length < 1) {
			Loader.complete();
			return;
		}
		var name = Loader.toLoad.shift();
		Loader.log("loading " + name + " started");
		Loader.loading.push(name);
		Loader.addJSFile(Loader.config[name]);
		Loader.check(name);
	},
	complete: function() {
		Loader.isComplete = true;
		Loader.onLoadCompleteExecute();
	},
	onLoadCompleteExecute: function () {
		if (Loader.loaded.length > 0) {
			var now = new Date();
			var diff = now.getTime() - Loader.startTime.getTime();
			if (typeof Loader.onLoadComplete === 'function') {
				Log.add("executing onLoadComplete");
				Loader.onLoadComplete();
			}
			Loader.log("Loaded in " + diff + "ms");
		}
		Loader.fire();
	},
	fire: function () {
		for (var i=0; i<Loader.actions.length; i++) {
			var fnc = Loader.actions[i][0];
			var args = Loader.actions[i][1];
			fnc(args);
		}
		Loader.actions = new Array();
	},
	queue: function (func, args) {
		var data = new Array(func, args);
		Loader.actions.push(data);
	},
	log: function (value) {
		Log.add(value);
	}
}
//YAHOO.register('Loader', LoadedElement, {});
if (YAHOO.util.Event) {
YAHOO.util.Event.on(window, 'load', function() { Loader.windowLoaded = true; });
YAHOO.util.Event.on(window, 'load', function() { Log.windowLoaded = true; });
}
/* form submit handling */
var SubmitHandler = {
	isReady: false,
	init: function () {
		var shade = document.createElement("div");
		shade.setAttribute("id","shade");
		var loading = document.createElement("div");
		loading.setAttribute("id","sun");
		loading.innerHTML = '<img src="_images/loader.gif" width="32" height="32" />';
		document.body.insertBefore(loading, document.body.firstChild);
		document.body.insertBefore(shade, document.body.firstChild);
		SubmitHandler.isReady = true;
	},
	show: function () {
		if (!SubmitHandler.isReady) return true;
		var shade = YAHOO.util.Dom.get('shade');
		shade.style.width = YAHOO.util.Dom.getDocumentWidth() + 'px';
		shade.style.height = YAHOO.util.Dom.getDocumentHeight() + 'px';
		shade.style.display = 'block';

		var loading = YAHOO.util.Dom.get('sun');
		loading.style.display = 'block';
		loading.style.top =
			Math.ceil((YAHOO.util.Dom.getViewportHeight() - loading.offsetHeight)/2)
			+ YAHOO.util.Dom.getDocumentScrollTop()
			+ 'px';
		loading.style.left =
			Math.ceil((YAHOO.util.Dom.getViewportWidth() - loading.offsetWidth)/2)
			+ YAHOO.util.Dom.getDocumentScrollLeft()
			+ 'px';

	},
	hide: function () {
		YAHOO.util.Dom.get('shade').style.display = 'none';
        YAHOO.util.Dom.get('sun').style.display = 'none';
	},
	check: function (fnc) {
		if (!SubmitHandler.isReady) return true;
		var res = fnc();
		if (res == true) {
			SubmitHandler.show();
			return true;
		}
		return false;
	},
	run: function () {
		if (!SubmitHandler.isReady) return true;
		SubmitHandler.show();
		return true;
	}
}
if (YAHOO.util.Dom && YAHOO.util.Event && YAHOO.util.Dom.getDocumentScrollTop) {
	YAHOO.util.Event.on(window, 'load', SubmitHandler.init);
}
var More = {
	init: function () {
		if (typeof buttonClose == "undefined") return;
		var container = document.createElement("div");
		container.setAttribute("id","more_box_container");
		var box = document.createElement("div");
		box.className = "more_box";
		var close = document.createElement("a");
		var img = document.createElement("img");
		img.src = '_images/ext/cross.png';
		img.height = '16';
		img.width = '16';
		img.alt = buttonClose;
		close.appendChild(img);
		close.setAttribute("href","javascript:void(null);");
		close.className = 'closeCross';
		YAHOO.util.Event.on(close, 'click', More.hide);
		box.appendChild(close);
		var inner = document.createElement("div");
		inner.setAttribute("id","more_inner_box");
		box.appendChild(inner);
		container.appendChild(box);
		document.body.insertBefore(container, document.body.firstChild);
	},
	show: function (elId) {
		YAHOO.util.Dom.get('more_inner_box').innerHTML = YAHOO.util.Dom.get(elId).innerHTML;
		More.showShade();
		More.showBox();
	},
	showShade: function () {
		var shade = YAHOO.util.Dom.get('shade');
		shade.style.width = YAHOO.util.Dom.getDocumentWidth() + 'px';
		shade.style.height = YAHOO.util.Dom.getDocumentHeight() + 'px';
		shade.style.display = 'block';
	},
	hideShade: function () {
		var shade = YAHOO.util.Dom.get('shade');
		shade.style.display = 'none';
	},
	showBox: function () {
		YAHOO.util.Dom.get('more_box_container').style.display = 'block';
	},
	hide: function () {
		More.hideBox();
		More.hideShade();
	},
	hideBox: function () {
		YAHOO.util.Dom.get('more_box_container').style.display = 'none';
	}
}
if (YAHOO.util.Dom && YAHOO.util.Event && YAHOO.util.Dom.getDocumentScrollTop) {
	YAHOO.util.Event.on(window, 'load', More.init);
}
/* Calendars */
function addZero(number) {
	number = ''+number;
	return (number.length < 2) ? "0"+number : number;
}
function removeZero(number) {
	var firstChar = number.substring(0,1);
	return (firstChar == "0") ? number.substring(1) : number;
}
function initCalendar(args) { /* ID kontejneru pro kalendar */
	var ID = args.id;
	var overlay = new YAHOO.widget.Overlay(ID+"_calendarmenu");
    var cButton = new YAHOO.widget.Button({type: 'menu', container: ID, id: ID+"_button", menu: overlay, name: ID+"_buttonname"});
	cButton.on("click", onCalendarButtonClick);
}
function onCalendarButtonClick() {
	var overlay = this._menu;
	overlay.setBody(" ");
	overlay.body.id = this.get("id")+"_overlaybody";
	overlay.render(this.get("container"));
	overlay.align();

	var parentID = this.get("container");
	var rel = YAHOO.util.Dom.get(parentID).getAttribute("rel");
	var data = rel.split(" ");
	var inputID = data[0];
	var type = (data.length > 1) ? data[1] : "datetime";

	var oCalendar = new YAHOO.widget.Calendar(overlay.body.id+"_buttoncalendar", overlay.body.id);
    oCalendar.cfg.setProperty("start_weekday", 1);
    if (CalMonthLong && CalDayShort) {
		oCalendar.cfg.setProperty("MONTHS_LONG",CalMonthLong);
		oCalendar.cfg.setProperty("WEEKDAYS_SHORT",CalDayShort);
	}
	var input = YAHOO.util.Dom.get(inputID);
	if (!input) {
		input = document.getElementsByName(inputID).item(0);
	}
	var selDateTime = input.getAttribute("value");
	if (selDateTime) {
		var date = selDateTime.indexOf(" ") > 0 ? selDateTime.substring(0,selDateTime.indexOf(" ")) : selDateTime;
		var data = date.split(".");
		oCalendar.cfg.setProperty("selected", removeZero(data[0])+"/"+removeZero(data[1])+"/"+data[2], false);
	}

	oCalendar.render();
	oCalendar.changePageEvent.subscribe(function () {
        window.setTimeout(function () {
          	overlay.show();
        }, 0);
    });
	oCalendar.selectEvent.subscribe(function (p_sType, p_aArgs) {
        var aDate;
        if (p_aArgs) {
            aDate = p_aArgs[0][0];
			input.value = refreshInputValueForCalendar(inputID, aDate, input.value, type);
        }
        overlay.hide();

        // Trigger onchange event
        if (UA.ie) {
            var e = document.createEventObject();
            input.fireEvent('onchange', e);
        } else {
            var e = document.createEvent("Events");
            e.initEvent('change', true, true);
            input.dispatchEvent(e);
        }
    });
	this.unsubscribe("click", onCalendarButtonClick);
}

/**
 * Changes type of input bound to calendar object. Type can be date or datetime.
 * @param ID Id of bound input.
 * @param aDate Current date only input value in array [year, month, date]
 * @param inputValue Current input value.
 * @param type Wanted type.
 * @return New input value formatted according to wanted type.
 */
function refreshInputValueForCalendar(ID, aDate, inputValue, type) {
    if(ID) {
        ID = ID.indexOf("_calendar_container") > 0 ? ID : ID+'_calendar_container';
        //muze se online menit, je nutne nacist aktualni hodnotu
        var data = $('*[id="'+ID+'"]').attr('rel').split(" ");
        type = (data.length > 1) ? data[1] : "datetime";
    }
    var calVal = addZero(aDate[2])+"."+addZero(aDate[1])+"."+aDate[0];
    if (type == "date") {
        inputValue = calVal;
    } else if (type == "datetime") {
        if (inputValue != "" && inputValue.indexOf(" ") > 0) {
            inputValue = calVal + inputValue.substring(inputValue.indexOf(" "));
        } else {
            inputValue = calVal + " 00:00";
        }
    }
    return inputValue;
}

/**
 * Split date in string into array containing year, month and day.
 * @param dateString Parsed date in string.
 * @return Array containing year, month and day if string contains correct date, otherwise null.
 */
function splitDateInString(dateString) {
	if (dateString) {
		dateString = dateString.indexOf(" ") > 0 ? dateString.substring(0, dateString.indexOf(" ")) : dateString;
		var d = dateString.split(".");
        var result = null;
        if(d.length == 3) {
            /* remove 0 from start */
            d[0] = removeZero(d[0]);
            d[1] = removeZero(d[1]);
            d[2] = removeZero(d[2]);

            /* switch day and year */
            var tmp = d[0];
            d[0] = d[2];
            d[2] = tmp;

            if(parseInt(d[0]) >= 1 && parseInt(d[1]) >= 1 && parseInt(d[2]) >= 1) {
                switch(parseInt(d[1])){
                    case 1: case 3: case 5: case 7: case 8: case 10: case 12:
                        if(parseInt(d[1]) <= 31) {
                            result = d;
                        }
                        break;
                    case 2:
                        if(parseInt(d[1]) <= 29) {
                            result = d;
                        }
                        break;
                    case 1: case 4: case 6: case 9: case 11:
                        if(parseInt(d[1]) <= 30) {
                            result = d;
                        }
                        break;
                }
            }
        }
        return result;
	}
}

function initCalendar2(args) { /* ID kontejneru pro kalendar */
	var ID = args.id;
	//var overlay = new YAHOO.widget.Overlay(ID+"_calendarmenu");
	//var cButton = new YAHOO.widget.Button({type: 'menu', container: ID, label: 'Vyberte datum', id: ID+"_button", menu: overlay, name: ID+"_buttonname"});
	//cButton.on("click", onCalendarButtonClick);
    var cnt = YAHOO.util.Dom.get(ID);
    var btn = document.createElement('img');
    btn.setAttribute('id', ID + '_button');
    btn.src = '_js/yui2/button/assets/calendar_icon.gif';
    btn.setAttribute('alt','Calendar');
    cnt.appendChild(btn);
    var calMasterCnt = document.createElement('span');
    calMasterCnt.className = 'calendarMasterContainer';
    var calCnt = document.createElement('div');
    calCnt.setAttribute('id', ID + '_calendar_container');
    calCnt.className = 'calendarContainer';
    calMasterCnt.appendChild(calCnt);
    cnt.appendChild(calMasterCnt);
    var oCalendar = new YAHOO.widget.Calendar(ID + '_cal', ID + '_calendar_container');
    oCalendar.cfg.setProperty("start_weekday", 1);
    oCalendar.cfg.setProperty('close', true);
    if (CalMonthLong && CalDayShort) {
		oCalendar.cfg.setProperty("MONTHS_LONG",CalMonthLong);
		oCalendar.cfg.setProperty("WEEKDAYS_SHORT",CalDayShort);
	}

    var rel = cnt.getAttribute("rel");
	var data = rel.split(" ");
	var inputID = data[0];

    var input = YAHOO.util.Dom.get(inputID);
	if (!input) {
		input = document.getElementsByName(inputID).item(0);
	}
	var selDateTime = input.getAttribute("value");
	if (selDateTime) {
		var date = selDateTime.indexOf(" ") > 0 ? selDateTime.substring(0,selDateTime.indexOf(" ")) : selDateTime;
		var d = date.split(".");
		oCalendar.cfg.setProperty("selected", removeZero(d[0])+"/"+removeZero(d[1])+"/"+d[2], false);
	}
    oCalendar.selectEvent.subscribe(function (p_sType, p_aArgs) {
        var aDate;
        if (p_aArgs) {
            aDate = p_aArgs[0][0];
			input.value = refreshInputValueForCalendar(ID, aDate, input.value, null);
        }
        oCalendar.hide();

        // Trigger onchange event
        if (UA.ie) {
            var e = document.createEventObject();
            input.fireEvent('onchange', e);
        } else {
            var e = document.createEvent("Events");
            e.initEvent('change', true, true);
            input.dispatchEvent(e);
        }
    });

    oCalendar.render();
    oCalendar.hide();
    YAHOO.util.Event.on(btn, 'click', oCalendar.show, oCalendar, true);

    if (args.showNowButton) {
        var nowBtn = document.createElement('span');
        nowBtn.className = 'nowButton';
        var nowLink = document.createElement('a');
        nowLink.href = 'javascript:void(0);';
        nowLink.appendChild(document.createTextNode('Now'));
        nowBtn.appendChild(nowLink);
        cnt.appendChild(nowBtn);
        YAHOO.util.Event.on(nowLink, 'click', function() {
            var date = new Date();
            var data = YAHOO.util.Dom.get(ID).getAttribute("rel").split(" ");
	    	var type = (data.length > 1) ? data[1] : "datetime";
            var val = date.getDate() + '.' + (1 + date.getMonth()) + '.' + date.getFullYear();
            if (type == 'datetime') {
                val += ' ';
                val += date.getHours();
                val += ':';
                var min = date.getMinutes();
                if(min < 10)
                    val += '0';
                val += date.getMinutes();
            }
            input.value = val;

            // Trigger onchange event
            if (UA.ie) {
                var e = document.createEventObject();
                input.fireEvent('onchange', e);
            } else {
                var e = document.createEvent("Events");
                e.initEvent('change', true, true);
                input.dispatchEvent(e);
            }
        });
    }
    if(args['showClearButton'] != null && args.showClearButton){
        var clearBtn = document.createElement('span');
        clearBtn.className = 'nowButton';
        var clearLink = document.createElement('a');
        clearLink.href = 'javascript:void(0);';
        clearLink.appendChild(document.createTextNode('Clear'));
        clearBtn.appendChild(clearLink);
        cnt.appendChild(clearBtn);
        YAHOO.util.Event.on(clearLink, 'click', function() {
            input.value = '';
            // Trigger onchange event
            if (UA.ie) {
                var e = document.createEventObject();
                input.fireEvent('onchange', e);
            } else {
                var e = document.createEvent("Events");
                e.initEvent('change', true, true);
                input.dispatchEvent(e);
            }
        });
    }
    return oCalendar;
}

/**
 * Validace data a času
 * @param String val hodnota
 * @param boolean time i čas
 * @return boolean je to správné datum
 */
function dateTimeValidate(val, time) {
    var regexp = '^(0?[1-9]|[12][0-9]|3[01])(\.)(0?[1-9]|1[012])(\.)((19|20)[0-9]{2})';
	if (time) {
		regexp+=' (0?[0-9]|1[0-9]|2[0-3]):([0-5][0-9])';
    }
	regexp += '$';
	var regexpobj = new RegExp(regexp);
	return regexpobj.test(val);
}

function randomID(){
	var length = 30;
	var chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890";
	var pass = "";
	for(var x=0;x<length;x++){
		var i = Math.floor(Math.random() * 62);
		pass += chars.charAt(i);
	}
	if (document.getElementById(pass)) return randomID();
	return pass;
}

function loadDependentOptions(){
    var selects = document.getElementsByTagName("select");
    var i,sel;
    for (i=0;i<selects.length;i++) {
        sel = selects[i];
        if(sel.name.search(/dynamicField/) == 0)
            sel.onchange(null);
    }
}

function showAlertFromUrl() {
    var alertMessage = getUrlParameter("alertMessage");
    if(alertMessage != "")
        alert(alertMessage);
}

function getUrlParameter( name ){
    var regexS = "[\\?&]"+name+"=([^&#]*)";
    var regex = new RegExp( regexS );
    var tmpURL = window.location.href;
    var results = regex.exec( tmpURL );
    if( results == null )
        return "";
    else
        return decodeURIComponent(results[1]);
}

/* AutoComplete */
var AutoComplete = {
    registry: [],
    settings: {
        parse: function(xml) {
            var results = [];
            var attributes = this.responseSchema.fields;
            $(xml).find(this.responseSchema.resultNode).each(function() {
                var row = {};
                for(var keyIndex in attributes){
                    var key = attributes[keyIndex];
                    if($.isFunction(key)){
                        continue;
                    }
                    row[key] = jQuery(this).attr(key);
                }
                results[results.length] = {data: row, value: row[attributes[1]], result: row[attributes[0]]};
            });
            return results;
        },
        formatItem: function(data) {
            return data[this.responseSchema.fields[0]];
        },
        formatResult: function(data) {
            return data[this.responseSchema.fields[1]];
        },
        onSelect: function (event, data, formatted) {},
        mustMatch: false,
        minChars: 0,     //bylo minQueryLength: 0,
        cacheLength: 0,
        responseSchema: {
            resultNode: 'user',
	        fields: ["username", "userid", "company", "email", "phone", "note"]
	    },
        max: 100,
        extraParams: {}, //bylo requestParams: {},
        onComplete: function(data) {
            Log.add('AutoComplete completely loaded');
        }
    },
    register: function(fieldID, requestURL, options) {
        Log.add('Registering AutoComplete on ' + fieldID);

        var field = jQuery('input[id="'+fieldID+'"]');
        if (!field.length) {
            Log.add('Error: field ' + fieldID + ' not found');
        }
        var acSettings = new Array();
        jQuery.extend(acSettings, AutoComplete.settings, options);

        field.autocomplete(requestURL, acSettings);
        field.result(acSettings.onSelect);

	    var data = { acSettings: acSettings };

        AutoComplete.registry[fieldID] = data;

        AutoComplete.updateExtraParams(fieldID, acSettings.extraParams);

        if (acSettings.onComplete && jQuery.isFunction(acSettings.onComplete)) {
            acSettings.onComplete(data);
        }
        return data;
    },
    updateExtraParams: function(fieldID, extraParams){
        jQuery.extend(AutoComplete.registry[fieldID].acSettings.extraParams, AutoComplete.registry[fieldID].acSettings.extraParams, extraParams);
    }
};

/* po kliknuti na pole zobrazi vrstvu pres a velke pole; potrebuje YUI2.7 (yahoo-dom-event, container) */
var BigField = {
    overlay: null,
    textarea: null,
    lastField: null,
    customHandlerOk: null,
    customHandlerCancel: null,
    init: function() {
        Log.add('Initializing BigField editor');
        var w = YAHOO.util.Dom.getViewportWidth() - 50;
        var h = YAHOO.util.Dom.getViewportHeight() - 50;
        if (!YAHOO.util.Dom.get('bigField')) {
            var container = document.createElement('div');
            container.setAttribute('id', 'bigField');
            container.className = 'popup-overlay';
            container.style.width = w + "px";
            container.style.height = h + "px";
            //document.body.insertBefore(container, document.body.firstChild);
            document.body.appendChild(container);
        }
        BigField.overlay = new YAHOO.widget.Dialog("bigField", {
            width: w,
            height: h,
            //width: 200,
            //height: 200,
            fixedcenter: true,
            constraintoviewport: true,
            //underlay:"shadow",
            close:false,
            visible:false,
            modal: true,
            zIndex: 10000,
            buttons: [
                { text: formUse, handler: BigField.handleOK, isDefault: true},
                { text: formClose, handler: BigField.handleCancel}
            ]
        });
        BigField.overlay.setHeader('Editace pole');
        BigField.overlay.setBody('<textarea id="bigField_textarea"></textarea>');

        BigField.overlay.cfg.queueProperty('keylisteners', new YAHOO.util.KeyListener(document, { keys:27 },
	                 { fn:BigField.overlay.hide, scope:BigField.overlay,correctScope:true } ));

        BigField.overlay.render();
        BigField.textarea = document.getElementById('bigField_textarea');

        YAHOO.util.Event.on(window, 'resize', function() {
            BigField.overlay.cfg.setProperty('width', YAHOO.util.Dom.getViewportWidth() - 50);
            BigField.overlay.cfg.setProperty('height', YAHOO.util.Dom.getViewportHeight() - 50);
        });

        Log.add('BigField editor rendered');
    },
    edit: function(field) {
        BigField.editWithHandlers(field, null,null);
    },
    editWithHandlers: function(field, handOk, handCancel) {
        if (!BigField.overlay) BigField.init();

        BigField.textarea.value = field.value;
        BigField.overlay.show();
        BigField.textarea.focus();
                
        BigField.lastField = field;
        BigField.customHandlerOk = handOk;
        BigField.customHandlerCancel = handCancel;
    },
    handleOK: function() {
        BigField.lastField.value = BigField.textarea.value;
        if(BigField.customHandlerOk != null)
            BigField.customHandlerOk();
        BigField.overlay.hide();
    },
    handleCancel: function() {
        if(BigField.customHandlerCancel != null)
            BigField.customHandlerCancel();
        BigField.overlay.hide();
    }
}

function checkDfRequired(taskId){
    var callbackReturn = false;
    try{
        jQuery.ajax({ url:'ajaxCheckDfReguired', data: { taskId: taskId },
            success: function(data) {
                var fields = jQuery(data).find('field');
                if(fields != null && fields.length > 0){
                    var message = jQuery(data).find('fields').attr('message');
                    var i = 0;
                    fields.each(function(){
                        if(i != 0) message+=", ";
                        message+=jQuery(this).find('label').text();
                        i++;
                    });
                    alert(message);
                }else
                    callbackReturn = true;
            },async: false
        });
    }catch(e){
        logger('checkDfRequired taskId: '+taskId+" - "+e);
    }
    return callbackReturn;
}

function registerAjaxValidate(inputName, dfName){
    var jDfInput = $('*[name="'+inputName+'"]');
    jDfInput.keyup(function(){
        var jThis = $(this);
        $.get('ajaxValidate', { name: dfName, value: jThis.val() },
                function(data){
                    var jData = $(data);
                    var jDivForThis = $('#message_'+dfName);
                    if(!jDivForThis.length){
                        jDivForThis = $('<div id="message_'+dfName+'"></div>');
                        jThis.after(jDivForThis);
                    }
                    var str = jData.find('message').text();
                    str = unescape(str.replace(/\+/g,  " "));
                    jDivForThis.html('<div style="color:black"> ' + str + ' </ div>');
                }, 'xml');
    });
}
var LoginAjax = {
    isAdminRequired: false,
    checkOnSubmit: true,
    register: function(){
        $(function(){
            if(LoginAjax.checkOnSubmit){
                $('form').submit(function() {
                    return LoginAjax.checkLoginByAjax(this);
                });
            }
        });
    },
    checkLoginByAjax: function (formElement){
        var callbackReturn = LoginAjax.isLogged(null);
        if(callbackReturn)
            return true;
        else{
            var buttonState = {};
            buttonState[loginForm.butLogin] = true;
            jQuery.prompt('<h3>'+loginForm.title+'</h3>' +
                          '<ul class=\"failed\">'+loginForm.validationFailed+'</ul>' +
                          '<table>' +
                            '<tr><td>'+loginForm.username+':</td><td><input name=\"username\" class=\"editBoxWide\"/></td></tr>' +
                            '<tr><td>'+loginForm.password+':</td><td><input name=\"password\" type=\"password\" class=\"editBoxWide\"/></td></tr>' +
                            '<tr><td>'+loginForm.customerCode+':</td><td><input name=\"code\" class=\"editBoxWide\"/></td></tr>' +
                          '</table>',
                { buttons: buttonState, zIndex: 11000,
                    loaded: function(){
                        jQuery(this).find('div[class=jqiclose]').click(function(){ SubmitHandler.hide(); });
                    },
                    submit: function(v,m,f){
                        var callbackReturn2 = LoginAjax.isLogged(f);
                        if(callbackReturn2){
                            jQuery(formElement).submit();
                            return true;
                        }else{
                            jQuery('ul[class=failed]').css('display','block');
                            return false;
                        }
                    }
                }
            );
            return false;
        }
    },
    isLogged: function(form){
        var callbackReturn = false;
        var param = { isAdminRequired: LoginAjax.isAdminRequired };
        if(form != null){
            param.username = form.username;
            param.password = form.password;
            param.code = form.code;
        }
        try{
            jQuery.ajax({ url:'ajaxLogin.do', data: param,
                success: function(data) {
                    callbackReturn = jQuery(data).find('logged').text() == 'true';
                },async: false
            });
        }catch(e){
            logger('Prompt - checkLoginByAjax isAdminRequired: '+LoginAjax.isAdminRequired+" - "+e);
        }
        return callbackReturn;
    }
}

LoginAjax.register();

if(typeof $.fn.mColorPicker != 'undefined'){
    $.fn.mColorPicker.init.allowTransparency=false;
    $.fn.mColorPicker.init.showLogo=false;
    $.fn.mColorPicker.defaults.imageFolder = "_js/jquery/mcolorpicker/images/";
}

function createColorPicker(jElement){
    jElement.attr('data-hex', true).mColorPicker();
}

function useGoogleAnalytics(){
    var googleAnalyticsScript = '_js/googleAnalytics.js';
    try{
        (function() {
            var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
            ga.src = googleAnalyticsScript;
            var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
        })();
    }catch(e){
        logger('Google analytics not configured');
    }
}

useGoogleAnalytics();

function changeShowTimesheets(refresh){
    $.ajax({url:'ajaxChangeShowTimesheets', data: {showTimesheets: $('#showTRC').is(':checked')}, async: false, dataType:'xml' });
    if(refresh){
        Refresh.refresh();
    }
}

$.fn.extend({
    setValueOnElastic: function(val) {
        $(this).val(val).trigger('update');
    }
});

/* jQuery toggle did not function properly */
function elemToggle(jQueryElem) {
    if($(jQueryElem).css("display") == "none") {
        jQueryElem.show();
    }
    else {
        jQueryElem.hide();
    }
}

function changeShowInitialComments(elem){
    var parentElem = jQuery(elem).parent();
    elemToggle(jQuery('.initialComment', parentElem));
    /* toggle labels */
    elemToggle(jQuery('.showMore', elem));
    elemToggle(jQuery('.showLess', elem));
}

function changeShowCutComment(elem){
    var parentElem = jQuery(elem).parent();
    elemToggle(jQuery('.shortComment', parentElem));
    elemToggle(jQuery('.fullComment', parentElem));
    /* toggle labels */
    elemToggle(jQuery('.showMore', elem));
    elemToggle(jQuery('.showLess', elem));
}
