/*
 * Copyright (c) 2008 FIZON GmbH
 * All rights reserved.
 *
 * $Id: ppage.js 1773 2008-08-07 08:59:02Z as $
 */
PPage = function()
{
	var thisObj = this;
	this.benutzer = {};
	this.blockLayer;
	this.popupError;
	this.popupOk;


	/**
	 * construct()
	 */
	this.construct = function()
	{
		if (typeof PPage.SingletonObj != 'undefined')
			return;

		PPage.SingletonObj = this;

		/* PAGE Obj */
		this.pageDiv = document.createElement('div');
		this.pageDiv.id = 'ppage';
		document.getElementsByTagName('body')[0].appendChild(this.pageDiv);

		/* Object um die gesamte Seite zu blocken
		 * bei einem fehler */
		this.blockLayer = document.createElement('div');
		this.blockLayer.className = 'ppage-block';
		this.blockLayer.style.zIndex = 100000;
		this.blockLayer.style.display = 'none';
		this.addObject(this.blockLayer);

		/* Fehlerobjekte */
		this.popupError = new PPopup('Fehler', 'error', 300, false, 100001);
		this.popupErrorButtons = document.createElement('form');
		this.popupErrorButtons.style.textAlign = 'center';
		this.popupErrorButtonOk = document.createElement('input');
		this.popupErrorButtonOk.type = 'submit';
		this.popupErrorButtonOk.value = 'OK';
		this.popupErrorButtons.appendChild(this.popupErrorButtonOk);
		this.popupErrorButtons.setAttribute('onclick', 'PPage.EscError(); return false;');

		/* PopUps anmelden und passwort anderen */
		this.anmeldungObj = new PPopup('Anmelden', 'anmelden', 250);
		this.passwortObj = new PPopup('Passwort ändern', 'passwort', 350);
		
		this.user = PUser.Get();
		this.desktop = PDesktop.Get();
		this.toolbar = PToolbar.Get();
		this.menu = PMenu.Get();

		/* default menueeintraege */
		// XXX muss noch beim ummelden gepruefft werden ob 
		// der user dann immer noch admin bzw keine Rechte hat.
		/*
		if (this.user.values.admin == 1)
			this.menu.addItem('Benutzer verwalten');
		*/

		this.menu.addItem('Passwort ändern', "PPage.ChPasswort()");
		this.menuAbmelden = this.menu.addItem('Abmelden', "PPage.Abmelden()");

		for (var i = 0; i < PPage.AppsToLoad.length; i++)
			this.loadApp(PPage.AppsToLoad[i]);
		for (var i = 0; i < PPage.AppsAutostart.length; i++)
			self[PPage.AppsAutostart[i].toUpperCase()].Get().ah.autostart = true;

		this.reload();
		this.autostart();
	}


	/**
	 * addObject()
	 */
	this.addObject = function(obj)
	{
		return this.pageDiv.appendChild(obj);
	}
	
	
	/**
	 * removeObject()
	 */
	this.removeObject = function(obj)
	{
		return this.pageDiv.removeChild(obj);
	}


	/**
	 * reload()
	 */
	this.reload = function()
	{
		if (this.user.logedin) {
			this.anmeldung(false);
			this.desktop.display(true);
			this.toolbar.display(true);	
			this.menuAbmelden.setTitle('Benutzer »'+this.user.values.benutzer+'« abmelden');
			PApp.Load();
		}
		else {
			this.desktop.display(false);
			this.toolbar.display(false);	
			PApp.Unload();
			/* XXX: Alle Popups schliessen */
			this.anmeldung(true);
		}
	}


	/**
	 * showError()
	 */
	this.showError = function(title, content)
	{
		this.blockPage(true);
		this.popupError.title('Fehler: '+title);
		this.popupError.content(content);
		this.popupError.contentDiv.appendChild(this.popupErrorButtons);
		this.popupErrorButtonOk.focus();
		this.popupError.display(true);
	}


	/**
	 * escError()
	 */
	this.escError = function()
	{
		this.popupError.display(false);
		this.blockPage(false);
	}


	/**
	 * blockPage()
	 */
	this.blockPage = function(action)
	{
		switch (action) {
		case true:
			this.blockLayer.style.display = 'block';
			break;

		case false:
			this.blockLayer.style.display = 'none';
			break;

		default:
			return this.blockLayer.style.display == 'block';
		}
	}


	/**
	 * anmeldung()
	 */
	this.anmeldung = function(action)
	{
		switch (action) {
		case true:
			this.anmeldungObj.display(true);
			this.anmeldungObj.load(
				function()
				{
					thisObj.anmeldungObj.contentDiv.getElement('input').focus();
				}
			);
			break;

		case false:
			this.anmeldungObj.display(false);
			break;

		default:
			return this.anmeldungObj.display();
		}

		return true;
	}


	/**
	 * chPasswort()
	 */
	this.chPasswort = function(action)
	{
		if (typeof action == 'undefined')
			action = true;

		switch (action) {
		case true:
			this.passwortObj.display(true);
			this.passwortObj.load(
				function()
				{
					thisObj.passwortObj.contentDiv.firstChild['passwort'].focus();
				}	
			);
			break;

		case false:
			this.passwortObj.display(false);
			break;

		default:
			return this.passwortObj.display();
		}

		return true;
	}


	/**
	 * passwort()
	 */
	this.passwort = function(alt, neu1, neu2)
	{
		if (neu1 == '')
			this.showError('Passwort ändern', 'Ein leeres Passwort ist kein echtes Passwort.');
		else if (neu1 != neu2)
			this.showError('Passwort ändern', 'Die beiden Passwörter stimmten nicht überein.');
		else if (! this.user.passwort(alt, neu1))
			this.showError('Passwort ändern', 'Das alte Passwort stimmte nicht.');
		else
			this.passwortObj.display(false);
	}


	/**
	 * anmelden()
	 */
	this.anmelden = function(benutzer, passwort)
	{
		var result = PUser.Anmelden(benutzer, passwort);

		if (result) {
			this.reload();
			this.autostart();
		}
		else {
			this.showError('Anmeldung', 'Die Anmeldung ist fehlgeschlagen, vergewissern sie sich bitte das ihre angebenden Daten korrekt sind.');
		}
	}


	/**
	 * abmelden()
	 */
	this.abmelden = function()
	{
		if (PUser.Abmelden())
			this.reload();
		else
			this.showError('Abmelden', 'Beim abmelden ist ein Fehler aufgetreten');
	}


	/**
	 * loadApp()
	 */
	this.loadApp = function(app)
	{
		if (typeof self[app] == 'function')
       		return self[app]();
        else 
            return new self[app.toUpperCase()];
	}


	/**
	 * autostart()
	 */
	this.autostart = function()
	{
		PApp.Autostart();
	}

	this.construct();
}


PPage.AppsToLoad = [];
PPage.AppsAutostart = [];


/**
 * PPage.Get()
 */
PPage.Get = function()
{
	if (typeof PPage.SingletonObj == 'undefined')
		new PPage;
	return PPage.SingletonObj;
}


//PPage.GetWindowByName = PWindow.GetWindowByName;
//PPage.GetPopupByName = PPopup.GetPopupByName;
PPage.Anmelden = function(a1, a2) { return PPage.Get().anmelden(a1, a2); }
PPage.Abmelden = function() { return PPage.Get().abmelden(); }
//PPage.Display = function(a1) { return ( PPage.Get() ).display(a1); }
PPage.ShowError = function(a1, a2) { return PPage.Get().showError(a1, a2); }
PPage.EscError = function() { return PPage.Get().escError(); }
PPage.ChPasswort = function(a1) { return PPage.Get().chPasswort(a1); }
PPage.Passwort = function(a1, a2, a3) { return PPage.Get().passwort(a1, a2, a3); }
