dojo.require("dojo.fx");

function simpleToggle(id1, id2) {
	var firstdiv = dojo.byId(id1);
	var seconddiv = dojo.byId(id2);

	if (seconddiv.style.display == 'none') {
		firstdiv.style.display = 'none';
		seconddiv.style.display = 'block';
	} else {
		seconddiv.style.display = 'none';
		firstdiv.style.display = 'block';
	}
}

function toggle(nodeId) {
	var toggler = new dojo.fx.Toggler({
		node : nodeId,
		showFunc : dojo.fx.wipeIn,
		hideFunc : dojo.fx.wipeOut
	});

	var node = dojo.byId(nodeId);

	if (node.style.display == 'none') {
		toggler.show();
	} else {
		toggler.hide();
	}
}

function toggleComment() {
	var editor = document.getElementById("editor");
	if (editor.style.display == 'none') {
		editor.style.display = 'block';
	} else {
		editor.style.display = 'none';
	}
}

function save(url, data, onLoad) {
	var xhrArgs = {
		url : url,
		postData : dojo.toJson(data),
		handleAs : "json",
		load : onLoad
	};
	var deferred = dojo.xhrPost(xhrArgs);
}

function saveMood(sender, user_id) {
	var data = {
		'id' : sender.id,
		'value' : sender.value
	};
	save("/frontend/nickpage/savemood/user/" + user_id, data);
}

function changeOnline(url) {
	dojo.byId("status").innerHTML = '<img src="/scripts/dojo/dijit/themes/tundra/images/loading.gif">';
	dojo.xhrGet({

		url : url,
		handleAs : "text",
		handle : function(data, args) {
			if (typeof data == "error") {
				console.warn("error!");
				console.log(args);
			} else {
				dojo.byId("status").innerHTML = data;
			}
		}
	});
}

/* Change City */
function changeCitySelect(zip, citySelect, selectedId) {
	if (('' + zip).length != 5) {
		return;
	}

	var xhrArgs = {
		url : "/autocomplete/city/zip/" + zip,
		handleAs : "json",
		load : function(data) {
			var city = dojo.byId(citySelect);
			city.options.length = 0;
			var cities = data.items;
			for ( var i = 0; i < cities.length; i++) {
				var selected = cities[i].id == selectedId;
				city.options[city.length] = new Option(cities[i].name,
						cities[i].id, selected, selected);
			}
		}
	};
	var deferred = dojo.xhrPost(xhrArgs);
}

function changeCitySchoolAndCompany(zip) {
	dijit.byId('city_pane').setHref('/schoolandcompany/city/state/' + zip);
}

function createSearchLink(field, value) {
	var query = field + ':' + value;
	url = '/fronend/search/search/query/' + encodeURIComponent(query);
	return '<a href="' + url + '">' + value + '</a>';
}

function switchSchool(item) {
	if (dijit.byId('school') != null && dijit.byId('city') != null) {
		dijit.byId('school').destroy();
		dojo.destroy('school-label');
		document.getElementById('send').style.display = "none";
		changeLocation(dijit.byId('city'));
	}
}

function changeLocation(item) {
	var school = document.getElementById('isSchool-1').checked;
	dijit.byId('school_pane').setHref(
			'/admin/schoolandcompany/getsac/city/' + item.value + "/isSchool/"
					+ school);
	document.getElementById('send').style.display = "block";
}

function removeactivesubmenuClass(item, time) {
	setTimeout("dojo.query('" + item + "').removeClass(\'activesubmenu\')",
			time);
}

function menuAddactivesubmenuClass(item) {
	dojo.query(".horizontal").removeClass('activesubmenu');
	dojo.query(item).addClass('activesubmenu');
}

var editTarget = "";
var locked = false;
var lastContent = "";
var isCommentFormSubmitting = false;

function synchronizeForm(area_id) {
	if (isCommentFormSubmitting == true) {
		return false;
	}
	tinyMCE.triggerSave();
	var value = tinyMCE.get(area_id).getContent({
		format : 'bbcode'
	});
	tinyMCE.execCommand('mceFocus', false, area_id);
	dojo.byId(area_id).value = value;
	isCommentFormSubmitting = true;
	return true;
}

function newFormSubmit(url, targetDiv) {
	tinyMCE.triggerSave();
	var value = tinyMCE.get('new_content').getContent({
		format : 'bbcode'
	});
	tinyMCE.execCommand('mceFocus', false, 'new_content');
	tinyMCE.execCommand('mceRemoveControl', false, 'new_content');
	dojo.byId('new_content').value = value;

	// submit the form in the background
	dojo.xhrPost({
		url : url,
		form : "new_form",
		handle : function(data, args) {
			if (typeof data == "error") {
				console.warn("error!", args);
			} else {
				if (data.replace(/^\s+/, '').replace(/\s+$/, '') == "saved") {
					window.location.reload();
				} else {
					dojo.byId('new_content').value = tinyMCE.get('new_content')
							.getContent({
								format : 'bbcode'
							});
					tinyMCE.execCommand('mceFocus', false, 'new_content');
					tinyMCE.execCommand('mceRemoveControl', false,
							'new_content');

					dojo.byId(targetDiv).innerHTML = data;
					tinyMCE.execCommand('mceAddControl', false, 'new_content');
					isCommentFormSubmitting = false;
				}
			}
		}
	});
};

var formSubmit = function(url) {
	tinyMCE.triggerSave();

	var value = tinyMCE.get('edit_content').getContent({
		format : 'bbcode'
	});
	tinyMCE.execCommand('mceFocus', false, 'edit_content');
	tinyMCE.execCommand('mceRemoveControl', false, 'edit_content');
	dojo.byId('edit_content').value = value;

	// submit the form in the background
	dojo.xhrPost({
		url : url,
		form : "edit_form",
		handle : function(data, args) {
			if (typeof data == "error") {
				console.warn("error!", args);
			} else {
				dojo.byId(editTarget).innerHTML = data;
				locked = false;
				isCommentFormSubmitting = false;
			}
		}
	});
};

var loadEdit = function(url, id) {
	if (locked == false) {
		locked = true;
		dojo.xhrGet({
				url : url,
				handleAs : "text",
				handle : function(data, args) {
					if (typeof data == "error") {
						console.warn("error!");
						console.log(args);
					} else {
						lastContent = dojo.byId("post_" + id).innerHTML;
						dojo.byId("post_" + id).innerHTML = data;
						tinyMCE.execCommand('mceAddControl', false,
								'edit_content');
						editTarget = "post_" + id;
					}
				}
			});
	}
};

function cancelEdit() {
	tinyMCE.execCommand('mceFocus', false, 'edit_content');
	tinyMCE.execCommand('mceRemoveControl', false, 'edit_content');
	dojo.byId(editTarget).innerHTML = lastContent;
	locked = false;
}

function loadDelete(url, id) {
	dojo.xhrGet({
		url : url,
		handleAs : "text",
		handle : function(data, args) {
			if (typeof data == "error") {
				console.warn("error!");
				console.log(args);
			} else {
				element = document.getElementById('post_' + id);
				element.parentNode.removeChild(element);
			}
		}
	});
}

function loadIndication(postId) {
	dojo.xhrGet({
		url : '/frontend/indication/dialog/postid/' + postId,
		handleAs : "text",
		handle : function(data, args) {
			if (typeof data == "error") {
				console.warn("error!");
				console.log(args);
			} else {
				var dialog = new dijit.Dialog({
					title : "Beitrag melden",
					content : data
				});
				dojo.body().appendChild(dialog.domNode);
				dialog.startup();
				dialog.show();

				dojo.connect(dialog, "show", function(e) {
					dialog.destroy();
				});
			}
		}
	});
}

function addTag(item, tagId) {
	var id = prompt('Bitte geben Sie die Id des Objekts an.', 0);
	if (id != null) {
		tinyMCE.getInstanceById(tagId).getBody().innerHTML = tinyMCE
				.getInstanceById('news_content').getBody().innerHTML
				+ "<p>[" + item + "]" + id + "[/" + item + "]</p>";
	}
}

function addNewPage(tagId) {
	tinyMCE.getInstanceById(tagId).getBody().innerHTML = tinyMCE
			.getInstanceById('news_content').getBody().innerHTML
			+ "<p>[seitenumbruch]</p>";
}

function setEventpicsUrl(url) {
	dijit.byId('eventpics_pane').attr('href', url);
}

function setVideoclipsUrl(url) {
	dijit.byId('videoclips_pane').attr('href', url);
}

function setCommentsUrl(url) {
	dijit.byId('comments_pane').attr('href', url);
}

function toggleTab(tab, prefix, url) {
	dojo.query('li', prefix + '_tabs').removeClass('active');

	dojo.addClass(tab, 'active');

	if (url) {
		dijit.byId(prefix + '_pane').setHref(url);
	}
}

function toggleSimpleTab(tab, prefix, url) {
	dojo.query('li', prefix + '_tabs').removeClass('active');
	dojo.addClass(tab, 'active');

	dojo.query('tbody', prefix).style('display', 'none');
	dojo.style(prefix + '_' + tab, 'display', 'block');
}

function toggleComments(tab) {
	var prefix = 'comments';

	url = '/default/index/comments/param/' + escape(tab.replace(/\//, '_'));

	toggleTab(tab, prefix, url);
}

function toggleNewscenter(tab) {
	var prefix = 'newscenter';

	url = '/default/index/newscenter/param/' + escape(tab.replace(/\//, '_'));

	toggleTab(tab, prefix, url);
}

function showEdit() {
	var editor = document.getElementById("editor");
	editor.style.display = 'block';
}

function changeFlash(youtubeid, dbid, videotitle, pattform) {
	dojo.xhrPost({
		url : "/frontend/video/counter/id/" + dbid,
		handleAs : "json",
		handle : function(data, args) {
		}
	});
	
	if (plattform = 'vimeo') {
		var newDiv = "<center>";
		newDiv += "<iframe src=\"http://player.vimeo.com/video/" + youtubeid + "?byline=0&amp;portrait=0\" width=\"612\" height=\"344\" frameborder=\"0\">";
		newDiv += "</iframe></center>";			
	} else {
		var newDiv = "<center><object width=\"425\" height=\"344\">";
		newDiv += "<param name=\"movie\" value=\"http://www.youtube.com/v/"
				+ youtubeid + "\" />";
		newDiv += "<param name=\"quality\" value=\"high\" />";
		newDiv += "<embed src=\"http://www.youtube.com/v/"
				+ youtubeid
				+ "\" width=\"425\" height=\"344\" type=\"application/x-shockwave-flash\" />";
		newDiv += "</object></center>";		
	}
	
	videoDialog = new dijit.Dialog({
		title : videotitle,
		content : newDiv
	});
	dojo.body().appendChild(videoDialog.domNode);
	videoDialog.startup();
	videoDialog.show();

	dojo.connect(videoDialog, "hide", function(e) {
		videoDialog.destroy();
	});

}

/* UserInfoBox */

var onLink = false;
var onDiv = false;
var lastId = 0;

function linkIn(id, element) {
	onLink = true;

	if (lastId != id && lastId != 0) {
		var oldDiv = dojo.byId("userinfobox_" + lastId);
		oldDiv.setAttribute("class", "infoboxhide");
		oldDiv.setAttribute("className", "infoboxhide");
	}

	var box = dojo.byId("userinfobox_" + id);

	if (box == null || box == undefined) {
		var xhrParam = {
			url : "/userinfobox/index/user/" + id,
			sync : true,
			load : function(data) {
				box = dojo.place(data, dojo.body());
			},
			error : function(error) {
				console.log("An unexpected error occurred: " + error);
			}
		};
		dojo.xhrGet(xhrParam);
		box = dojo.byId("userinfobox_" + id);
	}

	box.setAttribute("class", "infoboxshow");
	box.setAttribute("className", "infoboxshow");

	var coordinate = dojo.position(element, true);
	var viewport = dijit.getViewport();

	if ((coordinate.x + 300) > (viewport.l + viewport.w)) {
		box.style.left = coordinate.x - 300 + "px";
	} else {
		box.style.left = coordinate.x + "px";
	}

	if ((coordinate.y + 160) > (viewport.t + viewport.h)) {
		box.style.top = coordinate.y - 160 + "px";
	} else {
		box.style.top = (coordinate.y + element.offsetHeight) + "px";
	}

	lastId = id;
}

function linkOut(id) {
	onLink = false;
	setTimeout('hideUserInfoBox(' + id + ')', 1500);
}

function divIn(id, element) {
	onDiv = true;
}

function divOut(id) {
	onDiv = false;
	setTimeout('hideUserInfoBox(' + id + ')', 1500);
}

function hideUserInfoBox(id) {
	if (!onLink && !onDiv) {
		var box = dojo.byId("userinfobox_" + id);
		box.setAttribute("class", "infoboxhide");
		box.setAttribute("className", "infoboxhide");
	}
}

function openEAV(target) {
	dojo.query('.eav_view', target).addClass('hidden');
	dojo.query('.eav_editor', target).removeClass('hidden');

	var targetNode = dojo.byId(target);

	dojo.query('.eav_editor_value', targetNode).forEach(
			function(entry, i) {
				if (entry.nodeName == 'TEXTAREA') {
					tinyMCE.execCommand('mceAddControl', false,
							entry.attributes.id.value);
				}
			});
}

function closeEAV(target) {
	dojo.query('.eav_view', target).removeClass('hidden');
	dojo.query('.eav_editor', target).addClass('hidden');
}

function abortEAV(target) {
	var targetNode = dojo.byId(target);

	dojo
			.query('.eav_editor_value', targetNode)
			.forEach(
					function(entry, i) {
						switch (entry.nodeName) {
						case 'INPUT':
							var inputType = entry.attributes.type.value;
							switch (inputType) {
							case 'text':
								entry.value = eav[entry.attributes.id.value].value;
							case 'checkbox':
								entry.checked = eav[entry.attributes.id.value].value;
								break;
							default:
								console.log('abortEAV switch INPUT switch '
										+ inputType);
								break;
							}
							;
							break;
						case 'TEXTAREA':
							tinyMCE.execCommand('mceRemoveControl', false,
									entry.attributes.id.value);
							entry.value = eav[entry.attributes.id.value].value;
							break;
						case 'SELECT':
							entry.value = eav[entry.attributes.id.value].value;
							break;
						case 'UL':
							dojo.empty(entry);

							dojo
									.forEach(
											eav[entry.attributes.id.value].value,
											function(v) {
												if (eav[entry.attributes.id.value].type[1] == 'url') {
													var li = dojo.create('li',
															{}, entry, 'last');
													dojo.create('a', {
														href : v,
														innerHTML : v
													}, li, 'last');
												} else {
													dojo
															.create(
																	'li',
																	{
																		innerHTML : createSearchLink(
																				propertyName,
																				v)
																	}, entry,
																	'last');
												}
											});
							break;
						default:
							console.log('abortEAV switch ' + entry.nodeName);
							break;
						}
						;
					});

	closeEAV(target);
}

function refreshEAV(target) {
	var targetNode = dojo.byId(target);

	dojo.query('.eav_view_value', targetNode).forEach(
			function(node, i) {
				var propertyName = node.id.replace(/_value$/g, '');
				var eavEntry = eav[propertyName];
				if (eavEntry) {
					switch (eavEntry.render) {
					case 'text':
					case 'select':
						node.innerHTML = createSearchLink(eavEntry.key,
								eavEntry.value);
						break;
					case 'checkbox':
						node.checked = eavEntry.value;
						break;
					case 'editor':
						node.innerHTML = eavEntry.rendered;
						break;
					case 'listing':
						dojo.empty(node);
						dojo.forEach(eavEntry.rendered, function(v) {
							if (eavEntry.type[1] == 'url') {
								var li = dojo.create('li', {}, node, 'last');
								dojo.create('a', {
									href : v,
									innerHTML : v
								}, li, 'last');
							} else {
								dojo.create('li', {
									innerHTML : createSearchLink(eavEntry.key,
											v)
								}, node, 'last');
							}
						});
						break;
					default:
						console.log('refreshEAV switch ' + eavEntry.render);
						break;
					}
				} else {
					console.log('refreshEAV if ' + propertyName);
				}
			});
}

function saveEAV(target) {
	var targetNode = dojo.byId(target);

	var values = new Object();

	dojo
			.query('.eav_editor_value', targetNode)
			.forEach(
					function(entry, i) {
						switch (entry.nodeName) {
						case 'INPUT':
							var inputType = entry.attributes.type.value;
							switch (inputType) {
							case 'text':
								values[entry.attributes.id.value] = {
									value : entry.value
								};
								break;
							case 'checkbox':
								values[entry.attributes.id.value] = {
									value : entry.checked
								};
								break;
							default:
								console.log('saveEAV switch INPUT switch '
										+ inputType);
								break;
							}
							;
							break;
						case 'TEXTAREA':
							tinyMCE.execCommand('mceRemoveControl', false,
									entry.attributes.id.value);
							values[entry.attributes.id.value] = {
								value : dojox.html.entities.decode(entry.value)
							};
							break;
						case 'SELECT':
							values[entry.attributes.id.value] = {
								value : entry.options[entry.selectedIndex].value
							};
							break;
						case 'UL':
							values[entry.attributes.id.value] = {
								value : new Array()
							};

							dojo.query('input', entry).forEach(
									function(input) {
										values[entry.attributes.id.value].value
												.push(input.value);
									});
							break;
						default:
							console.log('saveEAV switch ' + entry.nodeName);
							break;
						}
						;
					});

	var updateEAV = function(data) {
		for ( var propertyName in data) {
			var value = eav[propertyName].value = data[propertyName].value;
			var rendered = eav[propertyName].rendered = data[propertyName].rendered;
		}
		refreshEAV(target);
		closeEAV(target);
	};

	saveEAVValue(values, updateEAV);
}

function addListItem(sender) {
	if (sender == null) {
		return;
	}
	var container = sender.parentNode.parentNode;
	var p = dojo.create('p', null, container);
	createListingInput(p);

	return;
}

function deleteListItem(sender) {
	if (sender == null || sender.parentNode.parentNode.childElementCount == 1) {
		return;
	}

	dojo.destroy(sender.parentNode);
}

function createListingInput(node, initialValue) {
	if (initialValue == undefined || initialValue == null) {
		dojo.create('input', { type : 'text'}, node, 'last');
	} else {
		dojo.create('input', { type : 'text', value : initialValue }, node, 'last');
	}
	dojo.create('img', { onclick : 'deleteListItem(this);', src : '/images/ico/icon_del_account.gif' }, node, 'last');
	dojo.create('img', { onclick : 'addListItem(this);', src : '/images/ico/icon_add.gif' }, node, 'last');
}

function isURL(url) {
	return url.match(/^https?:\/\/[a-z0-9-\.]+\.[a-z]{2,4}\/?([^\s<>\#%"\,\{\}\\|\\\^\[\]`]+)?$/);
}

function changeDivVisibility(item, divId) {
	if (item.value == "true") {
		document.getElementById(divId).style.display = "block";
	} else {
		document.getElementById(divId).style.display = "none";
	}
}

function setPrice(item) {	
	var box0 = dijit.byId('price');
	var box1 = dijit.byId('preselling_price');
	
	if (item.checked ) {
		box0.attr("value",0);
		box1.attr("value",0);
		box0.attr("readOnly",true);
		box1.attr("readOnly",true);
		}
	else {
		box0.attr("value","");
		box1.attr("value","");
		box0.attr("readOnly",false);
		box1.attr("readOnly",false);
	}
}

function changeCity(item, url, kind) {
    http_request = false;

    if (window.XMLHttpRequest) { // Mozilla, Safari,...
        http_request = new XMLHttpRequest();
    } else if (window.ActiveXObject) { // IE
        try {
            http_request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (e) {
            try {
                http_request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (e) {}
        }
    }

    if (!http_request) {
        alert('Ende :( Kann keine XMLHTTP-Instanz erzeugen');
        return false;
    }

    http_request.open('GET', url+item.value, true);
    if ( kind == "zip") {   
    	http_request.onreadystatechange = changeIt;
    	document.getElementById('zip_temp').value = item.value;
    } else {
    	http_request.onreadystatechange = changeLoc;
    	document.getElementById('geodb').value = item.value;
    }
    http_request.send(null);
}

function changeIt()  {
	if (http_request.readyState == 4) {
        var answer = http_request.responseText;
        
        var temp = new Array();
        temp = answer.split(';');

        var options = new dojo.data.ItemFileWriteStore({data: {identifier: 'id', items:[]}});
         
        for ( i = 0; i < temp.length / 2; i++) {
        	options.newItem({ id: temp[2*i], name:  temp[2*i +1] });
        }
        dijit.byId('city').attr('store', options);
		
        if (temp.length > 0) {
            var foundValue = false;
            var currentCity = dijit.byId('city').getValue();
        	for ( i = 0; i < temp.length / 2; i++) {
        		var itemId = temp[2*i];
        		if (currentCity == itemId) {
        			foundValue = true;
        		}
        	}
        	if (foundValue == false) {
        		dijit.byId('city').setValue(temp[0]);
        	}
         }
    }
}

function changeLoc()  {
	if (http_request.readyState == 4) {
    	var answer = http_request.responseText;
       	var temp = new Array();
      	temp = answer.split(';');
       	var options = new dojo.data.ItemFileWriteStore({data: {identifier: 'id', items:[]}});
       
       	for ( i = 0; i < temp.length / 2; i++) {
    		options.newItem({ id: temp[2*i], name:  temp[2*i +1] });
       	}

	 	dijit.byId('location').attr('store', options);

	 	if (temp.length > 0) {
			dijit.byId('location').setValue(temp[0]);
       	}
	}
}

function updateCityName(item, url) {
	document.getElementById('city_name').value = item.attr('displayedValue');
	changeCity(item, url, "loc");	
}

function updateLocId(item) {
	document.getElementById('loc_id').value = item.value;
}

//Initialize event depending on browser
function initReady(fn)
{
	//other brothers
	if(document.addEventListener) {
    	document.addEventListener("DOMContentLoaded", fn, false);
  	}
	//IE
	else {
    	document.onreadystatechange = function(){readyState(fn)}
  	}
}

//IE execute function
function readyState(func)
{
	// DOM is ready
	if(document.readyState == "interactive" || document.readyState == "complete")
	{
		func();
	}
}

//do when DOM is ready to hide elements on error-reload
function onReady()
{
	var zettel = document.getElementById('zettel-false');
	var team = document.getElementById('team-false');
	
	if ( zettel != "" && zettel.checked == true) {
		document.getElementById('zettel_url-label').style.display = "none";
		document.getElementById('zettel_url').style.display = "none";
	}

	if ( team != "" && team.checked == true) {
		document.getElementById('organizer_field').style.display = "none";
	}

	if ( document.getElementById('geodb').value != "") {
		dijit.byId('zip').setAttribute('displayedValue', document.getElementById('zip_temp').value);
	}	
}

