/*
phpBookWorm: main.js

Build: 20110615
Copyright: CC-BY-SA 3.0, 2008-2011

Author:
Udo Neist (webmaster@singollo.de, GPG-Fingerprint 4A8F B229 2AE9 9634 04D1 E2F0 21F2 E27D FE97 D87F)
*/

dojo.require("dijit.dijit");

dojo.require("dojo._base.query");

dojo.require("dojo.io.iframe");
dojo.require("dijit.PopupMenuItem");
dojo.require("dojo.regexp");

dojo.require("dijit.Dialog");
dojo.require("dijit.Tooltip");
dojo.require("dijit.layout.ContentPane");
dojo.require("dijit.layout.TabContainer");

dojo.require("dijit.form.Form");
dojo.require("dijit.form.TextBox");
dojo.require("dijit.form.ValidationTextBox");
dojo.require("dijit.form.FilteringSelect");
dojo.require("dijit.form.DateTextBox");
dojo.require("dijit.form.TimeTextBox");
dojo.require("dijit.form.Button");
dojo.require("dijit.form.CheckBox");
dojo.require("dijit.form.ComboBox");
dojo.require("dijit.form.SimpleTextarea");

dojo.require("dijit.Editor");
dojo.require("dijit._editor.plugins.AlwaysShowToolbar");
dojo.require("dijit._editor.plugins.FontChoice");
dojo.require("dijit._editor.plugins.LinkDialog");

dojo.require("dojox.image.Lightbox");
dojo.require("dojox.validate.regexp");
dojo.require("dojox.form.FileInputAuto");

dojo.require("dojo.parser");

// Installationspfad global zur Verfügung stellen (erspart jedesmal den Aufruf von path());
var path = path();

function path() {
/*
	Ermittelt den Installationspfad

	* Variablen
	keine

	* Rückgabe
	path: Basispfad
*/
	var path = window.location.pathname;
	path = path.substring(0,path.lastIndexOf("/")+1);
	return path;
}

function init() {
/*
	Startfunktion

	* Variablen
	keine

	* Rückgabe
	true
*/

	// Tooltip-Position definieren
	dijit.Tooltip.defaultPosition=['after','before'];

	// Erweitert dijit.Dialog um eine Funktion setTitle
	dojo.extend(dijit.Dialog,{
		setTitle: function(title) {this.titleNode.innerHTML = title;}
	});

	if (dojo.byId("menu")) dojo.byId("menu").style.opacity='1';
	if (dijit.byId("login")) {
		/*
			Wenn das Dialogfenster "Login" vorhanden ist, dann wird es mit dem 
			Event "onclick" auf dem Abbruch-Button/ESC-Taste verknüpft. Dies 
			lädt die Seite neu, anstelle eine weiße Seite zu hinterlassen.
		*/
		var node = dojo.query(".dijitDialogCloseIcon");
		var handle = dojo.connect(node[0], "onclick", function(e){
			window.location.href=path;
		});
		dijit.byId("login").show();
	}
	if (dijit.byId("content")) {
		// Prüft, ob ein Opt-In-Verfahren läuft...
		if (window.location.pathname.lastIndexOf("/login=")>0) {
			// Falls ja, dann entsprechende Routine aufrufen
			content('user_optin');
		}else{

			// Deeplinks

			var url = new Array();
			url['main'] = 'main';
			url['about'] = 'about';
			url['portfolio'] = 'portfolio.php';
			url['kalender'] = 'kalender';
			url['links'] = 'links.php';
			url['contact'] = 'contact.php';
			url['guestbook'] = 'guestbook';
			url['impressum'] = 'impressum';

			var browserHREF = window.location.href;
			var site4view = browserHREF.split("q=");
			if (site4view) var site = site4view[1];
			if (!site) var site='main';

			content(url[site]);
		}
	}
	/*
		Existiert der Dialog "Intro" (vlib_welcome.html), so wird dieses angezeigt und 
		nach 8 Sekunden wieder geschlossen.
	*/
	if (dijit.byId("intro")) {
		showDlg("intro");
		setTimeout("hideDlg('intro')",8000);
	}
	return true;
}

function showDlg(dlg) {
/*
	Dialog einblenden

	* Variablen
	dlg: ID des Dialogs

	* Rückgabe
	true
*/
	if (dojo.byId(dlg)) {
		dijit.byId(dlg).show();
		dojo.byId(dlg).style.display = 'block';
		return true;
	}else{
		return false;
	}
}

function hideDlg(dlg) {
/*
	Dialog ausblenden

	* Variablen
	dlg: ID des Dialogs

	* Rückgabe
	true
*/
	if (dojo.byId(dlg)) {
		dijit.byId(dlg).hide();
		dojo.byId(dlg).style.display = 'none';
		return true;
	}else{
		return false;
	}
}

function dialogError(_txt,_module) {
/*
	Fehlerdialog anzeigen

	* Variablen
	_txt: Fehlertext (wird benötigt!)
	_module: Aufgerufene Funktion (optional)

	* Rückgabe
	true oder false (wenn _txt und Dialog "ErrorText" nicht definiert wurden)
*/
	if ((!_txt || _txt.length==0) && !dijit.byId('ErrorText')) return false;
	if (_module.length>0) _txt = _txt  + " [function: " + _module +"]";
	dijit.byId('ErrorText').attr({'content':_txt});
	showDlg('ErrorDialog');
	setTimeout("hideDlg('ErrorDialog')",15000);
	return true;
}

function content(_url) {
/*
	Content

	* Variablen
	_url: URL (wird benötigt!)

	* Rückgabe
	Inhalt im Block 'content' oder Login/Logout
*/
	if (!_url || _url.length==0) return false;

	if (_url=='login') {
		window.location.href='login';
		return false;
	}
	if (_url=='logout') {
		window.location.href='index.php?logout';
		return false;
	}

	if (_url=='forum/forum.php') {
		window.location.href=_url;
		return false;
	}

	if (dijit.byId('kalender')) dijit.byId('kalender').destroyRecursive();
	if (dijit.byId('nogallery')) dijit.byId('nogallery').destroyRecursive();

	if (_url.indexOf(".php")>0) {
		var data = {
			url:path+_url,
			load: function(response, ioArgs){
				dijit.byId('content').attr({'content':response});
				if (dijit.byId('linkheadline')) showLinks();
				return response;
			},
			error: function(response, ioArgs){
				dialogError(response,'content');
				return response;
			}
		};
	}else{
		var data = {
			url:path+'templates/vlib_'+_url+'.html',
			load: function(response, ioArgs){
				dijit.byId('content').attr({'content':response});
				return response;
			},
			error: function(response, ioArgs){
				dialogError(response,'content');
				return response;
			}
		};
	}

	if (data) dojo.xhrGet(data);
}

function redaktion(_url) {
/*
	Redaktionsbereich

	* Variablen
	_url: URL (wird benötigt!)

	* Rückgabe
	Inhalt im Block 'content' oder eine Fehlermeldung, wenn die Funktion noch nicht existiert.
	Bei Logout wird die Seite neu geladen
*/
	if (!_url || _url.length==0 || _url==0) return false;

	if (_url=='news') {
		_url = path + 'news.php?new';
	}else if (_url=='galerie') {
		_url = path + 'picofmonth.php';
	}else if (_url=='kalender') {
		_url = path + 'kalender.php?new';
	}else if (_url=='kontakt') {
		dialogError('Diese Funktion steht Ihnen noch nicht zur Verfügung.','');
		return false;
	}else if (_url=='gaestebuch') {
		dialogError('Diese Funktion steht Ihnen noch nicht zur Verfügung.','');
		return false;
	}else if (_url=='portfolio') {
		_url = path + 'portfolio.php?edit';
	}else if (_url=='templates') {
		_url = path + 'templates.php';
	}else if (_url=='links') {
		_url = path + 'links.php?new';
	}else if (_url=='raumbelegung') {
		window.location.href='mrbs/index.php';
	}else if (_url=='anleitung') {
		_url = path + 'documents.php';
	}else if (_url=='logout') {
		window.location.href='index.php?logout';
	}else{
		return false;
	}

	if (_url.indexOf(".php")>0) {
		var data = {
			url:_url,
			load: function(response, ioArgs){
				dijit.byId('RedContent').attr({'content':response});
				showDlg('dlgRedContent');
				return response;
			},
			error: function(response, ioArgs){
				dialogError(response,'redaktion');
				return response;
			}
		};
		dojo.xhrGet(data);
	}else{
		return false;
	}
}

function getText(_txt,_values) {
/*
	Formularverarbeitung

	* Variablen
	_txt: Funktion (wird benötigt!)
	_values: Werte (optional, da sonst das passende Formular anhand von _txt gewählt wird)

	* Rückgabe
	Inhalt im Block 'content'
*/
	if (!_txt || _txt.length==0) return false;

	hideDlg('dlgRedContent');

	if (_txt=='news' && (!dijit.byId('frmTitle').validate() || dijit.byId('frmText').value == '')) var error=true;
	if (_txt=='newsedit' && (!dijit.byId('frmEditTitle').validate() || dijit.byId('frmEditText').value == '')) var error=true;
	if (_txt=='kalender' && (!dijit.byId('frmTitle').validate() || !dijit.byId('frmDate').validate() || !dijit.byId('frmTime').validate() || !dijit.byId('frmShortText').validate())) var error=true;
	if (_txt=='portfolioedit' && !dijit.byId('frmEmail').validate()) var error=true;
	if (_txt=='useredit' && (!dijit.byId('frmNick').validate() || !dijit.byId('frmEmail').validate())) var error=true;
	if (_txt=='contact' && (dijit.byId('frmContactName').value == '' || dijit.byId('frmContactSubject').value == '' || dijit.byId('frmContactBody').value == '' || !dijit.byId('frmContactMail').validate())) var error=true;
	if (_txt=='guestbook' && (dijit.byId('frmGuestbookName').value == '' || dijit.byId('frmGuestbookSubject').value == '' || dijit.byId('frmGuestbookBody').value == '')) var error=true;
	if (_txt=='templateedit' && dijit.byId('frmTemplateText').value == '') var error=true;
	if (_txt=='links' && (!dijit.byId('frmName').validate() || dijit.byId('frmURL').value == '')) var error=true;
	if (_txt=='linksedit' && (!dijit.byId('frmEditName').validate() || dijit.byId('frmEditURL').value == '')) var error=true;
	if (_txt=='picofmonth' && (dijit.byId('frmMonat').value.length <6 || dijit.byId('frmFile').value == '')) var error=true;

	if (error==true && dojo.byId('fehler')) {
		if (_txt=='news' || _txt=='newsedit') var titel='Nachrichten';
		if (_txt=='kalender' || _txt=='kalenderedit') var titel='Kalender';
		if (_txt=='portfolioedit') var titel='Portfolio';
		if (_txt=='picofmonth') var titel='Bild des Monats';
		if (_txt=='useredit') var titel='Benutzer';
		if (_txt=='contact') var titel='Kontakt';
		if (_txt=='templateedit') var titel='Templates';
		if (_txt=='links' || _txt=='linksedit') var titel='Links';
		dijit.byId('fehler').setTitle('<img src="cache/icons/dialog-error.png"" class="icons">'+titel);
		showDlg('fehler');
		setTimeout("hideDlg('fehler')",5000);
		return false;
	}else if (_txt=='guestbook' || _txt=='contact' || _txt=='kalender' || _txt=='kalenderedit' || _txt=='news' || _txt=='newsedit' || _txt=='portfolioedit' || _txt=='picofmonth' || _txt=='useredit' || _txt=='templateedit' || _txt=='links' || _txt=='linksedit') {

		if (!_values || _values.length==0) {
			_values = dijit.byId('frm'+_txt).getValues();
		} else {
			_values = dojo.fromJson(_values);
		}

		if (_txt=='newsedit') _txt='news';
		if (_txt=='kalenderedit') _txt='kalender';
		if (_txt=='portfolioedit') _txt='portfolio';
		if (_txt=='useredit') _txt='user';
		if (_txt=='templateedit') _txt='templates';
		if (_txt=='linksedit') _txt='links';

		var data = {
			url:path + _txt + '.php',
			content: _values,
			load: function(response, ioArgs){
				if (dijit.byId('guestbook')) {
					dijit.byId('guestbook').refresh();
				}else{
					dijit.byId('content').attr({'content':response});
				}
				if (dijit.byId('linkheadline')) showLinks();
				return response;
			},
			error: function(response, ioArgs){
				dialogError(response,_txt + '::getText');
				return response;
			}
		};

		if (data) dojo.xhrPost(data);
		if (dijit.byId('frmnews')) dijit.byId('frmnews').destroyRecursive();
		if (dijit.byId('frmkalender')) dijit.byId('frmkalender').destroyRecursive();
		if (dijit.byId('frmlinks')) dijit.byId('frmlinks').destroyRecursive();
	}else{
		return false;
	}
}

function checkPass(dojoTxt1, dojoTxt2) {
	return dojoTxt1.getValue() == dojoTxt2.getValue();
}

function checkPassLength(dojoTxt, _length) {
	var val = dojoTxt.getValue();
	return val.length==_length;
}

function selectUserID(_idx) {
/*
	Benutzerverwaltung

	* Variablen
	_idx: Index (wird benötigt!)

	* Rückgabe
	Formular
*/

	if (!_idx || _idx=='') return false;
	dojo.xhrGet( {
		// The following URL must match that used to test the server.
		url:path + 'user.php',
		content: {'edit': _idx},
		load: function(response, ioArgs) {
			dijit.byId('contentuser').attr({'content':response});
			return response;
		},
		error: function(response, ioArgs){
			dialogError(response,'user::selectUserID');
			return response;
		}
	});
}

function selectUserFunctions() {
	console.log(dijit.byId('s_pass_reset').checked);
	if (dijit.byId('s_pass_reset').checked==true) {
		dojo.byId('frmrights').style.display='none';
		dojo.byId('frmrights2').style.display='block';
	}else{
		dojo.byId('frmrights').style.display='block';
		dojo.byId('frmrights2').style.display='none';
	}
}

function selectTemplate(txt) {
/*
	Template

	* Variablen
	txt: Element

	* Rückgabe
	Formular
*/

	if (dijit.byId(txt.id).attr('value')) {
		// Holt die Infos zur aktuellen Position
		var page = dijit.byId(txt.id).attr('value');
		document.getElementById('frmTemplateReload').setAttribute('page',page);
		txt.reset();
	}else{
		return false;
	}

	var url = page.split(':');
	url = ((typeof(url[1])!='undefined') ? url[0] + '/vlib_' + url[1] : 'vlib_' +url[0]);

	dijit.byId('frmTemplateLegend').attr({'content':url + '.html'});
	dijit.byId('frmTemplateURL').attr({'value':url + '.html'});

	var data = {
		url:path+'templates/'+ url + '.html',
		load: function(response, ioArgs) {
			dijit.byId('frmTemplateText').attr({'value':response});
			return response;
		}
	}; 

	dojo.xhrGet(data);

	return true;
}

function loadContent(_txt) {
/*
	Formularverarbeitung

	* Variablen
	_txt: Funktion (wird benötigt!)

	* Rückgabe
	Lädt die Listen zur Bearbeitung
*/
	if (_txt && (_txt=='newsedit' || _txt=='kalenderedit' || _txt=='portfolioedit'|| _txt=='linksedit')) {

		if (_txt=='linksedit') _txt='links';
		if (_txt=='newsedit') _txt='news';
		if (_txt=='kalenderedit') _txt='kalender';
		if (_txt=='portfolioedit') _txt='portfolio';

		var data = {
			url: path + _txt + '.php',
			content: {'edit': 'list'},
			load: function(response, ioArgs){
				if (dijit.byId('linksedit')) var _txt= 'linksedit';
				if (dijit.byId('newsedit')) var _txt= 'newsedit';
				if (dijit.byId('kalenderedit')) var _txt= 'kalenderedit';
				if (dijit.byId('portfolioedit')) var _txt= 'portfolioedit';
				dijit.byId(_txt).attr({'content':response});
				return response;
			},
			error: function(response, ioArgs){
				hideDlg('dlgRedContent');
				if (dijit.byId('linksedit')) var _txt= 'linksedit';
				if (dijit.byId('newsedit')) var _txt= 'newsedit';
				if (dijit.byId('kalenderedit')) var _txt= 'kalenderedit';
				if (dijit.byId('portfolioedit')) var _txt= 'portfolioedit';
				dialogError(response,_txt + '::loadContent');
				return response;
			}
		};
		if (data) dojo.xhrGet(data);
	} else {
		return false;
	}
}

function editIdx(_idx,_txt) {
/*
	Formularverarbeitung

	* Variablen
	_idx: ID (wird benötigt!)
	_txt: Funktion (wird benötigt!)

	* Rückgabe
	Übergibt die ID des zu bearbeitenden Eintrags
*/
	if (!_idx || _idx.length==0) return false;

	if (dijit.byId('frmeditnews')) dijit.byId('frmeditnews').destroyRecursive();
	if (dijit.byId('frmeditkalender')) dijit.byId('frmeditkalender').destroyRecursive();

	if (_txt && (_txt=='kalender' || _txt=='news' || _txt=='portfolio' || _txt=='links')) {
		var data = {
			url: path + _txt + '.php',
			content: {'edit': _idx},
			load: function(response, ioArgs){
				if (dijit.byId('linksedit')) var _txt= 'linksedit';
				if (dijit.byId('newsedit')) var _txt= 'newsedit';
				if (dijit.byId('kalenderedit')) var _txt= 'kalenderedit';
				if (dijit.byId('portfolioedit')) var _txt= 'portfolioedit';
				dijit.byId(_txt).attr({'content':response});
				return response;
			},
			error: function(response, ioArgs){
				hideDlg('dlgRedContent');
				if (dijit.byId('linksedit')) var _txt= 'linksedit';
				if (dijit.byId('newsedit')) var _txt= 'newsedit';
				if (dijit.byId('kalenderedit')) var _txt= 'kalenderedit';
				if (dijit.byId('portfolioedit')) var _txt= 'portfolioedit';
				dialogError(response,_txt + '::editIdx');
				return response;
			}
		};
		if (data) dojo.xhrGet(data);
	} else {
		return false;
	}
}

function deleteIdx(_idx,_txt) {
/*
	Formularverarbeitung

	* Variablen
	_idx: ID (wird benötigt!)
	_txt: Funktion (wird benötigt!)

	* Rückgabe
	Übergibt die ID des zu löschenden Eintrags
*/
	if (!_idx || _idx.length==0) return false;

	if (_txt && (_txt=='kontakt' || _txt=='kalender' || _txt=='news' || _txt=='links')) {
		var data = {
			url: path + _txt + '.php',
			content: {'del': _idx},
			load: function(response, ioArgs){
				if (dijit.byId('linksedit')) var _txt= 'linksedit';
				if (dijit.byId('newsedit')) var _txt= 'newsedit';
				if (dijit.byId('kalenderedit')) var _txt= 'kalenderedit';
				if (dijit.byId('kontaktedit')) var _txt= 'kontaktedit';
				dijit.byId(_txt).attr({'content':response});
				return response;
			},
			error: function(response, ioArgs){
				hideDlg('dlgRedContent');
				if (dijit.byId('linksedit')) var _txt= 'linksedit';
				if (dijit.byId('newsedit')) var _txt= 'newsedit';
				if (dijit.byId('kalenderedit')) var _txt= 'kalenderedit';
				if (dijit.byId('kontaktedit')) var _txt= 'kontaktedit';
				dialogError(response,_txt + '::deleteIdx');
				return response;
			}
		};
		if (data) dojo.xhrGet(data);
		if (dijit.byId(_txt+'edit')) loadContent(_txt+'edit');
	} else {
		return false;
	}
}

function showLinks(txt) {
/*
	Zeigt die Weblinks an

	* Variablen
	txt: Element

	* Rückgabe
	Weblinks der entsprechenden Kategorie
*/
	
	var category = ((txt) ? document.getElementById(txt.id).getAttribute('category') : 1);

	// Überschrift umschreiben
	dijit.byId('linkheadline').attr({'content':'Links: ' + document.getElementById('links'+category).innerHTML});

	var nodes = dojo.query("#linksliste dl");
	for(var i = 0; i < nodes.length; i++) {
		nodes[i].style.display = ((nodes[i].getAttribute('category')==category) ? 'block' : 'none');
	}
}

function checkEditCalendar() {
/*
	Prüft das Kalenderformular nach dem Editeren

	* Variablen
	keine

	* Rückgabe
	Schaltet den Absende-Button frei
*/
	if (dijit.byId('frmEditTitle').value=='' || dijit.byId('frmDEditate').value=='' || dijit.byId('frmEditTime').value=='' || dijit.byId('frmEditShortText').value=='') {
		dijit.byId('frmEditCalendarOk').attr({'disabled':true});
	}else{
		dijit.byId('frmEditCalendarOk').attr({'disabled':false});
	}
}

function checkCalendar() {
/*
	Prüft das Kalenderformular

	* Variablen
	keine

	* Rückgabe
	Schaltet den Absende-Button frei
*/
	if (dijit.byId('frmTitle').value=='' || dijit.byId('frmDate').value=='' || dijit.byId('frmTime').value=='' || dijit.byId('frmShortText').value=='') {
		dijit.byId('frmCalendarOk').attr({'disabled':true});
	}else{
		dijit.byId('frmCalendarOk').attr({'disabled':false});
	}
}

function checkEditLinks() {
/*
	Prüft das Weblinks-Formular nach dem Editeren

	* Variablen
	keine

	* Rückgabe
	Schaltet den Absende-Button frei
*/
	if (dijit.byId('frmEditName').value=='' || dijit.byId('frmEditURL').value=='') {
		dijit.byId('frmEditLinksOk').attr({'disabled':true});
	}else{
		dijit.byId('frmEditLinksOk').attr({'disabled':false});
	}
}

function checkEditNews() {
/*
	Prüft das Nachrichtenformular nach dem Editeren

	* Variablen
	keine

	* Rückgabe
	Schaltet den Absende-Button frei
*/
	if (dijit.byId('frmEditTitle').value=='' || dijit.byId('frmEditText').value=='') {
		dijit.byId('frmEditNewsOk').attr({'disabled':true});
	}else{
		dijit.byId('frmEditNewsOk').attr({'disabled':false});
	}
}

function checkNews() {
/*
	Prüft das Nachrichtenformular

	* Variablen
	keine

	* Rückgabe
	Schaltet den Absende-Button frei
*/
	if (dijit.byId('frmTitle').value=='' || dijit.byId('frmText').value=='') {
		dijit.byId('frmNewsOk').attr({'disabled':true});
	}else{
		dijit.byId('frmNewsOk').attr({'disabled':false});
	}
}

function showGoogleMaps(address,text,termin) {
/*
	Zeigt eine Karte mittels Google Maps an.

	* Variablen
	address (string): Adresse im Klartext

	* Rückgabe
	Dialogfenster mit Karte oder Fehlermeldung
*/

	if (GBrowserIsCompatible()) {
		dijit.byId('map').setTitle(text);
		showDlg('map');

		function addAddressToMap(response) {
			map.clearOverlays();
			if (!response || response.Status.code != G_GEO_SUCCESS) {
				dijit.byId('karte').attr({'content':"Adresse konnte nicht gefunden werden."});
			} else {
				place = response.Placemark[0];
				point = new GLatLng(place.Point.coordinates[1],	place.Point.coordinates[0]);
				map.setCenter(point,16);
				map.addControl(new GLargeMapControl());
				map.addControl(new GMapTypeControl());
				map.getDefaultUI();
				marker = new GMarker(point);
				map.addOverlay(marker);
				marker.openInfoWindowHtml('<span style="font-size:0.85em;">' + text + '<br>' + termin +' Uhr<br><br>' + place.address + '</span>');
			}
		}

		var mapElement = dojo.byId('karte');
		var map = new GMap2(mapElement);

		var geocoder = new GClientGeocoder();
		geocoder.getLocations(address, addAddressToMap);
	}
}

var sampleCallback = function(data,ioArgs,widgetRef){
/*
	Callback für Fileupload

	* Variablen
	data: Daten
	ioArgs: Daten
	widgetRef: Referenz auf Widget

	* Rückgabe
	Status
*/
	if(data){
		if(data.status && data.status == "success"){
			widgetRef.overlay.innerHTML = data.name + ' [Größe: '+data.size+' Bytes]';
			dijit.byId('frmFile').attr({'value':data.name});
			if (dojo.byId('gfxFile')) document.getElementById('gfxFile').setAttribute('src','image=pic_of_month/'+data.name+';0;150;1;1');
			console.log(data);
		}else{
			widgetRef.overlay.innerHTML = "Kein Bild hochgeladen.";
		}
	}
}

dojo.addOnLoad(init);

