var frontController = function() {

	var papleft = new Object;
	var papright = new Object;
	
	var libleft = new Object;
	var libright = new Object;
	
	var common = new Object;

	return {
		init : function () {
			
			papleft.ctn = document.getElementById('pde-pap-lft');
			papright.ctn = document.getElementById('pde-pap-rgt');
			papleft.currentUrl = '/ajax/papeterie/indexleft';
			papright.currentUrl = '/ajax/papeterie/indexright';

			libleft.ctn = document.getElementById('pde-lib-lft');
			libright.ctn = document.getElementById('pde-lib-rgt');
			libleft.currentUrl = '/ajax/librairie/indexleft';
			libright.currentUrl = '/ajax/librairie/indexright';
			 
			common.ctn = document.getElementById('pde-common-ctn');
			
			var frontBookmarkedState = YAHOO.util.History.getBookmarkedState("front"); 
			var frontInitialState = frontBookmarkedState || "index"; 
			
			YAHOO.util.History.register("front", frontInitialState, frontController.changeState); 
			
			YAHOO.util.History.onReady(function () {
			    var frontCurrentState = YAHOO.util.History.getCurrentState("front");
			   	if (frontCurrentState.substring(0, 4) != 'http') {
			   		// A state hash exist
					frontController.changeState(frontCurrentState);
					pageTracker._trackPageview('/'+frontCurrentState);
				}
			});
			
			YAHOO.util.History.initialize("yui-history-field", "yui-history-iframe");
		},
		changeState : function(state) {
			
			try {
				// Tracking hash change to google analytics
				pageTracker._trackPageview('/'+state);
			} catch (e) {
				//alert(e);
			}
			
			var layout = 'center';
			var urlparams = '';
			
			tokens = state.split('/');
			if (tokens[1] == null) {
				tokens[1] = 'index';
			} else if (tokens[2] != null) {
				for (i=2; i<tokens.length; i++) {
					urlparams += '/' + tokens[i];
				}
			}
			
			switch (tokens[0]) {
				case 'librairie' :
					layout = 'librairie';
					frontController.loadContent('/ajax/' + tokens[0] +'/' + tokens[1] + 'left' + urlparams, libleft);
					frontController.loadContent('/ajax/' + tokens[0] +'/' + tokens[1] + 'right' + urlparams, libright);
					break;
				case 'papeterie' :
					layout = 'papeterie';
					frontController.loadContent('/ajax/' + tokens[0] +'/' + tokens[1] + 'left' + urlparams, papleft);
					frontController.loadContent('/ajax/' + tokens[0] +'/' + tokens[1] + 'right' + urlparams, papright);
					break;
				case 'agenda' :
				case 'acces' :
				case 'horaires' :
				case 'contact' :
					layout = 'common';
					frontController.loadContent('/ajax/' + tokens[0] +'/' + tokens[1] + 'common' + urlparams, common);
					break;
				default :
					layout = 'center';
					frontController.loadContent('/ajax/librairie/indexleft' + urlparams, libleft);
					frontController.loadContent('/ajax/librairie/indexright' + urlparams, libright);
					frontController.loadContent('/ajax/papeterie/indexleft' + urlparams, papleft);
					frontController.loadContent('/ajax/papeterie/indexright' + urlparams, papright);
					break;
			}
			
			layoutManager.showLayout(layout);
		},
		linkClick : function (obj) {
		
			// IE + Opera didn't return the hash with the / Firefox and Safari does!
			if (obj.pathname.substring(0, 1) == '/') {
				var path = obj.pathname.substring(1, obj.pathname.length);
			} else {
				var path = obj.pathname;
			}
			
			tokens = path.split('/');
			
			var layout = 'center';
			switch (tokens[0]) {
				case 'librairie' :
					layout = 'librairie';
					break;
				case 'papeterie' :
					layout = 'papeterie';
					break;
				case 'agenda' :
				case 'acces' :
				case 'horaires' :
				case 'contact' :
					layout = 'common';
					var currentState = YAHOO.util.History.getCurrentState("front");
					tokensState = currentState.split('/');
					if (tokensState[0] != 'agenda' && tokensState[0] != 'acces' && tokensState[0] != 'contact' && tokensState[0] != 'horaires') {
						layoutManager.setStateBeforeCommon(currentState);
					}
					break;
				default :
					layout = 'center';
					path = 'accueil';
					break;
			}
			
			YAHOO.util.History.navigate("front", path);
		},
		ajaxClick : function(obj, side) { 
			var urlparams = '';
		
			// IE + Opera didn't return the hash with the / Firefox and Safari does!
			if (obj.pathname.substring(0, 1) == '/') {
				var path = obj.pathname.substring(1, obj.pathname.length);
			} else {
				var path = obj.pathname;
			}
			
			tokens = path.split('/');
			var ctn;
			switch (tokens[0]) {
				case 'papeterie' :
					ctn = 'pde-pap-'; 
					break;
				case 'librairie' :
					ctn = 'pde-lib-';
					break;
			}
			
			if (side == 'right') {
				ctn += 'rgt';
			} else {
				ctn += 'lft';
			}
			
			if (tokens[1] == null) {
				tokens[1] = 'index';
			} else if (tokens[2] != null) {
				for (i=2; i<tokens.length; i++) {
					urlparams += '/' + tokens[i];
				}
			}
			var obj = new Object();
			obj.ctn = document.getElementById(ctn);
			
			frontController.loadContent('/ajax/' + tokens[0] + '/' + tokens[1] + side + urlparams, obj);
			
		},
		formSubmit : function(url, form) {
			var callback = 
			{
				success: function(o) {
					common.currentUrl = url;
					common.ctn.innerHTML = o.responseText;
				},
				failure: function(o) {
					common.currentUrl = 'erreur';
					common.ctn.innerHTML = '<img src="/img/exclamation.png" /> Erreur lors du chargement.';
				}
			}
			YAHOO.util.Connect.setForm(form); 
			var cObj = YAHOO.util.Connect.asyncRequest('POST', url, callback);
			common.ctn.innerHTML = '<img src="/img/ajax-loader-com.gif" /> Envoi de vos données en cours...';
			
			return false;
		},
		loadContent : function(url, obj) {
			var callback =
			{
				success: function(o) {
					obj.currentUrl = url;
					obj.ctn.innerHTML = o.responseText;
				},
				failure: function(o) {
					obj.currentUrl = 'erreur';
					obj.ctn.innerHTML = '<img src="/img/exclamation.png" /> Erreur lors du chargement.';
				}
			}
			
			if (url != obj.currentUrl) {
				var imgloader;

				switch (obj.ctn.id) {
					case papleft.ctn.id :
					case papright.ctn.id :
						imgloader = 'ajax-loader-pap.gif';
						break;
					case libleft.ctn.id :
					case libright.ctn.id :
						imgloader = 'ajax-loader-lib.gif';
						break;
					case common.ctn.id :
						imgloader = 'ajax-loader-com.gif';
						break;
					default :
						imgloader = 'ajax-loader-com.gif';
						break;
				}
				obj.ctn.innerHTML = '<br /><img src="/img/' + imgloader + '" /> Chargement en cours...';
				var transaction = YAHOO.util.Connect.asyncRequest('GET', url, callback, null);
			}
		}
	}
}();
