/*
   	Class: Lxc::Client::JS::Class::View
   	A class that manages the different Views.
   
   	About: License
   	Link Exchange Script

	Copyright (C) 2007 Erk Nissen - info@link-exchange-script.de
	This program is distributed under the terms and conditions of the GPL

	You can modify the link to 'www.link-exchange-script.de', but you are
	not allowed to remove it, as long as you don't have the direct permission 
	from info@link-exchange-script.de

	DON'T REMOVE THIS NOTICE!!
*/
/*
	v0.3 Die Klasse View
	Wird von Control benutzt 
*/
dojo.require("dojo.collections.ArrayList");
dojo.require("dojo.collections.Dictionary");
dojo.require("dojo.string.Builder");
dojo.require("dojo.event.*");

function classView(){

	// 
	var browser;

	// ist true wenn ein sprachwechsel im gange ist
	var sprachwechsel = false;
	var neueSprache;
	var aktuelleSprache;
	
	// Enthält die ID des aktuell angezeigten Views
	var aktuellerView = 'view_linkliste';
		
	// ##Private Attribute
	var verbindung = http();

	// IDs
	var viewList = new dojo.collections.ArrayList();
	var buttonList = new dojo.collections.ArrayList();
	var labelList = new dojo.collections.ArrayList();
	
	// Alle Texte im Format id => text
	var textBib = new dojo.collections.Dictionary();

	// Zeiten
	var einblenden_wipe_time = 500;
	var einblenden_verzoegerung_time = 400;
	var ausblenden_fade_time = 150;
	var ausblenden_verzoegerung_time = 150;
	var einblenden_fade_time = 400;
	var ausblenden_wipe_time = 300;


	// ##Public Attribute
	// Public damit sie von window.setTimeout ... genutzt werden können

	// Für Workflow (control)
	this.wartezeit = 700;
	this.extra_wartezeit = 1400;

	// ##Konstuktor
	init();

	function init(){
		initViews();
		
		// Ruft sobald fertig viewTexteGeholt() auf !
		serverRequest_viewTexteHolen( cfg.getLanguage() );
	}
	
	function viewTexteGeholt(){
		
		if(!sprachwechsel){
		// Init
			
			// Buttons Texte und Events zuweisen
			initButtons();
			initLabel();
			changeMessageText();
		//	initEvents();	
			
			// LXC anzeigen
			document.getElementById("lxc").style.display = "inline"; 
		}else{
		// Wenn sich die Sprache geaendert hat
		
			changeButtonText();
			changeLabelText();
			changeMessageText();
			if(aktuellerView != 'view_linkliste' && aktuellerView != 'view_vorschau'){
				var t = ersetzePlatzhalter( textBib.item( aktuellerView ) );		
				document.getElementById( aktuellerView+"__text" ).innerHTML = t;
			}
			aktuelleSprache = neueSprache;
			sprachwechsel = false;
		}
	}
	
	// ## Public Methoden
	this.open = function( id , zeit ){
		aktuellerView = id;
		
		// TODO: view linkliste und vorschau haben keinen text
		if(id != 'view_linkliste' && id != 'view_vorschau'){
			text(id); // View Text aktualisieren
		}
		
		if( !zeit ) { zeit=1; }
		window.setTimeout('dojo.lfx.html.wipeIn( \''+id+'\', '+einblenden_wipe_time+' ).play()', this.wartezeit + zeit);
		window.setTimeout('dojo.lfx.html.fadeIn( \''+id+'_content\', '+einblenden_fade_time+' ).play()', einblenden_verzoegerung_time + this.wartezeit + zeit);
	};

	this.close = function( id , zeit ){
		if( !zeit ) { zeit=1; }
		window.setTimeout('dojo.lfx.html.fadeOut( \''+id+'_content\', '+ausblenden_fade_time+' ).play()', zeit);
		window.setTimeout('dojo.lfx.html.wipeOut(\''+id+'\', '+ausblenden_wipe_time+').play()', ausblenden_verzoegerung_time + zeit);
	};

	this.getBrowser = function(){
		return browser;
	};

	function text( id ){
		document.getElementById( id+"__text" ).innerHTML = ersetzePlatzhalter( textBib.item( id ) );
	}

	// TODO: titel ist immer valid !

	// Definiert wann die Titel Textbox valid ist
/*	dojo.widget.ValidationTextbox.isValid = function () {
		 var cb = document.getElementById("beschreibung").value.length;
		 var ct = document.getElementById("titel").value.length;
		 alert('länge'+ct);
		 if( ct > 30 && cb > 30 ){
	     	return true;
		 }else{
		 	return false;
		 }
	};*/
	
	this.checkButtons = function(){
	//	user_domain - domainAngabe2domainAnalyse
	//  backlink_url - seitenWahl2htmlEinbinden
	//  titel + beschreibung - datenErgaenzen2linkEintragen
	//                       - datenErgaenzen2vorschau
		checkButton( 'user_domain' , 'domainAngabe2domainAnalyse' );
		checkButton( 'backlink_url' , 'seitenWahl2htmlEinbinden' );
		checkButton( 'titel' , 'datenErgaenzen2linkEintragen' );
		checkButton( 'titel' , 'datenErgaenzen2vorschau' );
		
		function checkButton( widgetId, buttonId ){
			var widget = dojo.widget.byId( widgetId );
			
			if( widgetId == 'titel' ){
			// Sonderfall Titel -> 2 eingaben pruefen
				var cb = document.getElementById("beschreibung").value.length;
			 	if( widget.isValid() && cb > 15 ){
			 		document.getElementById(buttonId+'__btn').disabled = false;
				}else{
				 	document.getElementById(buttonId+'__btn').disabled = true;
				}
			}else{
			// Normalfall
				if( widget.isValid() ){
			 		document.getElementById(buttonId+'__btn').disabled = false;
				}else{
				 	document.getElementById(buttonId+'__btn').disabled = true;
				}
			}
		}
	};

	this.lang = function( language ){
		neueSprache = language;
		if( neueSprache != aktuelleSprache ){
			 sprachwechsel = true;
			 serverRequest_viewTexteHolen( neueSprache );	
		}else{
			//alert('Die Sprache wird bereits angezeigt!');
		}
	};

	// ## Private Methoden

	
	function initViews(){

		// ViewID's finden TODO: ueberarbeiten!?
		lxcNode = document.getElementById('lxc');
		lxcChilds = lxcNode.childNodes;
		anzKnoten = lxcChilds.length;

		for(var index in lxcChilds){
			var knoten = lxcChilds[index];
			if(knoten.nodeType == 1){
				var kid = knoten.getAttribute('id');
				// ACHTUNG: sollte kid nicht gesetzt sein liefert ff null und ie '' !
				if( kid !== null && kid !== '' && kid != 'view_linkliste' ){
					viewList.add( kid );
				}
			}
		}
		
		// Views ausblenden
		var i = viewList.getIterator();
		
		while( !i.atEnd() ){
			var id = i.get();
			dojo.lfx.html.wipeOut(id, 1).play();
			dojo.lfx.html.fadeOut(id+'_content', 1).play();
		}
	}
	
	/**
	 * Sollte erst aufgerufen werden, wenn die TextBib erzeugt wurde.
	 * Weist der buttonList die Buttons aus dem DOM zu und vergibt
	 * die Buttontexte aus der Sprachdatei sowie die Buttonevents.
	 */
	function initButtons(){
		// ButtonID's finden
		var lxcNode = document.getElementById('lxc');
		var	buttons = lxcNode.getElementsByTagName('button');
		
		//buttons = document.getElementsByTagName('button');
		for(var i = 0; i < buttons.length ; i++){
			var bid = buttons[i].getAttribute('id');
			var sb = new dojo.string.Builder( bid );
			sb.replace('__btn', '');
			buttonList.add( sb.toString() );
		}
		// Buttons Texte und Events zuweisen
		var itr = buttonList.getIterator();
		
		while( !itr.atEnd() ){
			var id = itr.get();
			var node = document.getElementById(id+'__btn');
			
			node.innerHTML = textBib.item( id );
			dojo.event.connect(node, 'onclick', dj_global, id );
		}

	}
	
	function initLabel(){
		// LabelID's finden
		var lxcNode = document.getElementById('lxc');
		var labels = lxcNode.getElementsByTagName('label');
		//buttons = document.getElementsByTagName('button');
		for(var i = 0; i < labels.length ; i++){
			var bid = labels[i].getAttribute('id');
			var sb = new dojo.string.Builder( bid );
			sb.replace('__label', '');
			labelList.add( sb.toString() );
		}
		// Label Texte zuweisen
		changeLabelText();
	}
	
	function initEvents(){
		
	// ToDo: Geht noch nicht im IE	
		
		//  user_domain: 	[widget:UrlTextbox]
		//	onkeyup="view.checkButtons();" onblur="view.checkButtons();"

		var node = document.getElementById('user_domain');
		var keyupBC = node.getAttribute('onkeyup');

		if(typeof keyupBC == 'function'){
		    keyupBC = keyupBC + 'view.checkButtons();';
			node.setAttribute( 'onkeyup', keyupBC );
		}else{
			node.setAttribute( 'onkeyup' , 'view.checkButtons()' );
		}

		//node.setAttribute('onkeyup','view.checkButtons()');
		//node.setAttribute('onblur','view.checkButtons()');
		
		//  testTable:		[widget:SortableTable]
		//  - onSelect="session.showSelected(); view.checkButtons();"		
		//node = document.getElementById('test_table');
		//node.setAttribute('onselect','session.showSelected(); view.checkButtons();');
		/*	
		//	backlink_url:	[widget:UrlTextbox]
		// 	- onkeyup="view.checkButtons();"	
		node = document.getElementById('backlink_url');
		node.setAttribute('onkeyup','view.checkButtons()');
			
		// 	titel:			[widget:ValidationTextbox]
		//  - onkeyup="view.checkButtons();"
		node = document.getElementById('titel');
		node.setAttribute('onkeyup','view.checkButtons()');

		//  beschreibung: 	[dom]
		//  onBlur="InputCharacterLengthCheck();view.checkButtons();" onKeyUp="InputCharacterLengthCheck();view.checkButtons();"
		node = document.getElementById('beschreibung');
		node.setAttribute('onkeyup','InputCharacterLengthCheck();view.checkButtons();');
		node.setAttribute('onblur','InputCharacterLengthCheck();view.checkButtons();');
	*/}

	function changeButtonText(){
		var itr = buttonList.getIterator();
		
		while( !itr.atEnd() ){
			var id = itr.get();
			var node = document.getElementById(id+'__btn');
			node.innerHTML = textBib.item( id );
		}
	}
	
	function changeLabelText(){
		var itr = labelList.getIterator();
		
		while( !itr.atEnd() ){
			var id = itr.get();
			var node = document.getElementById(id+'__label');
			node.innerHTML = textBib.item( id );
		}
	}

	function changeMessageText(){
		// Widget IDs	
		var msgIds = ["user_domain","backlink_url", "titel"];
		
		for(var x = 0 ; x < msgIds.length ; x++ ){
			var wid = msgIds[x];
			var node = document.getElementById( wid ).parentNode;
			var nodes = node.getElementsByTagName('span');
			for(var y = 0 ; y < nodes.length ; y++ ){
				var msgSpan = nodes[y];
				msgSpan.innerHTML = textBib.item( wid + '_' + msgSpan.className );
			}
		}
	}

	/**
	 * Texte holen
	 *
	 **/
	function serverRequest_viewTexteHolen( language ){
		verbindung.open("POST",cfg.getRelPath()+cfg.getPhpPath()+"text.php",true);
		verbindung.onreadystatechange = serverResponse_viewTexteHolen; // Keine () !!!
		verbindung.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		verbindung.send("language=" + language );
	}

	function serverResponse_viewTexteHolen(){
		if(verbindung.readyState == 4){
			var rueckgabe = verbindung.responseText;
			var textObjektArray = eval("("+ rueckgabe +")");

			textBib.clear();
			
			for( var index in textObjektArray ){
			 	var textObjekt = textObjektArray[index];
			 	var id = textObjekt.key;
			 	var text = textObjekt.val;
				textBib.add(id, text);
			}
			viewTexteGeholt();
		}
	}
	
	function ersetzePlatzhalter( str ){
		var dsb = new dojo.string.Builder( str );
		dsb.replace("##user_domain##", session.getUserDomain() );
		dsb.replace("##backlink_url##", session.getBacklinkUrl() );
		dsb.replace("##beschreibung##", session.getBeschreibung() );
		dsb.replace("##link_url##", session.getLinkUrl() );
		dsb.replace("##titel##", session.getTitel() );
		dsb.replace("##url_id##", session.getUrlId() );
		dsb.replace("##kontakt_mail##", session.getKontaktMail() );
		dsb.replace("##pagerank##", session.getPagerank() );	
		return dsb.toString();
	}
	
	function http(){
		var tmphttp;
		if(window.XMLHttpRequest){
			tmphttp = new XMLHttpRequest();
			browser = 'ff';
		} else if(window.ActiveXObject) {
			tmphttp = new ActiveXObject("Microsoft.XMLHTTP");
			browser = 'ie';
		}
		return tmphttp;
	}
}
