
	/* Toto je custom contextBox poze pro filterwidget */

	var isIE = navigator.userAgent.indexOf("MSIE")>(-1);
	var isIE6 = (navigator.userAgent.indexOf("MSIE 6")>(-1) && navigator.userAgent.indexOf("MSIE 7")<(0) && navigator.userAgent.indexOf("MSIE 8")<(0));
		
	var killAllPopups = function(){
		
		var openedContentBoxes = Dom.getElementsByClassName("ctxBox");
		for (var x=0;x<openedContentBoxes.length; x++){
			openedContentBoxes[x].parentNode.removeChild(openedContentBoxes[x]);
		}
		
		//killnu vsechny maly kalendare
		Dom.get("calendarSmall").parentNode.removeChild(Dom.get("calendarSmall"));
		Dom.get("calendarSmallHolder").innerHTML = '<div id="calendarSmall"></div>';
		
		killAllPopupsEvent.fire();
		
	}
	
	var checkIt=function(elem){
			elem.checked=true;
			Dom.addClass(elem,'checked');
			Dom.setAttribute(elem,"checked","checked");
	}
	
	var unCheckIt=function(elem){
			elem.checked=false;
			Dom.removeClass(elem,'checked');
			elem.removeAttribute('checked');
	}
	
	// fce vykonani potvrzeni
	var okBox = function(e,nodeId){
		if (e){
			Ev.stopEvent(e);			
		}

		
		var src = Dom.get(Dom.get(nodeId).className.split(" ")[Dom.get(nodeId).className.split(" ").length-1]);
		
		// updatuju globalni form
		src.innerHTML = Dom.get("contextData").innerHTML;
		
		// nactu labely zadanych polozek
		var labels = getSelectedNames(Dom.get("contextData"));
		// nastavim ve vyhledavaci m vidgetu nahledy vyberu
		var textTarget = Dom.getFirstChild(Dom.get(nodeId)); // label pro zobrazeni
		Dom.removeClass(textTarget, 'virgin');
		textTarget.innerHTML = labels; 
		Dom.get("ctxBox").parentNode.removeChild(Dom.get("ctxBox"));
	}
	
	/** 
	 * Listenery na custom chovani checkboxu
	 *
	 */
	var setSelectedListeners = function(node){
		// CHECKBOXY
		var changeCheckBox = function(e,data){
			var allChecks = data.allChecks;
			var input = data.input;
			
			// najdu si polozku nerozhoduje (parsuju value pro retezec "nerozhoduje")
			var nerozhoduje = Dom.getElementBy(function(elem){return elem.value.indexOf("nerozhoduje")==0},'input',input.parentNode.parentNode.parentNode);
			
			// hack kuli destinacim a nadrazenym skupinam
			if (Dom.getAncestorBy(input,function(elem){return elem.id=="formDestinace"})){
				
				unCheckIt(nerozhoduje);
				
				var getGroupChildren = function(grouper){return Dom.getElementsBy(function(elem){return elem.type=="checkbox"},'input', Dom.getNextSiblingBy(grouper,function(elem){return elem.className=="subgroup"}))}
				var getGrouper = function(input){return Dom.getPreviousSiblingBy(input.parentNode,function(elem){return Dom.hasClass(elem,"grouper")})}
			
				if (Dom.hasClass(input, "grouper")){
					var childrenInputs = getGroupChildren(input);
					if (Dom.hasClass(input, "checked")){
						unCheckIt(input);
					} else {
						checkIt(input);
						for (var i=0; i<childrenInputs.length; i++){
							unCheckIt(childrenInputs[i]);
						}
					}
					// znovu oznacit nerozhoduje pokud jsou vsechny odskrtly
					var areAllUnchecked = true;
					for (var j in allChecks){
						if (Dom.hasClass(allChecks[j],"checked")){
							areAllUnchecked	= false;
						}
					}
					if (areAllUnchecked){
						checkIt(nerozhoduje);
					}
					
				} else {
					var grouper = getGrouper(input);
						unCheckIt(grouper);
					if (Dom.hasClass(input, "checked")){
						unCheckIt(input);
					} else {
						checkIt(input);
						// Grouper checkbox
						// oznacim li vsechny v podskupine, oznacim grouper a deselectnu vsechny ostatni
						var oznaceneInputy = Dom.getChildrenBy(input.parentNode,function(elem){return Dom.hasClass(elem,"checked")});
						if (oznaceneInputy.length == Dom.getChildrenBy(input.parentNode,function(elem){return elem.type=="checkbox"}).length){
							var grouper = getGrouper(input);
							checkIt(grouper);
							// odznacim vse oznacene 
							for (var x=0;x<oznaceneInputy.length;x++){
								unCheckIt(oznaceneInputy[x]);
							}
						}
					}
					
					// znovu oznacit nerozhoduje pokud jsou vsechny odskrtly
					var areAllUnchecked = true;
					for (var j in allChecks){
						if (Dom.hasClass(allChecks[j],"checked")){
							areAllUnchecked	= false;
						}
					}
					if (areAllUnchecked){
						checkIt(nerozhoduje);
					}
					
				}
				return;
			}
			// hack destinace konec
			
			
			if (input!=nerozhoduje){
				
				nerozhoduje.checked=false;
				Dom.removeClass(nerozhoduje,'checked');
				nerozhoduje.removeAttribute('checked');
				
				if (Dom.hasClass(input,'checked')){
						Dom.removeClass(input,'checked');
						input.checked=false;
						input.removeAttribute('checked');
						
				} else {
					Dom.setAttribute(input,'checked','checked');
					Dom.addClass(input,'checked');
				}

				// pokud jsme odznacili vse ... oznacime nerozhoduje
				if (Dom.getElementBy(function(elem){return elem.checked},'input',input.parentNode.parentNode.parentNode).length==0){
					nerozhoduje.checked=true;
					Dom.setAttribute(nerozhoduje,"checked","checked");
					Dom.addClass(nerozhoduje,'checked');
				}
			
			// jestli je to tlacitko nerozhoduje, deselectnu vsechny ostatni
			} else {

				for (var x=0; x<allChecks.length;x++){
					allChecks[x].checked=false;
					allChecks[x].removeAttribute("checked");
					Dom.removeClass(allChecks[x],'checked');
				}
	
				input.checked=true;
				Dom.addClass(input,'checked');
				Dom.setAttribute(input,"checked","checked");
				
			}
		}
		
		// Radios
		var changeRadio = function(e,data){
			var allChecks = data.allChecks;
			var input = data.input;
			
			if ( ! isIE){
				Ev.stopEvent(e);
			}
		
			for (var x=0; x<allChecks.length;x++){
				allChecks[x].checked=false;
				allChecks[x].removeAttribute("checked");
				Dom.removeClass(allChecks[x],'checked');
			}
	
			input.checked=true;
			Dom.addClass(input,'checked');
			Dom.setAttribute(input,"checked","checked");
		}
		
		
		//select all 
		var selectAll= function(e,checkboxes){
			Ev.stopEvent(e);
			
			for (var x=0;x<checkboxes.length;x++){
				
				if (checkboxes[x].name == "z"){
					checkboxes[x].checked=true;
					Dom.addClass(checkboxes[x],'checked');
					Dom.setAttribute(checkboxes[x],"checked","checked");
				} else {
					checkboxes[x].checked=false;
					checkboxes[x].removeAttribute("checked");
					Dom.removeClass(checkboxes[x],'checked');
					
				}
			}
			
		}
		
		// checkboxy
		var checkboxes =  Dom.getElementsBy(function(elem){return elem.type=='checkbox'}, 'input', node);
		for (var x=0;x<checkboxes.length;x++){
			Ev.addListener(checkboxes[x],isIE?'click':'change',changeCheckBox,{'input':checkboxes[x],'allChecks':checkboxes});
		}
		
		// radioButtons
		var radios =  Dom.getElementsBy(function(elem){return elem.type=='radio'}, 'input', node);
		for (var x=0;x<radios.length;x++){
			Ev.addListener(radios[x],isIE?'click':'change',changeRadio,{'input':radios[x],'allChecks':radios});
		}
		
		// selectallButton
		var checkAllButton = Dom.getElementsByClassName("selectallButton",'a',Dom.get("contextData"))[0];
		if (checkAllButton){
			Ev.addListener(checkAllButton,'click',selectAll,checkboxes);
		}
		
		
		//listenery pro labely
		var labels = Dom.getElementsBy(function(elem){return elem.tagName=='LABEL'}, 'label', node);
		for (var s=0;s<labels.length;s++){
			var relatedInput = Dom.getPreviousSibling(labels[s],function(elem){return elem.tagName=="INPUT"});
			if (relatedInput!=null && relatedInput.type=="radio"){
				Ev.addListener(labels[s],'click',changeRadio,{'input':relatedInput,'allChecks':radios});				
			} else if (relatedInput!=null && relatedInput.type=="checkbox") {
				Ev.addListener(labels[s],'click',changeCheckBox,{'input':relatedInput,'allChecks':checkboxes});
			}
		}
		
	}
	
	/**
	 *	funkce vrati vsechny obsahy labelu zacheckovanych plozek do stringu oddelenym strednikem pro nahled
	 *	@param element ve kterym se maji hledat checky
	 *  nutna HTML konstrukce <checkbox><label hned za nim (Dom.getNextSibling(checkbox)) >
	 *
	 */
	var getSelectedNames = function(node){
		var allString="";
		var inputs = Dom.getElementsBy(function(elem){return Dom.getAttribute(elem,"checked")=='checked' || elem.checked==true}, 'input', node);
		
		// alert(inputs);
		var allString =""
		
		if (inputs.length>1){
			allString="Více položek ...";
		} else {
			var itsLabel = Dom.getNextSibling(inputs[0]);
			allString=itsLabel.innerHTML;
		}
		
		/*
		for (var x=0;x<inputs.length;x++){
			var itsLabel = Dom.getNextSibling(inputs[x]);
			if (itsLabel){
				allString += allString!=""?", "+itsLabel.innerHTML:itsLabel.innerHTML;
			}
		}
		*/
		return allString;
	}
	
	/**
	 * @param {
	 *  		src:element ze ktereho se ma vzit innerHTML,
	 *  		node:element ke kteremu se ma contextbox prilepit
	 *  		target:element do kteryho budto pomoci value nebo innerHTML blozim obsah src po OK
	 *			triger: hover|click
	 *        }
	 */
	var showContextBox = function(e,data){
		Ev.stopEvent(e);
		
		var src = data.src;
		var node = data.node;
		var triger = data.triger;
		
		
		// zjistim jestli neni otevrenej formular pro zmenu
		//var openedContextForm = Dom.get("ctxBox");
		var contextData = Dom.get("contextData");
		if (contextData){
			var formElement = Dom.getElementBy(function(elem){return elem.id},'div',contextData);
			if (formElement){
				var elemClassName = formElement.id+"Content";
				elemClassName = elemClassName.replace("form","filtr");
				var nodeElem = Dom.getElementsByClassName(elemClassName,'a',Dom.get("filterMenu"))[0];
				if (nodeElem){
					okBox(null,nodeElem.id);
				}
			}
		}
		
		// killnu vsechny contextboxy
		killAllPopups();
		
		// vytvorim kontextBox
		var contextBox = document.createElement('div');
		contextBox.className = "ctxBox";
		contextBox.id = "ctxBox";
		document.body.appendChild(contextBox);
		
		// naplneni obsahem a rozdelime padding na tooltip a contextbox 
		contextBox.innerHTML = '<div class="ctxPaddingMenu" id="contextData">'+src.innerHTML+'</div>';	
	
		//set size aby se box nemenil velikosti okna
		contextBoxHeight = contextBox.offsetHeight;
		contextBoxWidth = contextBox.offsetWidth;
		Dom.setStyle(contextBox, 'height',contextBoxHeight+'px');
		Dom.setStyle(contextBox, 'width',contextBoxWidth+'px');
		
		// vlozeni stinovacich IMG - objektem IMAGE aby se neloadovaly obrazky
		var imgsElems = Array();

		imgsElems[0] = document.createElement('b');
		imgsElems[0].className="cntxlt";
		imgsElems[1] = document.createElement('b');
		imgsElems[1].className="cntxt";
		Dom.setStyle(imgsElems[1],'width',contextBoxWidth+'px');
		imgsElems[2] = document.createElement('b');
		imgsElems[2].className="cntxrt";
		imgsElems[3] = document.createElement('b');
		imgsElems[3].className="cntxr";
		Dom.setStyle(imgsElems[3],'height',contextBoxHeight+'px');
		imgsElems[4] = document.createElement('b');
		imgsElems[4].className="cntxbr";
		imgsElems[5] = document.createElement('b');
		imgsElems[5].className="cntxb";		
		Dom.setStyle(imgsElems[5],'width',contextBoxWidth+'px');
		imgsElems[6] = document.createElement('b');
		imgsElems[6].className="cntxbl";	
		imgsElems[7] = document.createElement('b');
		imgsElems[7].className="cntxl";
		Dom.setStyle(imgsElems[7],'height',contextBoxHeight+'px');
		
		for (var d=0;d<imgsElems.length;d++){
			imgsElems[d].alt="";
			contextBox.appendChild(imgsElems[d]);
		}

		// Zavirani okna
		var closeCntxBox = function(e){
			e!=null?Ev.stopEvent(e):true;
			contextBox.parentNode.removeChild(contextBox);
		}
		
		// pokud se jedna o contentbox na click pridam zaviraci odkaz
		var closer = document.createElement('a');
		closer.className = 'closerButton';
		contextBox.appendChild(closer);
		Ev.addListener(closer,'click',	closeCntxBox,{'contextBox':contextBox,'node':node});

	
		var okButton = Dom.getElementsByClassName("confirmButton","a",contextBox);
		if (okButton.length){
			
			// pridam si listenery na vsechny inputy aby se mi menilo html v boxu
			setSelectedListeners(contextBox);
			Ev.addListener(okButton[0], 'click', okBox, node.id);
			
			
			/* ==============================================================================*/
		}

		// napozicovani okna pozicovani sipky
		var nodeData = Dom.getRegion(node);
		if (isOpera){
			var iebody=(document.compatMode && document.compatMode != "BackCompat")? document.documentElement : document.body
			var dsoctop=document.all? iebody.scrollTop : pageYOffset
			nodeData.top = nodeData.top+dsoctop;
		}
		
			// top
		if (node.className.indexOf("contextBoxed top")>(-1)){
			var cur = document.createElement('div');
			cur.className = "cur-bottom";
			contextBox.appendChild(cur);
			Dom.setStyle(contextBox, 'top',nodeData.top-(contextBox.offsetHeight+30)+'px');
			Dom.setStyle(contextBox, 'left',(nodeData.right-(nodeData.width/2)-(contextBox.offsetWidth/2)-10)+'px');
		
			// left
		} else if (node.className.indexOf("contextBoxed left")>(-1)) {
			var cur = document.createElement('div');
			cur.className = "cur-right";
			contextBox.appendChild(cur);
			Dom.setStyle(contextBox, 'top',nodeData.top-(((contextBox.offsetHeight/100)*15)-10)+'px');
			Dom.setStyle(contextBox, 'left',nodeData.left-(contextBox.offsetWidth+25)+'px');				
			
			// bottom
		} else if (node.className.indexOf("contextBoxed bottom")>(-1)){
			var cur = document.createElement('div');
			cur.className = "cur-top";
			contextBox.appendChild(cur);
			Dom.setStyle(contextBox, 'top',nodeData.bottom+30+'px');
			Dom.setStyle(contextBox, 'left',(nodeData.right-(nodeData.width/2)-(contextBox.offsetWidth/2)-10)+'px');
			
			// right	
		} else if (node.className.indexOf("contextBoxed right")>(-1)){
			var cur = document.createElement('div');
			cur.className = "cur-left";
			contextBox.appendChild(cur);
			Dom.setStyle(contextBox, 'top',nodeData.top-(((contextBox.offsetHeight/100)*15)-10)+'px');
			Dom.setStyle(contextBox, 'left',nodeData.left+nodeData.width+25+'px');
			
			// tooltip
		} else if (node.className.indexOf("tooltip")>(-1)){
			var cur = document.createElement('div');
			cur.className = "cur-tool";
			contextBox.appendChild(cur);
			Dom.setStyle(contextBox, 'top',nodeData.top-(contextBox.offsetHeight+25)+'px');
			Dom.setStyle(contextBox, 'left',(nodeData.right-(nodeData.width/2)-(contextBox.offsetWidth/2)-10)+'px');
							
			// deafilt right	
		} else {
			var cur = document.createElement('div');
			cur.className = "cur-left";
			contextBox.appendChild(cur);
			Dom.setStyle(contextBox, 'top',nodeData.top-(((contextBox.offsetHeight/100)*15)-10)+'px');
			Dom.setStyle(contextBox, 'left',nodeData.left+nodeData.width+25+'px');
		}

		
		
		Dom.setStyle(contextBox,'visibility','visible');

	}

	/**
	 * INIT
	 */
	var contextBoxInit = function() {
		
		// lastminuteButton
		var lm = Dom.get("checkFilterLastminute");
		Ev.addListener(lm,isIE?'change':'click',function(e,lm){
														 			if (lm.checked){
																		Dom.addClass(lm,'checked');
																	} else {
																		Dom.removeClass(lm,'checked');
																	}
																},lm);
	
	
		var contextBoxOpeners = Dom.getElementsByClassName("contextBoxed");
		for (var i=0; i<contextBoxOpeners.length;i++){
			if (Dom.hasClass(contextBoxOpeners[i],'hover')){
			Ev.addListener(contextBoxOpeners[i],isIE?'mouseenter':'mouseover', showContextBox, {'src':Dom.get(contextBoxOpeners[i].className.split(" ")[contextBoxOpeners[i].className.split(" ").length-1] ), 
																			  'node':contextBoxOpeners[i],
																			  'triger':'hover'
																			  }
															);
			
				Ev.addListener(contextBoxOpeners[i],isIE?'mouseleave':'mouseout', function(){Dom.get("ctxBox").parentNode.removeChild(Dom.get("ctxBox"))});
			
			} else {
			
				Ev.addListener(contextBoxOpeners[i],'click', showContextBox, {'src':Dom.get(contextBoxOpeners[i].className.split(" ")[contextBoxOpeners[i].className.split(" ").length-1] ), 
																			  'node':contextBoxOpeners[i],
																			  'triger':'click'
																			  }
															);
			}

		}
	}
	
	Ev.onDOMReady(contextBoxInit);
	