/**
 *
 */
Api =
{
	arr_language		:		new Object(),
	
	
	/**
	 * 
	 */
	init: function()
	{	
		//  Deutsch
		this.arr_language['de'] = new Object();
		this.arr_language['de']['wk_laden'] = 'Sie wollen einen gespeicherten Warenkorb aus der Datenbank laden.\nIhr bestehender Warenkorb wird durch diesen Vorgang gelöscht.\n\nWollen Sie den gespeicherten Warenkorb wirklich laden';
		this.arr_language['de']['ungueltige_id'] = 'Bitte geben Sie eine gültige ID ein.';
		this.arr_language['de']['nicht_alle_bilder'] = 'Es stehen nicht alle Bilder im gewählten Format zur Verfügung.\nFolgende Bilder wurden dem Archiv im nächst kleineren Format hinzugefügt:\n\n';
		this.arr_language['de']['confirm'] = 'ACHTUNG / WARNUNG\n-----------------------------------------------\nWollen Sie dieses Bild wirklich aus der Datenbank\nund physikalisch vom Server löschen?';
        
		this.arr_language['de']['intranet_fehler'] = new Object();
		this.arr_language['de']['intranet_fehler']['std'] = 'Der Intranet Warenkorb kann nicht befüllt werden.\nDer folgende Fehler ist aufgetreten:\n\n';
		this.arr_language['de']['intranet_fehler'][-1] = 'Fehler unbekannt.';
		this.arr_language['de']['intranet_fehler'][3002] = 'Sie sind nicht eingeloggt.';
		this.arr_language['de']['intranet_fehler'][4001] = 'Das Dokument befindet sich bereits im Warenkorb.';
		this.arr_language['de']['intranet_fehler'][4002] = 'Die Datei existiert nicht.';

		//  Englisch
		this.arr_language['en'] = new Object();
		this.arr_language['en']['wk_laden'] = 'You wish to load a saved shopping cart from the database.\nWhen you proceed, the current shopping cart will be deleted.\n\nDo you wish to proceed?';
		this.arr_language['en']['ungueltige_id'] = 'Please enter a valid ID.';
		this.arr_language['en']['nicht_alle_bilder'] = 'Not all the images are available in the selected format.\nThe following images will be added to the archive in the next smaller size:\n\n';
		this.arr_language['en']['confirm'] = 'ATTENTION / WARNING\n-----------------------------------------------\nDo you want to delete this picture from database\nand from the server?';

		this.arr_language['en']['intranet_fehler'] = new Object();
		this.arr_language['en']['intranet_fehler']['std'] = 'It is not possible to fill your intranet shopping cart.\nAn error has occurred:\n\n';
		this.arr_language['en']['intranet_fehler'][-1] = 'Unknown error.';
		this.arr_language['en']['intranet_fehler'][3002] = 'You are not logged in.';
		this.arr_language['en']['intranet_fehler'][4001] = 'This file is already in your shopping cart.';
		this.arr_language['en']['intranet_fehler'][4002] = 'This file does not exist.';
		/*
		//  Französisch
		this.arr_language['fr'] = new Object();
		this.arr_language['fr']['wk_laden'] = 'Vous souhaitez charger un caddie sauvegardé de la base de données.\nSi vous continuez, votre caddie actuel est effacé.\n\nEst-ce que vous souhaitez continuer?';
		this.arr_language['fr']['ungueltige_id'] = 'Entrez un numéro d\'identification valable.';
		this.arr_language['fr']['nicht_alle_bilder'] = 'Toutes les photos ne sont pas disponibles dans le format sélectionné.\nLes photos suivantes seront ajouté aux archives dans un format plus petit:\n\n';
		this.arr_language['fr']['confirm'] = 'ATTENTION / WARNING\n-----------------------------------------------\nDo you want to delete this picture from database\nand from the server?';
        
		this.arr_language['fr']['intranet_fehler'] = new Object();
		this.arr_language['fr']['intranet_fehler']['std'] = 'It is not possible to fill your intranet shopping cart.\nAn error has occurred:\n\n';
		this.arr_language['fr']['intranet_fehler'][-1] = 'Unknown error.';
		this.arr_language['fr']['intranet_fehler'][3002] = 'You are not logged in.';
		this.arr_language['fr']['intranet_fehler'][4001] = 'This file is already in your shopping cart.';
		this.arr_language['fr']['intranet_fehler'][4002] = 'This file does not exist.';
		
		//  Niederländisch
		this.arr_language['nl'] = new Object();
		this.arr_language['nl']['wk_laden'] = 'U wenst een in de databank opgeslagen winkelwagen te laden.\nAls u doorgaat, worden de gegevens van uw bestaande winkelwagen gewist.\n\nWilt u doorgaan?';
		this.arr_language['nl']['ungueltige_id'] = 'Voer een geldige ID in.';
		this.arr_language['nl']['nicht_alle_bilder'] = "Niet alle foto's kunnen in het gewenste formaat aangeboden worden.\nVolgende foto's worden in een kleiner formaat aan het archief toegevoegd:\n\n";
		this.arr_language['nl']['confirm'] = 'ATTENTION / WARNING\n-----------------------------------------------\nDo you want to delete this picture from database\nand from the server?';
        
		this.arr_language['nl']['intranet_fehler'] = new Object();
		this.arr_language['nl']['intranet_fehler']['std'] = 'It is not possible to fill your intranet shopping cart.\nAn error has occurred:\n\n';
		this.arr_language['nl']['intranet_fehler'][-1] = 'Unknown error.';
		this.arr_language['nl']['intranet_fehler'][3002] = 'You are not logged in.';
		this.arr_language['nl']['intranet_fehler'][4001] = 'This file is already in your shopping cart.';
		this.arr_language['nl']['intranet_fehler'][4002] = 'This file does not exist.';
		*/
	},
	
	/**
	 * 
	 */
	showGuiExceptionMsg: function(msg) {
		var gui_exception_div = document.getElementById("gui_exception_msg");
		gui_exception_div.style.display = "block";
		gui_exception_div.innerHTML = msg;
	},
	
	
/******************************************************************************
 * INDIVIDUELLE FUNKTIONEN DES WEBS
 */	
	/**
	 * 
	 */
	generateWarenkorbDownload: function(bild_art) {
		var overlay = document.getElementById("download_overlay");
		overlay.style.display = "block";

		var arr_values = [bild_art];
		RpcProxy.Ajax_Api.generateWarenkorbDownload(arr_values, Api.generateWarenkorbDownloadCallback);
	},
	
	/**
	 * 
	 */
	generateWarenkorbDownloadCallback: function(ret, err)
	{
		var div_download_overlay = document.getElementById("download_overlay");
		div_download_overlay.style.display = "none";
		
		if (ret != null && err == null)
		{
			switch (ret["action"])
			{
				case "zip": {
					if (ret["alle_bilder_vorhanden"] == false) {
						alert(Api.arr_language['de']['nicht_alle_bilder'] + ret['fehldende_bilder']);						
					}
					window.location.href = "download.php?action=start_download&zip_name=" + ret["zip_name"];
					break;
				}
			}
		}
		else {
			alert("Download error!\n\n" + err.message);
		}
	},
	
	/**
	 * 
	 */
	generateBildDownload: function(bild_art) {
		var overlay = document.getElementById("download_overlay");
		overlay.style.display = "block";
		
		var arr_values = [bild_art];
		RpcProxy.Ajax_Api.generateBildDownload(arr_values, Api.generateBildDownloadCallback);
	},
	
	/**
	 * 
	 */
	generateBildDownloadCallback: function(ret, err)
	{
		var div_download_overlay = document.getElementById("download_overlay");
		div_download_overlay.style.display = "none";
		
		if (ret != null && err == null)
		{
			switch (ret["action"])
			{
				case "download": {
					window.location.href = "download.php?action=start_download&bild_id=" + ret["bild_id"] + "&bild_art=" + ret["bild_art"];
					break;
				}
			}
		}
		else {
			alert("Download error!\n\n" + err.message);
		}
	},
	
	/**
	 * Suche wurde durch Klick auf den Suchbutton oder durch Drücken der Returntaste abgeschickt
	 */
	submitSuche: function() {
		var form = document.getElementById("form_suche");
		form.action = "/content/suche/index.php?action=suche";
		form.submit();
	},
	
	/**
	 * Ein Kategorie wurde ausgewählt
	 */
	submitKategorie: function(selectbox)
	{		
		var form = document.getElementById("form_suche");
		form.action = "/content/suche/index.php?action=kategorieauwahl&sel=" + selectbox;
		form.submit();
	},
	
	/**
	 * 
	 */
	submitForm: function(form_id) {
		var form = document.getElementById(form_id);
		form.submit();
	},
	
	/**
	 * 
	 */
	checkKey: function(event)
	{
		var keyCode = event.keyCode ? event.keyCode : event.which ? event.which : event.charCode;
		
		//  Bei Return das Formular abschicken
		if (keyCode == 13) {
			document.forms[0].submit();
		}
	},
	
	/**
	 * 
	 */
	confirmDelete: function(sprache_kurzform, link)
	{
		var msg = this.arr_language[sprache_kurzform]['confirm'];
	
		if (confirm(msg)) {
			window.location.href = link;
		}
	},
	
	/**
	 * 
	 */
	ladeWarenkorb: function(form, sprache_kurzform) {
		warenkorb_id = document.getElementById("warenkorb_id_laden");
		
		if (warenkorb_id.value != "")
		{
			var msg = this.arr_language[sprache_kurzform]['wk_laden'];
			msg += " (ID=" + warenkorb_id.value +")?";
	
			if ( !confirm(msg) ) {
				return (false);
			}
			
			form.action = "/content/warenkorb/?wk_action=lade_wk&wk_id=" + warenkorb_id.value;			
		}
		else {
			alert(this.arr_language[sprache_kurzform]['ungueltige_id']);
			warenkorb_id.focus();
			return (false);
		}
	},
	
	/**
	 * 
	 */
	alleBilderWk: function(json) {
		var wk_status = document.getElementById("alle_bilder_wk_status");
		var btn_alle_bilder_wk = document.getElementById("btn_alle_bilder_wk");
		
		if (wk_status.value == "" || wk_status.value == "aus") {
			wk_status.value = "in";
			btn_alle_bilder_wk.innerHTML = "alle Bilder der aktuellen Seite aus den Warenkorb";
		}
		else {
			wk_status.value = "aus";
			btn_alle_bilder_wk.innerHTML = "alle Bilder der aktuellen Seite in den Warenkorb";
		}
		
		var arr_values = eval(json);
		RpcProxy.Ajax_Api.alleBilderWk([arr_values, wk_status.value], Api.alleBilderWkCallback);
	},
	
	/**
	 * 
	 */
	alleBilderWkCallback: function(ret, err)
	{
		if (ret != null && err == null)
		{
			var arr_bild_ids = ret["arr_bild_ids"];

			for (var i=0; i<arr_bild_ids.length; i++)
			{
				var a_warenkorb_bild_legen = document.getElementById("warenkorb_legen_" + arr_bild_ids[i]);
				var a_warenkorb_bild_entfernen = document.getElementById("warenkorb_entfernen_" + arr_bild_ids[i]);
				
				//  Wurden die Bilder gelöscht oder hinzugefügt
				switch (ret["action"])
				{
					case "in": {
						a_warenkorb_bild_legen.style.display = "none";
						a_warenkorb_bild_entfernen.style.display = "block";
						break;
					}
					
					case "aus": {
						a_warenkorb_bild_legen.style.display = "block";
						a_warenkorb_bild_entfernen.style.display = "none";	
						break;
					}
				}
			}
		}
	},
    
    bildCheckWarenkorbIntranet: function(bild_id, url, action, langKey)
    {
        var intranet_msgs = this.arr_language[langKey]['intranet_fehler'];
        
        // Zufallszahl wird bei jedem Aufruf angehangen, da sonst das Laden
        // nicht mehr ausgeführt wird, da die erzeugte JS-Datei gecached wurde
        var rand = parseInt(Math.random() * (100000-1+1));
        url = url + '&rand=' + rand;
                
        LazyLoader.load(url, function() {
            if (intranetwk.error_nr == 0) {
                Api.markButton({
                    'bild_id': bild_id,
                    'action': action
                }, 'warenkorb_intranet');
            } else {
            	alert(intranet_msgs['std'] + intranet_msgs[intranetwk.error_nr]);
            }
        });
    },
	
	/**
	 * 
	 */
	bildCheckWarenkorb: function(bild_id) {
		var arr_values = [bild_id];
		RpcProxy.Ajax_Api.bildCheckWarenkorb(arr_values, Api.bildCheckWarenkorbCallback);
	},
	
	/**
	 * 
	 */
	bildCheckWarenkorbCallback: function(ret, err)
	{
		if (ret != null && err == null) {
			Api.markButton(ret, 'warenkorb');
		}
	},
    
    markButton: function(ret, buttonType)
    {
        var a_warenkorb_bild_legen = document.getElementById(buttonType + "_legen_" + ret["bild_id"]);
        var a_warenkorb_bild_entfernen = document.getElementById(buttonType + "_entfernen_" + ret["bild_id"]);
        
        //  Wurde Bild gelöscht oder hinzugefügt
        switch (ret["action"])
        {
            case "del": {
                a_warenkorb_bild_legen.style.display = "block";
                a_warenkorb_bild_entfernen.style.display = "none";
                break;
            }
            
            case "add": {
                a_warenkorb_bild_legen.style.display = "none";
                a_warenkorb_bild_entfernen.style.display = "block";

                break;
            }
        }
    },
	
	/**
	 * 
	 */
	setSprache: function(selbox_sprachauswahl, isLive)
	{
		var gewaehlte_sprache = false;

		for (var i=0; i<selbox_sprachauswahl.options.length; i++) {
			var sprache = selbox_sprachauswahl.options[i].value;
			
			if (selbox_sprachauswahl.options[i].selected && sprache != "") {
				gewaehlte_sprache = sprache;
				break;				
			}
		}
		
		if (gewaehlte_sprache != "") {
            var domain = isLive ? 'com' : 'dev.m-s.de';

            switch (gewaehlte_sprache) {
                case 'de':
                    location.href = 'http://bilddatenbank.de.kusch.' + domain;
                    break;

                case 'en':
                    location.href = 'http://image-database.en.kusch.' + domain;
                    break;
            }
		}
	},
	
	/**
	 *
	 */
	openNewWindow: function(width, height, url, name, features)
	{
		var left = (screen.availWidth - width) / 2;
		var top = (screen.availHeight - height) / 2;
	
		var settings = 'height=' + height + ',' + 'width=' + width + ',' + 'top=' + top + ',' + 'left=' + left + ',';
		settings += features;

		whandle = window.open(url, name, settings);
		whandle.focus();
	}
};


Api.Kategorien =
{
	list_verfuegbare	:	null,
	list_ausgewaehlte	:	null,
	

	/**
	 *
	 */
	start: function() {
		this.list_verfuegbare = document.getElementById("list_verfuegbare");
		this.list_ausgewaehlte = document.getElementById("list_ausgewaehlte");
	},
	
	/**
	 * 
	 */
	verfuegbareUebernehmen: function()
	{
		//  Wenn Liste leer, keine Kategorien löschen und Meldung ausgeben
		if (this.list_verfuegbare.options.length > 0 && this.list_verfuegbare.options[0].value == "") {
			alert("Es konnte(n) keine Kategorie(n) in Ihre Kategorienliste übernommen werden,\nda Sie keine Kategorie(n) zum Übernehmen selektiert haben.")
		}
		else {
			var arr_sel_kategorien = new Array();
			var sel = false;

			//  Zähler darf nur beim Hinzufügen eines Feldes im Array erhöht werden,
			//  also wenn current.selected
			var array_zaehler = 0;

			for (i=0; i<this.list_verfuegbare.options.length; i++)
			{
				var current = this.list_verfuegbare.options[i];

				if (current.selected)
				{
					arr_sel_kategorien[array_zaehler] = new Object();
					arr_sel_kategorien[array_zaehler]['value'] = current.value;
					arr_sel_kategorien[array_zaehler]['text'] = current.text;
					
					array_zaehler++;
					sel = true;
				}
			}
			if (sel) {
				this.arrayObjectsInAusgewaehlteListe(arr_sel_kategorien);
			}
			else {
				alert("Es konnte(n) keine Kategorie(n) in Ihre Kategorienliste übernommen werden,\nda Sie keine Kategorie(n) zum Übernehmen selektiert haben.\n\nBitte selektieren Sie die Kategorie(n), die Sie in Ihre Liste übernehmen wollen.")
			}
		}
	},
	
	/**
	 *
	 */
	arrayObjectsInAusgewaehlteListe: function(arr_sel_kategorien)
	{
		//  Wenn Liste leer oder nur ein leerer Eintrag, Liste löschen
		if (this.list_ausgewaehlte.options.length > 0 && this.list_ausgewaehlte.options[0].value == "") {
			this.list_ausgewaehlte.options.length = 0;
		}

		var arr_ausgewaehlte_kategorien = new Array();

		//  Options auslesen und im temporäres Array speichern
		for (var i=0; i<this.list_ausgewaehlte.options.length; i++) {
			arr_ausgewaehlte_kategorien[i] = new Object();
			arr_ausgewaehlte_kategorien[i]['value'] = this.list_ausgewaehlte.options[i].value;
			arr_ausgewaehlte_kategorien[i]['text'] = this.list_ausgewaehlte.options[i].text;
		}
		
		//  Array ausgewählte Kategorien und gefilterte Kategorien zusammenfügen
		var alle_kategorien = new Array();
		alle_kategorien = this.merge(arr_sel_kategorien, arr_ausgewaehlte_kategorien);

		//  Selektierte Städte der gefilterten Städteliste der ausgewählten Städteliste hinzufügen
		this.fillList(this.list_ausgewaehlte, alle_kategorien);
	},
	
	/**
	 * 
	 */
	merge: function(arr1, arr2)
	{
		var arr_ret = arr2;
		
		for (var i=0; i<arr1.length; i++)
		{
			found = false;

			if (arr2.length > 0)
			{
				for (var x=0; x<arr2.length; x++)
				{
					if ( arr1[i]['text'] == arr2[x]['text']) {
						found = true;
						break;
					}
				}
			}
			
			if (!found) {
				var tmp_obj = new Object()
				tmp_obj['value'] = arr1[i]['value'];
				tmp_obj['text'] = arr1[i]['text'];
				
				arr_ret.push(tmp_obj);
			}
		}
		
		//  Objekte sortieren mit dem Bubble-Sort Algorithums
		for (var i=0; i<arr_ret.length; i++)
		{
			for (var j=i+1; j<arr_ret.length; j++)
			{
				if (arr_ret[i]["text"] > arr_ret[j]["text"]){
					tmp = arr_ret[i];
					arr_ret[i] = arr_ret[j];
					arr_ret[j] = tmp;
				}
			}
		}
		
		return (arr_ret);
	},
	
	/**
	 * 
	 */
	fillList: function(list, arr_data)
	{
		//  Liste leeren
		list.options.length = 0;
		
		if (arr_data != null && arr_data.length > 0)
		{
			for (var i=0; i<arr_data.length; i++)
			{
				if (arr_data[i]['value'] != "")
				{
					val = arr_data[i]['value'];
					txt = arr_data[i]['text'];
					
					list.options[i] = new Option(txt, val);
				}
			}
			
			document.getElementById(list.id + "_anz").innerHTML = arr_data.length;
		}
		else {
			list.options[0] = new Option("Leere Liste", "");
			document.getElementById(list.id + "_anz").innerHTML = "0";
		}
	},
	
	/**
	 *
	 */
	alleVerfuegbarenUebernehmen: function()
	{
		var arr_kategorien = new Array();

		for (i=0; i<this.list_verfuegbare.options.length; i++) {
			arr_kategorien[i] = new Object();
			arr_kategorien[i]['value'] = this.list_verfuegbare.options[i].value;
			arr_kategorien[i]['text'] = this.list_verfuegbare.options[i].text;
		}
		
		this.arrayObjectsInAusgewaehlteListe(arr_kategorien);
	},
	
	/**
	 * 
	 */
	doppelKlickUebernehme: function()
	{
		for (var i=0; i<this.list_verfuegbare.length; i++)
		{
			if (this.list_verfuegbare.options[i].selected)
			{
				arr_data = new Object();
				arr_data['value'] = this.list_verfuegbare.options[i].value;
				arr_data['text'] = this.list_verfuegbare.options[i].text;
				
				this.arrayObjectsInAusgewaehlteListe(new Array(arr_data));
			}
		}
	},
	
	/**
	 *
	 */
	 ausgewaehlteLoeschen: function()
	 {
	 	//  Wenn Liste leer, keine Städte löschen und Meldung ausgeben
		if (this.list_ausgewaehlte.options.length > 0 && this.list_ausgewaehlte.options[0].value == "") {
			alert("Es konnte(n) keine Kategorie(n) aus Ihrer Kategorienliste gelöscht werden,\nda Sie keine Kategorie(n) zum Löschen selektiert haben.")
		}
		else {
		 	var arr_sel_ausgewaehlte = new Array();
		 	var sel = false;

			//  Zähler darf nur beim Löschen eines Feldes im Array erhöht werden,
			//  also wenn current.selected
			var array_zaehler = 0;

			for (var i=0; i<this.list_ausgewaehlte.options.length; i++)
			{
				var current = this.list_ausgewaehlte.options[i];

				if (current.selected) {
					sel = true;
				}
				else {
					arr_sel_ausgewaehlte[array_zaehler] = new Object();
					arr_sel_ausgewaehlte[array_zaehler]['value'] = current.value;
					arr_sel_ausgewaehlte[array_zaehler]['text'] = current.text;
					array_zaehler++;
				}
			}

			if (sel) {
				//  Liste leeren
				this.list_ausgewaehlte.options.length = 0;

				//  Liste füllen
				this.fillList(this.list_ausgewaehlte, arr_sel_ausgewaehlte);
			}
			else {
				alert("Es konnte(n) keine Kategorie(n) aus Ihre Kategorieliste gelöscht werden,\nda Sie keine Kategorie(n) zum Löschen selektiert haben.\n\nBitte selektieren Sie die Kategorie(n), die Sie aus Ihrer Liste löschen wollen.")
			}
		}
	 },
	 
	 /**
	 *
	 */
	alleAusgewaehlteLoeschen: function()
	{
		//  Wenn Liste leer, keine löschen und Meldung ausgeben
		if (this.list_ausgewaehlte.options.length > 0 && this.list_ausgewaehlte.options[0].value == "") {
			alert("Es konnten keine Kategorien gelöscht werden,\nda Ihre Kategorienliste leer ist.")
		}
		else {
			this.fillList(this.list_ausgewaehlte, null);
		}
	},
	
	/**
	 * 
	 */
	submitForm: function()
	{
		if ( !this.list_ausgewaehlte.length || this.list_ausgewaehlte.options[0].value != "")
		{
			for (var i=0; i<this.list_ausgewaehlte.length; i++) {
				this.list_ausgewaehlte.options[i].selected = true;
			}
		}

		document.form_bilddetails.submit();
	}
};
