function showAdvanced(el) {
	nextSibling(el.parentNode).style.display='block';
	el.style.display='none';
}

function hideAdvanced(el) {
	el.parentNode.parentNode.style.display='none';
	previousSibling(el.parentNode.parentNode).firstChild.style.display='block';
}

var bubbleDisplayed = false;
var clickNo = 0;
function hideBubble(msg) {
	if (bubbleDisplayed && bubbleDisplayed == msg) {
		bubbleClose();
		bubbleDisplayed = false;
	}
}
function showBubble(msg) {
	var onlyClose = bubbleDisplayed == msg + (clickNo - 1);
	if (bubbleDisplayed) {
		hideBubble(bubbleDisplayed);
		bubbleDisplayed = onlyClose;
	}
	if (!bubbleDisplayed) {
		bubble(msg, 0);
		bubbleDisplayed = msg + clickNo;
		setTimeout("hideBubble('" + msg + clickNo + "')", 8000);
	}
	else {
		bubbleDisplayed = false;
	}
	clickNo ++;
}

function nextSibling(n) {
	x = n.nextSibling;
	while (x.nodeType != 1) {
		x = x.nextSibling;
	}
	return x;
}
function previousSibling(n) {
	x = n.previousSibling;
	while (x.nodeType != 1) {
		x = x.previousSibling;
	}
	return x;
}

function initDojo() {
	dijit.Tooltip.defaultPosition = ["above", "below"];
}

function startDojoExcercise(_url, _admin) {
	var sourceClick = null;
	dojo.subscribe("/dnd/start", function(source, nodes, iscopy) {
		_unmarkSource(sourceClick);
		var allNodes = source.getAllNodes(); 
		var nodeExists = false;
		for (var i = 0; i < allNodes.length; i ++) {
			if (dojo.style(allNodes[i], "display") == "none") continue;
			for (var j = 0; j < nodes.length; j++) {
				if (allNodes[i].innerHTML == nodes[j].innerHTML && !nodeExists) {
					toRemove = false;
					nodeExists = true;

					sourceClick = allNodes[i];
					_markSource(sourceClick);
					break;
				}
			}
		}
	});
	dojo.subscribe("/dnd/cancel", function() {
		_unmarkSource(sourceClick);
		sourceClick = null;
	});
	dojo.subscribe("/dnd/drop", function(source, nodes, iscopy) {
		_unmarkSource(sourceClick);
		var target = dojo.dnd.manager().target;
		var allNodes = target.getAllNodes(); 
		var nodeExists = false;
		for (var i = 0; i < allNodes.length; i ++) {
			var toRemove = true;
			for (var j = 0; j < nodes.length; j++) {
				if (allNodes[i].innerHTML == nodes[j].innerHTML && !nodeExists) {
					toRemove = false;
					nodeExists = true;
					break;
				}
			}
			if (toRemove) {
				var id = null;
				var val = null;
				for (var j = 0; j < allNodes[i].parentNode.childNodes.length; j++) {
					var child = allNodes[i].parentNode.childNodes[j];
					if (child.id
							&& child.id.substring(0, 2) == 't_') {
						id = child.id;
						dojo.byId(id).innerHTML = allNodes[i].innerHTML;
					}
					else {
						val = child.innerHTML;
					}
				}
				dojo.byId(id).innerHTML = val;

				sendSelection(dojo.byId(id));
				_unmarkSource(allNodes[i]);
				sourceClick = null;
				
				var count = allNodes[i].parentNode.childNodes.length;
				for (var j = 0; j < count; j++) {
					var child = allNodes[i].parentNode.childNodes[j];
					if (child && child.id && child.id != id) {
						(child.parentNode).removeChild(child);
					}
				}
			}
		}
	});

	function _writeResponse(el, data) {
		var resp = dojo.byId("response" + el.id.substring(2,el.id.indexOf('_',2)));
		if (resp) {
			resp.innerHTML = data;
		}
	}
	function _sendAndRetrieveData(__url, __data) {
		if (!_admin) {
			var xhrArgs = {
				url: __url,
				putData: __data,
				handleAs: "json", //"text",
				load: function(data) {
					//vyctu a zobrazim odpoved
					if (data.err) {
						alert(data.err);
					}
					else {
						if (data.tar) {
							for (var i = 0; i < data.tar.length; i++) {
								var _el = dojo.byId('t_'+data.tar[i].id);
								if (data.tar[i].val) {
									if ((typeof _el == 'object') && _el.type == 'text') {
										_el.value = data.tar[i].val;
									}
									else {
										_el.innerHTML = data.tar[i].val;
									}
								}
								if (data.tar[i].ansCorrect) {
									if (dojo.hasClass(_el, "ERROR")) dojo.removeClass(_el, "ERROR");
									if (!dojo.hasClass(_el, "OK")) dojo.addClass(_el, "OK");
								}
								else {
									if (dojo.hasClass(_el, "OK")) dojo.removeClass(_el, "OK");
									if (!dojo.hasClass(_el, "ERROR")) dojo.addClass(_el, "ERROR");
								}
							}
						}
						if (data.exc) {
							for (var i = 0; i < data.exc.length; i++) {
								if (data.exc[i].iHTML) {
									var _el = dojo.byId('excercise'+data.exc[i].id);
									dojo.query('input[type=text]', dojo.byId(_el.id)).forEach(function(w){ dijit.byId(w.id).destroy(true); });
									_el.innerHTML = data.exc[i].iHTML;
									dojo.parser.parse(_el);
								}
								else if (data.exc[i].misPercents) {
									var _el = dojo.byId('t_'+data.exc[i].id+'_0');
									_writeResponse(_el, data.exc[i].misPercents);
								} 
							}
						}
					}
					hideAjaxLoader();
				},
				error: function(error) {
					var _el = dojo.byId('t_'+__data.replace('&','_').substring(0, 3));
					if (!_el) {
						alert(error);
					}
					else {
						_writeResponse(_el, "Chyba při komunikaci se serverem.");
					}
					hideAjaxLoader();
				}
			}
			var deferred = dojo.xhrPut(xhrArgs);
			showAjaxLoader();
		}
	}		
	function analyzeTest() {
		if (!_admin) {
			var __url = _url;
			__url = __url.replace('do[changeChoice]', 'do[analyzeTest]');
			
			_sendAndRetrieveData(__url, null);
		}
	}				
	function evaluateExcercise(el) {
		if (!_admin) {
			var __url = _url;
			__url = __url.replace('do[changeChoice]', 'do[evaluateExcercise]');
			var data = el.id.substring(4);
			_sendAndRetrieveData(__url, data);
		}
	}				
	function sendSelection(el) {
		if (!_admin) {
			//naformatuji zpravu k odeslani
			var data = el.id.substring(2).replace('_', '&') + '&';
			if ((typeof el == 'object') && el.type == 'text') {
				data += el.value;
			}
			else {
				data += el.innerHTML;
			}
			_sendAndRetrieveData(_url, data);
		}
	}

	function _markSource(el) {
		if (el == null) return;
		if (!dojo.hasClass(el, "SELECTED")) dojo.addClass(el, "SELECTED");
	}
	function _unmarkSource(el) {
		if (el == null) return;
		if (dojo.hasClass(el, "SELECTED")) dojo.removeClass(el, "SELECTED");
	}
	function selectSource(el) {
		if (!dojo.hasClass(el, "dojoDndItem")) {
			return;
		}
		if (sourceClick != null && sourceClick != el) {
			_unmarkSource(sourceClick); sourceClick = null;
		}
		if (dojo.hasClass(el, "SELECTED")) {
			_unmarkSource(el); sourceClick = null;
		}				
		else {
			_markSource(el); sourceClick = el;
		}
	}

	dojo.query("[dojoType=dojo.dnd.Source]").onclick(function(e) {
		var e = e || window.event;
		var el = e.target || e.srcElement;
		selectSource(el);
	});
	dojo.query("[dojoType=dojo.dnd.Target]").onclick(function(e) {
		var e = e || window.event;
		var el = e.target || e.srcElement;
		if (sourceClick != null && sourceClick.getAttribute("dndType") == el.parentNode.getAttribute("accept")) {
			el.innerHTML = sourceClick.innerHTML;
			sendSelection(el);
			//zrusim vyber
			selectSource(sourceClick);
		}
	});
	dojo.query("input[type=text]").onchange(function(e) {
		var e = e || window.event;
		var el = e.target || e.srcElement;
		if (!dojo.hasClass(el, "dijitTextBox") && !dojo.hasClass(el, "dijitInputInner") 
				/*|| dojo.hasClass(el, "spell") || dojo.hasClass(el.parentNode, "spell")*/) { //pri spellingu nebudeme odesilat
			return;
		}
		sendSelection(el);
	});
	dojo.query('a.help').onclick(function(e) {
		var e = e || window.event;
		var el = e.target || e.srcElement;
		if (!_admin) {
			el = el.parentNode; //odchyti se klik na SPAN -> prejdu na A
			//naformatuji zpravu k odeslani
			var data = el.id.substring(2).replace('_', '&') + '&';
			var _el = dojo.byId('t' + el.id.substring(1));
			if ((typeof _el == 'object') && _el.type == 'text') {
				data += _el.value;
			}
			else {
				data += _el.innerHTML;
			}
			
			var __url = _url;
			__url = __url.replace('do[changeChoice]', 'do[help]');
			
			_sendAndRetrieveData(__url, data);
		}
	});
	dojo.query('#analyzeTestButton').onclick(function(e) {
		analyzeTest();
	});
	dojo.query('input[id^=e_b_]').onclick(function(e) {
		var e = e || window.event;
		var el = e.target || e.srcElement;
		evaluateExcercise(el);
	});
}
//function startDojoVideo() {
//	dojo.require("dojo.parser");
//	dojo.require("dojox.av.widget.Player");
//	dojo.require("dojox.av.FLVideo");
//	dojo.require("dojox.av.widget.PlayButton");
//	dojo.require("dojox.av.widget.VolumeButton");
//	dojo.require("dojox.av.widget.ProgressSlider");
//	dojo.require("dojox.av.widget.Status");
//}
function showVideo(_basePath, _mediaPath, _videoUrl, _playerId, _imageUrl, _captionsUrl, _width, _height) {
	if (!_width) _width = 480;
	if (!_height) _height = 270;
	
	var _path = _basePath + _mediaPath;
	
	var flashvars = { file: '../../../' + _mediaPath + _videoUrl, image: _path + _imageUrl, plugins: 'captions-1', 'captions.file': _path + _captionsUrl/*, 'captions.state':'false' ,'autostart':'true'*/, stretching: 'fill' };
//	if (_imageUrl) {
//		flashvars.image = _imageUrl; 
//	}
	
	var params = { allowfullscreen: 'true', allowscriptaccess: 'always' };
	var attributes = { id: _playerId + "_1", name: _playerId + "_1" };

	swfobject.embedSWF(_basePath + 'custom/resources/jw-player/player.swf', _playerId, _width, _height, '9.0.115', 'false', flashvars, params, attributes);
}

function changeSubtitles(playerId,subtitleUrl) {
	var subtitlePath = $f(playerId).getClip(0).captionUrl;
	subtitlePath = subtitlePath.substring(0, subtitlePath.lastIndexOf("/") + 1) + subtitleUrl;
	if ($f(playerId).getState() >= 0 /*== 3*/) { //playing
//		if ($f(playerId).getState() == 3) {
//			var sec = $f(playerId).getTime(); 
//			$f(playerId).stop();
//		}
		$f(playerId).getPlugin("captions").loadCaptions(0,subtitlePath);
//		if ($f(playerId).getState() == 3) {
//			$f(playerId).play();
//			$f(playerId).seek(sec);
//		}
	}
	else {
		$f(playerId).getClip(0).update({"captionUrl":subtitlePath});
	}
}

function showPlayButton(playerId, width, height) {
	dojo.addOnLoad(function() {
		dojo.query('#' + playerId + ' img').addContent("<span class=\"play\" style=\"width:" + width + "px;height:" + height + "px;\"></span>", "after");
	});
}

function initDatabases() {
	var grammar = new dojo.dnd.AutoSource("cGrammar", {accept: ["grammar"]});
	var gParents = dojo.query("#grammars");
	if (gParents && gParents.length > 0) {
		grammar.parent = gParents[0];
		grammar.sync();
	}
	
	var excercise = new dojo.dnd.AutoSource("cExcercise", {accept: ["excercise"]});
	var eParents = dojo.query("#excercises");
	if (eParents && eParents.length > 0) {
		excercise.parent = eParents[0];
		excercise.sync();
	}
	
	dojo.query("#cVideo").forEach(function(w){
		var video = new dojo.dnd.AutoSource("cVideo", {accept: ["video"]});
		var vParents = dojo.query("#videos");
		if (vParents && vParents.length > 0) {
			video.parent = vParents[0];
			video.sync();
		}
	});
	
	dojo.query("#cAvalon").forEach(function(w){
		var avalon = new dojo.dnd.AutoSource("cAvalon", {accept: ["avalon"]});
		var aParents = dojo.query("#avalons");
		if (aParents && aParents.length > 0) {
			avalon.parent = aParents[0];
			avalon.sync();
		}
	});

	var test = new dojo.dnd.AutoSource("cTest", {accept: ["test"]});
	var tParents = dojo.query("#tests");
	if (tParents && tParents.length > 0) {
		test.parent = tParents[0];
		test.sync();
	}		

	dojo.query("#cFile").forEach(function(w){
		var file = new dojo.dnd.AutoSource("cFile", {accept: ["file"]});
		var fParents = dojo.query("#files");
		if (fParents && fParents.length > 0) {
			file.parent = fParents[0];
			file.sync();
		}
	});	
}

function startDojoCurriculum(_url, _editing) {
	var lesson = new dojo.dnd.Source("cLessons", {accept: ["lesson"]});
	lesson.sync();
	
	if (_editing) {
		initDatabases();

		dojo.subscribe("/dnd/drop", function(source, nodes, iscopy) {
			var target = dojo.dnd.manager().target;
			var allNodes = target.getAllNodes(); 
			var nodePos = -1;
			var node = null;
			for (var i = 0; nodePos == -1 && i < allNodes.length; i ++) {
				for (var j = 0; j < nodes.length; j++) {
					if (allNodes[i].innerHTML == nodes[j].innerHTML) {
						nodePos = i;
						node = nodes[j]; //allNodes[i];
						break;
					}
				}
			}
			if (target.getAllNodes()[0]) {
				_sendAndRetrieveData(_url, dojo.toJson({src: source.parent.id, tar: target.getAllNodes()[0].parentNode.id, item: node.id, pos: nodePos}, true));
			}
		});
		
		dojo.query('#textDialogOk').onclick(function(e) {
			var e = e || window.event;
			var el = e.target || e.srcElement;
			var vals = dijit.byId("textDialog").getValues();
			var __url = _url;
			__url = __url.replace('do[changeCurriculum]', vals['textDialogCommand']);
			_sendAndRetrieveData(__url, dojo.toJson({tar: vals['textDialogTarget'], item: vals['textDialogTextId'], val: vals['textDialogText']}, true));
		});
		dojo.query('#textDialogDel').onclick(function(e) {
			var e = e || window.event;
			var el = e.target || e.srcElement;
			var vals = dijit.byId("textDialog").getValues();
			var __url = _url;
			__url = __url.replace('do[changeCurriculum]', 'do[deleteText]');
			_sendAndRetrieveData(__url, dojo.toJson({tar: vals['textDialogTarget'], item: vals['textDialogTextId']}, true));
		});
	}	
	
	function _sendAndRetrieveData(__url, __data) {
		var xhrArgs = {
			url: __url,
			putData: __data,
			handleAs: "json", //"text",
			load: function(data) {
				//vyctu a zobrazim odpoved
				if (data.err) {
					hideAjaxLoader();
					alert(data.err);
				}
				if (data.obj) {
					for (var i = 0; i < data.obj.length; i++) {
						if (typeof(data.obj[i].iHTML) != "undefined") {
							var _el = dojo.byId(data.obj[i].id);
							_el.innerHTML = data.obj[i].iHTML;
							dojo.parser.parse(_el);
				    		dojo.query("#" + _el.id + " li[id^=text]").onclick(function(e) {
								var e = e || window.event;
								var el = e.target || e.srcElement;
								openTextDialog(el);
							});
						}
					}
				}
				hideAjaxLoader();
			},
			error: function(error) {
				hideAjaxLoader();
				alert("Chyba při komunikaci se serverem.");
			}
		}
		var deferred = dojo.xhrPut(xhrArgs);
		showAjaxLoader();
	}
}

function startDojoSession(_url, _editing) {
	if (_editing) {
		var lesson = new dojo.dnd.Source("lessons", {accept: ["lesson"]});
		lesson.sync();

		initDatabases();

		dojo.subscribe("/dnd/drop", function(source, nodes, iscopy) {
			var target = dojo.dnd.manager().target;
			var allNodes = target.getAllNodes(); 
			var nodePos = -1;
			var node = null;
			for (var i = 0; nodePos == -1 && i < allNodes.length; i ++) {
				for (var j = 0; j < nodes.length; j++) {
					if (allNodes[i].innerHTML == nodes[j].innerHTML) {
						nodePos = i;
						node = nodes[j]; //allNodes[i];
						break;
					}
				}
			}
			if (target.getAllNodes()[0]) {
				_sendAndRetrieveData(_url, dojo.toJson({src: source.parent.id, tar: target.getAllNodes()[0].parentNode.id, item: node.id, pos: nodePos}, true));
			}
		});
		
		dojo.query('#textDialogOk').onclick(function(e) {
			var e = e || window.event;
			var el = e.target || e.srcElement;
			var vals = dijit.byId("textDialog").getValues();
			var __url = _url;
			__url = __url.replace('do[changeSession]', vals['textDialogCommand']);
			_sendAndRetrieveData(__url, dojo.toJson({tar: vals['textDialogTarget'], item: vals['textDialogTextId'], val: vals['textDialogText']}, true));
		});
		dojo.query('#textDialogDel').onclick(function(e) {
			var e = e || window.event;
			var el = e.target || e.srcElement;
			var vals = dijit.byId("textDialog").getValues();
			var __url = _url;
			__url = __url.replace('do[changeSession]', 'do[deleteText]');
			_sendAndRetrieveData(__url, dojo.toJson({tar: vals['textDialogTarget'], item: vals['textDialogTextId']}, true));
		});
	}	
	
	function _sendAndRetrieveData(__url, __data) {
		var xhrArgs = {
			url: __url,
			putData: __data,
			handleAs: "json", //"text",
			load: function(data) {
				//vyctu a zobrazim odpoved
				if (data.err) {
					hideAjaxLoader();
					alert(data.err);
				}
				if (data.obj) {
					for (var i = 0; i < data.obj.length; i++) {
						if (typeof(data.obj[i].iHTML) != "undefined") {
							var _el = dojo.byId(data.obj[i].id);
							_el.innerHTML = data.obj[i].iHTML;
							dojo.parser.parse(_el);
				    		dojo.query("#" + _el.id + " li[id^=text]").onclick(function(e) {
								var e = e || window.event;
								var el = e.target || e.srcElement;
								openTextDialog(el);
							});
						}
					}
				}
				hideAjaxLoader();
			},
			error: function(error) {
				hideAjaxLoader();
				alert("Chyba při komunikaci se serverem.");
			}
		}
		var deferred = dojo.xhrPut(xhrArgs);
		showAjaxLoader();
	}
}

function startDojoDictionary(dictButton, tb1, _url) {
	function _sendRequest() {
		var vals = dijit.byId("dictDialog").getValues();
		_sendAndRetrieveData(_url, dojo.toJson({lang: vals['dictDialogLang'], txt: vals['dictDialogTxt']}, true));
	}
	
	dojo.connect(dictButton, "onClick", null, function(e) {
		_sendRequest();
	});
	
    dojo.connect(tb1, "onKeyPress", null, function(e) {
    	if (e.keyCode == dojo.keys.ENTER) {
    		_sendRequest();
    	}
    });
	
	function _sendAndRetrieveData(__url, __data) {
		var xhrArgs = {
			url: __url,
			putData: __data,
			handleAs: "json", //"text",
			load: function(data) {
				//vyctu a zobrazim odpoved
				if (data.err) {
					hideAjaxLoader();
					alert(data.err);
				}
				if (data.txt) {
					dijit.byId("dictDialogTxt2").setContent(data.txt);
				}
				else {
					dijit.byId("dictDialogTxt2").setContent("");
				}
				hideAjaxLoader();
			},
			error: function(error) {
				hideAjaxLoader();
				alert("Chyba při komunikaci se serverem.");
			}
		}
		var deferred = dojo.xhrPut(xhrArgs);
		showAjaxLoader();
	}
}

function performActionAndRetrieveData(action, paramm, value, paramm2, value2, paramm3, value3, paramm4, value4, paramm5, value5) {
	var form = document.forms['form'];
	var oldAction = form.action;
	form.action = form.action + (form.action.indexOf("?") == -1? "?": "&") + "do[" + action + "]=1&ajax=1";
	if (paramm) form[''+paramm].value=value;
	if (paramm2) form[''+paramm2].value=value2;
	if (paramm3) form[''+paramm3].value=value3;
	if (paramm4) form[''+paramm4].value=value4;
	if (paramm5) form[''+paramm5].value=value5;
	
	var xhrArgs = {
		form: form.id,
		handleAs: "json", //"text",
		load: function(data) {
			form.action = oldAction;
			//vyctu a zobrazim odpoved
			if (data.err) {
				hideAjaxLoader();
				alert(data.err);
			}
			if (data.obj) {
				for (var i = 0; i < data.obj.length; i++) {
					if (typeof(data.obj[i].iHTML) != "undefined") {
						var _el = dojo.byId(data.obj[i].id);
						_el.innerHTML = data.obj[i].iHTML;
						dojo.parser.parse(_el);
					}
				}
			}
			hideAjaxLoader();
		},
		error: function(error) {
			form.action = oldAction;
			hideAjaxLoader();
			alert("Chyba při komunikaci se serverem.");
		}
	}
	var deferred = dojo.xhrPost(xhrArgs);
	showAjaxLoader();
}

