/**
 * @author nyffenegger
 */
//////////////////////////////////////////////////////////////
// GLOBALS
// Some global Shortcuts outdise the Namespace (only allowed here)

//////////////////////////////////////////////////////////////
// Namespace

if (ON == undefined) {
    var ON = {};
};

if (ON.api == undefined) {
    ON.api = {};
};


var Dom   = YAHOO.util.Dom;
var Event = YAHOO.util.Event;
var Json  = YAHOO.lang.JSON;



//////////////////////////////////////////////////////////////
// Main Application Class 

ON.Index = function(){

	// Prepare for Member Variables
	var that = this;
	//var tabView;
	//var closeTabButton;
	var mapPanel;
	var myDataTable;
	var	myDataSource;
	var btSerach;
	var btSerachAdv;
	var bookmarkedTabViewState; 
	var initialTabViewState;
		
	that.restrict = "";
	
	// Constructor 
 	YAHOO.util.Event.onDOMReady(function(){
        //Init Contolls and Layout
        initializeControls();
    });
	
	function initTabView () { 
	    // Instantiate the TabView control... 
	  	that.tabView = new YAHOO.widget.TabView('tabview', {activeIndex : "0"});
		that.tabView.appendChild(that.closeTabButton);
		that.tabView.addListener("activeTabChange", handleTabViewActiveTabChange);
		if (ON.api.detailID != undefined) {
			that.addDetail(ON.api.detailID, ON.api.detailID);			
		}
	     		
	}
	
	var initializeControls = function(){
		// Button to remove the Tabs¨		
		that.closeTabButton = document.createElement('div');
			that.closeTabButton.style.position = 'absolute';
			that.closeTabButton.style.top	  =  0;
			that.closeTabButton.style.right	  =  0;
			that.closeTabButton.innerHTML = '<a href="javascript:ON.index.removeActiveTab()" >Schliessen</a>';
			that.closeTabButton.style.visibility = "hidden";

		// Intital State of Tabview for BrowserHistory
		bookmarkedTabViewState = YAHOO.util.History.getBookmarkedState("tabview"); 
		initialTabViewState = that.bookmarkedTabViewState || "tab0";
		if (ON.api.detailID != undefined) {			
			initialTabViewState = "tab2";
		}
		
		// Register our TabView module. Module registration MUST
	    // take place before calling YAHOO.util.History.initialize.
	    YAHOO.util.History.register('tabview', initialTabViewState, function (state) {
	        // This is called after calling YAHOO.util.History.navigate, or after the user
	        // has trigerred the back/forward button. We cannot discrminate between
	        // these two situations.
	
	        // "state" can be "tab0", "tab1" or "tab2".
	        // Select the right tab:
	        that.tabView.set("activeIndex", state.substr(3));
	    });


		YAHOO.util.History.onReady(function () { 
		    var currentState; 
		 
		    initTabView(); 
		 
		    // This is the tricky part... The onLoad event is fired when the user 
		    // comes back to the page using the back button. In this case, the 
		    // actual tab that needs to be selected corresponds to the last tab 
		    // selected before leaving the page, and not the initially selected tab. 
		    // This can be retrieved using getCurrentState: 
		    currentState = YAHOO.util.History.getCurrentState("tabview"); 
		    that.tabView.set("activeIndex", currentState.substr(3)); 
		});
		
		
	
		// Create Buttons
		btSerach = new YAHOO.widget.Button("btSerach"); 
		btSerach.on("click", onButtonClick); 
		btSerachAdv = new YAHOO.widget.Button("btSerachAdv");
		btSerachAdv.on("click", onButtonClick);  
		
		// Initialize Tabview with the browser history management library. 
		try { 
		    YAHOO.util.History.initialize("yui-history-field", "yui-history-iframe"); 
		} catch (e) { 
		    // The only exception that gets thrown here is when the browser is 
		    // not supported (Opera, or not A-grade) Degrade gracefully. 
		    initTabView(); 
		} 
		
		//initTabView();

	}
			
	var onButtonClick = function(){
		if (mapPanel != undefined) {		
			mapPanel.hide();
			delete (mapPanel);
		}
		if (this.get("id")=='btSerachAdv') {
			that.loaddata(true);
		}
		else {
			that.loaddata(false);
		}
	}
	
		// Get results of search and display in second tab in a datatable
	that.loaddata = function(adv, restrict)
	{
			 var URLVars = "" ;
			
			 if (adv === false) {
				var mTerm = encodeURIComponent(document.getElementById("tbTerm").value);
				var mOrt = encodeURIComponent(document.getElementById("tbOrt").value);
				URLVars = "adv=false&term=" + mTerm + "&ort=" + mOrt;
				//alert(URLVars);
			 }
			 else if(adv === true) {
				var mName = encodeURIComponent(document.getElementById("IDtbAName").value);
				var mGemeinde = encodeURIComponent(document.getElementById("IDtbAGemeinde").value);
				var mOrt = encodeURIComponent(document.getElementById("IDtbAOrt").value);
				var mTeilgebiet = encodeURIComponent(document.getElementById("IDtbATeilgebiet").value);
				var mBezirk = encodeURIComponent(document.getElementById("IDtbABezirk").value);
				var mKanton = encodeURIComponent(document.getElementById("IDtbAKanton").value);
				var mBeschreibung = encodeURIComponent(document.getElementById("IDtbABeschreibung").value);
				var mDeutung = encodeURIComponent(document.getElementById("IDtbADeutung").value);
				URLVars = "adv=true&AName=" + mName + "&AGemeinde=" + mGemeinde + "&AOrt=" + mOrt + "&ATeilgebiet=" + mTeilgebiet + "&ABezirk=" + mBezirk + "&AKanton=" + mKanton + "&ABeschreibung=" + mBeschreibung + "&ADeutung=" + mDeutung;
			 }

			 var formatLinkButton = function(elCell, oRecord, oColumn, sData) {
				var id = oRecord.getData("ID");
				elCell.innerHTML = "<a href=\"javascript:ON.index.addDetail(\'" + sData + " \', \'" + id + "\')\" title='Details Anzeigen'>" + sData + "</a>";
			 };

			 var formatQuellen = function(elCell, oRecord, oColumn, sData) {
				elCell.innerHTML = "<div class = 'phonetik'>" + sData + "</a>";
			 };

			 var mapButton = function(elCell, oRecord, oColumn, sData) {
				var coordX = oRecord.getData("X");
				var coordY = oRecord.getData("Y");
				if (coordX > 0 && coordY >0)
				{
					elCell.innerHTML = "<a href=\"javascript:ON.index.showMapPanel(\'" + coordX + " \', \'" + coordY + "\')\" title='Ort auf Karte zeigen'><img border='0'  src='assets/img/swiss.jpg'></a>";
				}
				else {
					elCell.innerHTML = "&nbsp";
				}
			 };

			 var myColumnDefs = [
				 {key:"Name", sortable:true, formatter:formatLinkButton, width:"100px"},
				 {key:"Gemeinde", sortable:true, width:"100px"},
				 {key:"Kanton", sortable:true, width:"100px"},
				 {key:"Beschreibung"},
				 {key:"Quellen", formatter:formatQuellen},
				 {key:"Map", formatter:mapButton, width:"20px"}
			 ];

			 // alert ("qtext.php?"+URLVars);
			 if (that.restrict != "") {
			 	URLVars = URLVars + "&Restrict=" + encodeURIComponent(that.restrict);
			 }			 
			 var myDataSource = new YAHOO.util.DataSource("/services/qtext.php?"+URLVars+"&end"); //("tnblog.txt?");
			 myDataSource.responseType = YAHOO.util.DataSource.TYPE_TEXT;
			 myDataSource.responseSchema = {
				 recordDelim: "\n",
				 fieldDelim: "|",
				 fields: ["ID", "Name", "Gemeinde", "Kanton", "Beschreibung", "Quellen", "X", "Y"]
			 };

			 var myConfigs = {
    			paginator : new YAHOO.widget.Paginator({					
					dropdownOptions: [25,50,100,500],
					rowsPerPage: 50,
					firstPageLinkLabel: "<<",
	                lastPageLinkLabel: ">>",
    	            previousPageLinkLabel: "<",
        	        nextPageLinkLabel: ">"
				})
			};

			 myDataTable = new YAHOO.widget.DataTable("text", myColumnDefs, myDataSource, myConfigs);
			 that.tabView.set('activeIndex', 1);
	}
	
	/**
	 * Method which adds tab containing the details of the dataset (called by linkButton of resultslist)
	 * 
	 * @param {Object} name
	 * @param {Object} id
	 */
	that.addDetail = function(name, id)
	{
		//var tabView = new YAHOO.widget.TabView('demo');
		//var detail = "<?php if (isset($_GET['detail']))  { echo $_GET['detail']; } else { echo 'phpNothing'; } ?>";
		if (id != null)
		{
			var myTab = new YAHOO.widget.Tab({
				label: 'Details von ' + name,
				dataSrc: '/services/getdetail.php?id='+ id,
				cacheData: true,
				active: true })
			that.tabView.addTab(myTab);
			that.tabView.set('activeIndex', that.tabView.getTabIndex(myTab));

			//Create Event...
			function myEventHandler() {
				var myID = id;
				var mapDiv = document.getElementById("IDmap"+myID);
				var mCbMap = document.getElementById("IDcbMap"+myID);
				if (mapDiv !== null)
				{
					mapDiv.style.display = (mCbMap.checked) ? "" : "none";
					var e = document.getElementById("mapcontainer"+myID);
					var cx = document.getElementById("cx"+myID).value;
					var cy = document.getElementById("cy"+myID).value;
					if (e)
					{
						that.drawMap(cx, cy, "mapcontainer"+myID);
					}
				}
			}

			YAHOO.util.Event.addListener("IDcbMap"+id, "click", myEventHandler);
			that.closeTabButton.style.visibility = "visible";
		}
	}


	// Method to show a panal containing the map
	// If the panael does not yet exist create it,
	// if it is hidden, show it and center
	// it it is visible, just change the map
	that.showMapPanel = function(x,y) {
		if (mapPanel === undefined)
		{
			mapPanel = new YAHOO.widget.Panel("panel2", { width:"640px", visible:false, draggable:true, close:true } );
			mapPanel.setHeader("Karte");
			mapPanel.setBody("Es wurden kein Koordinaten definiert");
			mapPanel.setFooter("");
			mapPanel.render("tab2");
		}

		mapPanel.setBody("<div id = \'mapPanelMap\' style='width:100%;height:400px;'></div>");
		mapPanel.render("tab2");
		var panelMap = new SearchChMap({ center:[y, x], container:"mapPanelMap" });
		if (mapPanel.cfg.getProperty('visible') == false)
		{
			mapPanel.center();
		}
		mapPanel.show();
	}

	that.drawMap = function(x,y,cont)
	{
		var Map = new SearchChMap({ center:[y, x], container:cont });
	}
	// Method to remove the active details tab
	that.removeActiveTab = function() {
		var activeIndex = that.tabView.get('activeIndex'); //set activeIndex here
		if (activeIndex > 1)
		{
			that.tabView.removeTab(that.tabView.get('activeTab'));
		}
		if (that.tabView.getTab(2) === undefined)
		{
			that.closeTabButton.style.visibility = "hidden";
		}
	}

	// Event Handler
	function onAdvanced()
	{
		var advSr = document.getElementById("IDadvSerach");
		advSr.style.visibility = (document.seladvserach.cbAdvanced.checked) ? "visible" : "hidden";
	}

	that.onKeyPress = function(e, adv)
	{
		var keynum;
		var keychar;
		var numcheck;
		if(window.event != undefined) // IE
		{
		  keynum = e.keyCode;
		}
		else if(e.which) // Netscape/Firefox/Opera
		{
		  keynum = e.which;
		}
		if (keynum == 13) {
			that.loaddata(adv);
		}
	}

	// Add Events (start search, if Return is pressed
	YAHOO.util.Event.addListener("IDcbAdvanced", "click", onAdvanced);

	function handleTabViewActiveTabChange (e) { 
	    var newState, currentState; 
	 
	    newState = "tab" + this.getTabIndex(e.newValue); 
	 
	    try { 
	        currentState = YAHOO.util.History.getCurrentState("tabview"); 
	        // The following test is crucial. Otherwise, we end up circling forever. 
	        // Indeed, YAHOO.util.History.navigate will call the module onStateChange 
	        // callback, which will call tabView.set, which will call this handler 
	        // and it keeps going from here... 
	        if (newState != currentState) { 
	            YAHOO.util.History.navigate("tabview", newState); 
	        } 
	    } catch (e) { 
	        that.tabView.set("activeIndex", newState.substr(3)); 
	    } 
	} 

}


//////////////////////////////////////////////////////////////
// Start the application here and add main Object to Namespace

ON.index = new ON.Index();
