/*
 * Classe statique JS - WEBSOCKET:TETRIS
 */

/*
 * au menu : 
 * - Connexion à un webserveur en local ou en externe
 * - Connexion de clients multiples au serveur pour un jeu en temps réel
 * - Gestion de l'affichage et des déconnexions
 */

var VLA_LIBRAIRIE = {
	tetris:{
		global:{},
		jeu:{},
		view:{},
		utils:{}
	}
};

var alias = {};


//-----------------------------------
/*
 * 		  VLA_LIBRAIRIE.tetris.global - CONTROLEUR
 */
//-----------------------------------

(function(){ 
VLA_LIBRAIRIE.tetris.global = VLA_LIBRAIRIE.tetris.global || {};

VLA_LIBRAIRIE.tetris.global = {
	socket:null,
	connecte:false,
	reconnexionInterval:null,
	frequenceEnvoiMessage:300,
	
    init:function () {
		// - Gestion Serveur
		self.socket = new io.Socket("88.191.78.70", {port: 4567});
		//self.socket = new io.Socket("192.168.0.14", {port: 4567});
		self.socket.on('connect', self.onConnexion);
		self.socket.on('message', self.onMessage);
		self.socket.on('disconnect', self.onDeconnexion); 
		self.socket.connect();
			
		
		self.reconnexionInterval = setInterval(function() {
			if(self.connecte) clearInterval(self.reconnexionInterval);
			self.socket.connect();
		}, 3000);
    },
    
    // -- Parametrage et initialisation des elements abstraits et physiques
    
    miseEnScene:function() {
    	alias.view.headerBarreInfo("tetris_texte_joueur",true);
    	alias.view.headerBarreInfo("tetris_bouton_participer",true);
    },
    
    // -- Récupération des events serveurs
    
    onConnexion:function() {
    	self.connecte = true;
    	self.__temporisationMessage();
    	alias.view.header("connexionreussie",null);
		self.miseEnScene();
    },
    
    onMessage:function(eData) {
    	// Voir le fichier /events.stclass.js
    },
    
    onDeconnexion:function() {
    	self.connecte = false;
		alias.view.header("deconnexion",null);
		alias.jeu.actionUI({"type":"deconnexion"});
		/*
		self.reconnexionInterval = setInterval(function() {
			if(self.connecte) clearInterval(self.reconnexionInterval);
			self.socket.connect();
		}, 5000);*/
    },
    
	intervalTempoMsg:null,
    tempoMessage:Array(),
    
    __temporisationMessage:function(frequence) {
    	self.intervalTempoMsg = setInterval(function() {
  	      self.onEnterFrame_tempoMsg();
    	}, self.frequenceEnvoiMessage);
    },
    
    sendMessage:function(msg) {
    	self.tempoMessage.push(msg);
    },
    
    onEnterFrame_tempoMsg: function() {
    	if(self.tempoMessage.length > 0) {
    		alias.jeu.communiquer(self.tempoMessage[0]);
    		self.tempoMessage.shift();
    	}
    }
	
};

var self = VLA_LIBRAIRIE.tetris.global;
alias.global = self;
})(); 

//*************************** FIN tetris.global ***************************//




//-----------------------------------
/*
 * 			 alias.view - CONTROLER
 *
 *			 - Gauche & droite actifs tout le long du jeu
 *			 - Touche bas lance le jeu
 */			
//-----------------------------------

(function(){ 
VLA_LIBRAIRIE.tetris.jeu = VLA_LIBRAIRIE.tetris.jeu || {};

VLA_LIBRAIRIE.tetris.jeu = {
	
	/*
	 * Variables publiques
	 */
	
	// -- Indicateurs
	jeu_en_cours:false,
	lancement_brique:false,
	
	// -- Tableau provenant Serveur
	joueurs:Array(),
	grille:Array(),
	nombre_total_ligne:null,
	
	// -- L'espace 
	borneEspace:{"minX":0,"maxX":8,"minY":0,"maxY":9},
	
	// -- Moi dans mon espace
	monId:0,
	nbJoueur:0,
	maPosition:{"x":null,"y":null},
	
	// -- Environnement
	intervalJeu:null,
    
    actionUI:function(obj) {
    	if(obj.type == "toogleStartStop") {
    		if(self.jeu_en_cours) self.arreter();
    		else self.demarrer();
    	} else if(obj.type == "deconnexion") {
        	alias.view.header("sereconnecter",null);
        	alias.view.headerBarreInfo("tetris_texte_joueur",false);
    	}
    },
    
	demarrer:function() {
    	self.jeu_en_cours = true;
    	alias.utils.abonnementClavier();
    	alias.view.header("boutonsedeconnecter",null);
		alias.view.tetrisUiSecondaire(true);		

    	alias.view.dialog.desactiver();
    	
    	$(document).trigger("game.start");
    	
    	self.maPosition.x = alias.utils.randomRange(0,8);
    	self.maPosition.y = 0;
	    alias.global.sendMessage({"type":"start_game","positionInitiale":self.maPosition});
    	self.ajouterBrique(self.monId,self.maPosition);
    },
    
    jouer:function(){
    	self.intervalJeu = setInterval(function() {
    	      self.onEnterFrame();
    	}, 500);
    },
    
    arreter:function() {
    	self.jeu_en_cours = false;
    	alias.utils.desabonnementClavier();
    	alias.view.elementVisibility("tetris_bouton_participer",false);
    	// - Communication
    	$(document).trigger("game.stop");
    	alias.global.sendMessage({"type":"stop_game"});
    },
    
    communiquer:function(obj) {
    	if(window.console&&(window.console.debug||window.console.log)) window.console.log(obj.type);
    	var message = null;
    	switch (obj.type) { 
	        case "start_game":  
	        	message = {"type":obj.type,"client":self.monId,"positionInitiale":obj.positionInitiale};
	        break;
	        case "stop_game":  
	        	message = {"type":obj.type,"client":self.monId};
		    break;
	        case "validation_touche":  
	        	message = {"type":obj.type,"client":self.monId,"position":self.maPosition};
		    break;
	        case "je_bouge":  
	        	message = {"type":"un_client_bouge","client":self.monId,"position":self.maPosition};
		    break;
	        default: 
	        	if(window.console&&(window.console.debug||window.console.log)) window.console.error("Type de message non répertorié : " + obj.type);
	        break;
    	}
    	
    	if(message != null) alias.global.socket.send(message);
    },
    
    receptionner:function(obj) {

    },
    
    // -- Permet de traiter et stocker la grille recue du serveur
    initGrille:function(grilleServeur) {
    	self.grille = grilleServeur;
    	for(var rangee = 0; rangee < grilleServeur.length; rangee++) {
    		var ligne = "ligne " +rangee+"	";
    		var tbLigneActuelle = grilleServeur[rangee];
    		for(var colonne = 0; colonne < tbLigneActuelle.length; colonne++) {
    			ligne += tbLigneActuelle[colonne];
    			if(tbLigneActuelle[colonne] == 1) {
    				alias.view.tetrisWarpAjoutFake({x:colonne,y:rangee});
    				
    				var nomBriqueFake = 'pierreAedifice_'+colonne+'_'+rangee;
    				if(colonne < 3) alias.view.elementAddClass(nomBriqueFake,"brique_type_labo",true);// - La birque se trouve dans labo
    		    	else if(3 <= colonne && colonne < 6) alias.view.elementAddClass(nomBriqueFake,"brique_type_web",true);// la brique se trouve dans Web
    		    	else alias.view.elementAddClass(nomBriqueFake,"brique_type_design",true);// la brique se trouve dans Design
    			}
    		}
    	}
		$(document).trigger("view.game.ready");
    },
    
    updateGrille:function(nouvelleGrille) {
    	self.backupGrille = self.grille;
    	self.grille = nouvelleGrille;
    },
    
    // -- Une brique représente un joueur et son entrée dans la partie
    ajouterBrique:function(id,position) {
    	// -- Deux cas,
    	// - On traite sa propre brique
    	// - On traite une brique quelconque
    	
    	if(self.monId != id) {
    		alias.view.tetrisWarpAjout(id);
    		alias.view.elementAddClass(id,"otherclient");
    		alias.view.elementVisibility(id,true);
    	} else {
    		alias.view.tetrisWarpAjout(id);
    		alias.view.elementAddClass(id,"myself");
    		alias.view.elementVisibility(self.monId,true);
    	}
    	
    	// -- Dans tous les cas on place la brique nouvellement crée au bon emplacement indiqué
    	self.bougerBrique(id,position);
    },
    
    // -- Permet de gérer les positions avec des bornes
    refreshPosition:function(position,incrementHorizontal,incrementVertical) {
    	var newPosX = position.x + incrementHorizontal;
    	var newPosY = position.y + incrementVertical;
    	if(self.grille[newPosY][newPosX] == 0) {
	    	if(self.borneEspace.minX <= newPosX && newPosX <= self.borneEspace.maxX) position.x = newPosX;
	    	if(self.borneEspace.minY <= newPosY && newPosY <= self.borneEspace.maxY) position.y = newPosY;
    	} 
    	return position;
    },
    
    refreshNom:function(element) {
    	var id = element.attr('id');
		id = id.split("_");
		var nomBriqueFake = 'pierreAedifice_'+id[1]+'_'+(parseInt(id[2]) + 1);
		element.attr('id',nomBriqueFake);
    },
    
    // -- Permet d'effectuer les derniers traitement avant la modification visuelle de la position
    bougerBrique:function(id,position) {
    	
    	// - Communication à tous les autres si c'est moi qui bouge
    	
    	
    	// - Traitement vertical
    	// - Traitement Horizontal
    	if(position.x < 3) alias.view.elementAddClass(id,"brique_type_labo",true);// - La birque se trouve dans labo
    	else if(3 <= position.x && position.x < 6) alias.view.elementAddClass(id,"brique_type_web",true);// la brique se trouve dans Web
    	else alias.view.elementAddClass(id,"brique_type_design",true);// la brique se trouve dans Design
    	
    	// - Mise à jour visuelle
		alias.view.briqueMove(id,position);
    },
    
    // -- Permet de gerer les actions à réaliser lors de l'entrée dans un nouvel espace de temps
    onEnterFrame:function() {
	    self.bougerBrique(self.monId,self.refreshPosition(self.maPosition,0,1));
	    alias.global.sendMessage({"type":"je_bouge"});
	    // - Traitement de la touche, donc que pour moi
    	if(self.maPosition.y+1 == self.grille.length) self.onTouche();
	    else if(self.grille[self.maPosition.y+1][self.maPosition.x] == 1) self.onTouche();
    },
    
    onTouche:function() {
    	if(window.console&&(window.console.debug||window.console.log)) window.console.log("Votre brique est stabilisée en colonne n°" + (self.maPosition.y+1) + " et rangée n°" + (self.maPosition.x+1) + ", qu'en pense le serveur ?");
    	
    	// -- Gestion côté serveur
	    alias.global.sendMessage({"type":"validation_touche","position":self.maPosition});

    	// - Gestion côté client
    	self.jeu_en_cours = false;
    	alias.utils.desabonnementClavier();
    	clearInterval(self.intervalJeu);
    },
    
    onToucheValidation:function(briqueId,updateBrique) {
    	if(briqueId == self.monId) $(document).trigger("game.finish");
    	var nomBriqueDejaPresente = 'pierreAedifice_'+updateBrique.x+'_'+updateBrique.y;
    	self.grille[updateBrique.y][updateBrique.x] = 1;
    	if($("#"+briqueId).length > 0) {
    		alias.view.elementOpacity(briqueId,1);
    		$("#"+briqueId).attr("id",nomBriqueDejaPresente);
    	} else {
    		if(window.console&&(window.console.debug||window.console.log)) window.console.log("onToucheValidation: Impossible de cibler " + "#"+briqueId);
    	}
    },
    
    onToucheNonValidation:function() {
    	
    },
    
    onLigne:function() {
		for(var i=0;i<9;i++) {
        	var nomBriqueDejaPresente = 'pierreAedifice_'+i+'_'+9;
        	alias.view.elementAddClass(nomBriqueDejaPresente,"ligne",false);
    	}
    	$(document).trigger("view.game.ligne");
    },
    
    onDeconnexion:function() {
    },
    
    // -- Générer un comportement en fonction des events clavier
    onClavier:function(e) {
    	switch (e.namespace) { 
	    	case "bas":  
	    		if(!self.lancement_brique) {
	    			self.lancement_brique = true;
	    			$(document).trigger("game.go");
		    		self.bougerBrique(self.monId,self.refreshPosition(self.maPosition,0,1));
	    		} 
	    		break;
	    	case "droite":
	    		self.bougerBrique(self.monId,self.refreshPosition(self.maPosition,1,0));
    		    alias.global.sendMessage({"type":"je_bouge"});
		        break;
	    	case "gauche": 
	    		self.bougerBrique(self.monId,self.refreshPosition(self.maPosition,-1,0));
    		    alias.global.sendMessage({"type":"je_bouge"});
		        break;
	        default: 
	        break;
    	}
    },
    
    sauvegarderInformation:function() {
    	var referenceBrique = self.getReferenceBrique(self.maPosition.x,self.maPosition.y);
    	if(window.console&&(window.console.debug||window.console.log)) window.console.log("Votre brique a pour référence : " + referenceBrique);
    	alias.ajax.informationBriqueSave(referenceBrique,$("#form_brique_nom").val(),$("#form_brique_message").val());
    	alias.view.tetrisUiSecondaire(false);
    },
    
    getReferenceBrique:function(posX,posY) {
    	return ((self.nombre_total_ligne + (self.borneEspace.maxY + 1 - posY)) + "_" + posX);
    }
};

var self = VLA_LIBRAIRIE.tetris.jeu;
alias.jeu = self;
})(); 


//*************************** FIN tetris.jeu ***************************//







// -----------------------------------
/*
 * 			 VLA_LIBRAIRIE.tetris.view - VIEW
 */
//-----------------------------------

(function(){ 
VLA_LIBRAIRIE.tetris.view = VLA_LIBRAIRIE.tetris.view || {};

VLA_LIBRAIRIE.tetris.view = {
	
	/*
	 * Variables publiques
	 */
	largeurColonne:270,
	largeurBrique:20,
	longueurBrique:90,
		
    
    /*
	 * Méthodes pour les informations
	 */
    
    // -- Permet de gérer la barre d'outil en dessous de l'espace de jeu
	header:function (etape,param) {
    	var messageAecrire, selecteurCible;
    	switch (etape) { 
        case "connexion":  
        	selecteurCible = $("#tetris_texte_info");
        	messageAecrire = "Connexion en cours";
            break;
        case "connexionreussie":  
        	selecteurCible = $("#tetris_texte_info");
        	messageAecrire = "vous êtes connecté";
            break;
        case "deconnexion":   
        	selecteurCible = $("#tetris_texte_info");
        	messageAecrire = "Vous êtes déconnecté du serveur";
            break;
        case "nombredeligne": 
        	selecteurCible = $("#tetris_texte_info");
        	if(param != null) messageAecrire = "<span>"+param+"</span> lignes";
        	else messageAecrire = "<span>"+alias.jeu.nombre_total_ligne+"</span> lignes";
            break;
        case "nouvelleligne": 
        	selecteurCible = $("#tetris_texte_info");
        	messageAecrire = "+1 ligne";
        	selecteurCible.animate({opacity:0}, 100, function(){
        		$("#tetris_texte_info").addClass('light');
    			$("#tetris_texte_info").animate({opacity:1},3000,function(){
    				setTimeout(function(){
    					$("#tetris_texte_info").removeClass('light');
    				},700);
    			});
        		
        	});
            break;
        case "nouvellebrique":    		
            break;
        case "nouvelutilisateur":
        	selecteurCible = $("#tetris_texte_joueur");
        	messageAecrire = "+1 utilisateur en ligne";
            break;
        case "nombreutilistateur":  
        	selecteurCible = $("#tetris_texte_joueur");
        	messageAecrire = "<span>"+param+"</span> joueurs en ligne";
            break;
        case "boutonsedeconnecter":  
        	selecteurCible = $("#tetris_bouton_participer");
        	messageAecrire = "se deconnecter";
            break;
        case "boutonparticiper":  
        	selecteurCible = $("#tetris_bouton_participer");
        	messageAecrire = "participer";
            break;
        case "sereconnecter":  
        	selecteurCible = $("#tetris_bouton_participer");
        	messageAecrire = "se connecter";
            break;
        default: 
	        if(window.console&&(window.console.debug||window.console.log)) window.console.error("Ciblage header inopérant : " + etape);
	        break;
    	}
    	selecteurCible.html(messageAecrire);
    },
    
    // -- Permet de gerer la visibilité des éléments de la barre info
    headerBarreInfo:function(element,visibilite) {
    	selecteurJquery = $("#"+element);
    	if(visibilite) {
    		$("#"+element).css('display','block');
    		selecteurJquery.animate({opacity:1},1000);
    	} else {
    		selecteurJquery.animate({opacity:0},200,function() {
        		$("#"+element).css('display','none');
    		});
    	}
    },
    
    // -- Permet d'afficher un message de soutient au pole ciblé
    wrapColSoutient:function(posX) { 
    	posX = parseInt(posX/3);
    	var col;
    	if(posX == 0) col = "labo";
    	else if(posX == 1) col = "web";
    	else col = "design";
    	self.elementAddClass("tetris_pole_soutient","soutient_fondation_"+col,true);
    	$("#tetris_pole_soutient").css({left:posX*self.largeurColonne});
    	self.elementVisibility("tetris_pole_soutient",true);
    	$("#tetris_pole_soutient").show();
    },
    
    /*
	 * Méthodes de la partie visuelle du jeu
	 */
    
    // -- Ajouter un element à l'espace de jeu
    tetrisWarpAjout:function (id) {
    	$("#tetris_wrap").append('<div id="'+id+'" class="brique"></div>');
    	$('#'+id).css('opacity',0);
    },
    
    tetrisWarpAjoutFake:function (position) {
    	var nomBriqueDejaPresente = 'pierreAedifice_'+position.x+'_'+position.y;
    	$("#tetris_wrap").append('<div id="'+nomBriqueDejaPresente+'" class="brique"><span class="info" style="display:none;"><span class="tetris_message"></span><br/>--------------<span class="tetris_date"></span><span class="tetris_nomClient"></span></span></div>');
    	self.elementAddClass(nomBriqueDejaPresente,'fake','true');
    	self.briqueMove(nomBriqueDejaPresente,position);
    	$('#'+nomBriqueDejaPresente).css('opacity',0);
    	self.elementVisibility(nomBriqueDejaPresente,true);
    },
    
    // -- Supprimer un element à l'espace de jeu
    tetrisWarpSuppression:function (id) {
    	var type = "#";
    	var pointeur = type.concat(id);
    	$(pointeur).remove();
    },
    
    tetrisUiSecondaire:function(visibilite) {
    	self.elementVisibility("tetris_ombre_labo",visibilite);
    	self.elementVisibility("tetris_ombre_web",visibilite);
    	if(visibilite) {
    		$('#tetris_wrap').removeClass("inactif");
    	} else {
    		$('#tetris_wrap').addClass("inactif");
    	}
    },
    
    tetrisUiHeader:function(visibilite) {
    	$('#header').css({'opacity':0,'display':'block'});
    	self.elementVisibility("header",visibilite);
    },
    
    // -- Ajouter une classe avec possibilité de cleaner à un element de l'espace de jeu
    elementAddClass:function (id,classe,cleanClass) {
    	// - On clean la classe d'une brique
    	if(alias.utils.isNumber(id) && cleanClass) {
	    	if($('#'+id).hasClass("brique_type_labo")) self.elementRemoveClass(id,"brique_type_labo");
	    	if($('#'+id).hasClass("brique_type_web")) self.elementRemoveClass(id,"brique_type_web");
	    	if($('#'+id).hasClass("brique_type_design")) self.elementRemoveClass(id,"brique_type_design");
    	} else if(id == "tetris_pole_soutient") {
    		if($('#'+id).hasClass("soutient_fondation_labo")) self.elementRemoveClass(id,"soutient_fondation_labo");
	    	if($('#'+id).hasClass("soutient_fondation_web")) self.elementRemoveClass(id,"soutient_fondation_web");
	    	if($('#'+id).hasClass("soutient_fondation_design")) self.elementRemoveClass(id,"soutient_fondation_design");
    	}
    	
    	$('#'+id).addClass(classe);
    },
    
    // -- Supprimer une classe d'un element de l'espace de jeu
    elementRemoveClass:function (id,classe) {
    	$('#'+id).removeClass(classe);
    },

    // -- Définir la visibilité d'une brique
    elementVisibility:function (id,visibilite) {
    	if(visibilite && $('#'+id).css('opacity') == 0) {
    		var opacite = 1;
    		if(id != alias.jeu.monId && !$('#'+id).hasClass('fake') && $('#'+id).hasClass('brique')) opacite = alias.utils.randomRange(0.3,0.8,1);
    		$('#'+id).css({'opacity':0,'display':'block'}).animate({opacity:opacite},alias.utils.randomRange(200,1000));
    	} else if(!visibilite) { 
    		$('#'+id).animate({opacity:0},200,function(){
	    		$(this).css({'display':'none'});
	    	});
    	}
    	
    },
    
    elementOpacity:function(id,opacite) {
		$('#'+id).animate({opacity:opacite},200);
    },
    
    /*
     *  LA BRIQUE
     */
    
    // -- Déplacer une brique 
    briqueMove:function (id,position) {
    	var posX = position.x*self.longueurBrique;
    	var posY = position.y*self.largeurBrique;
    	var backgroundPos = 0;
    	if(position.x % 3 == 1) backgroundPos = -90;
    	else if(position.x % 3 == 2) backgroundPos = -180;
    		
    	if(position.y == 0 && $('#'+id).hasClass("myself")) self.wrapColSoutient(position.x);
    	$('#'+id).css({top:posY,left:posX,'background-position':backgroundPos+'px 0px'});
    },
    
    onBriqueEnter:function () {
    	$(this).stop().animate({opacity:0.5},200,function(){
    		VLA_LIBRAIRIE.tetris.view.affichette.activer($(this).attr('id'));
    	});
    },
    
    onBriqueLeave:function () {
    	$(this).stop().animate({opacity:1},200,function(){
    		VLA_LIBRAIRIE.tetris.view.affichette.desactiver();
    	});
    },
    
    onBriqueClick:function () {
    	if(window.console&&(window.console.debug||window.console.log)) window.console.log("DeSurvol");
    },
        
    /*
     *  L'INFOBULLE
     */
    
    /*
     *  LA LIGNE
     */
    
    // -- Gerer la disparition d'une ligne    
    disparitionLigne:function () {
    	self.effetClignotement();
    },
    
    effetClignotement:function() {
    	$('.ligne').each(function(){
    		if($(this).hasClass('brique_type_labo')) $(this).addClass('feu_type_labo');
        	else if($(this).hasClass('brique_type_web')) $(this).addClass('feu_type_web');
        	else if($(this).hasClass('brique_type_design')) $(this).addClass('feu_type_design');
    	});
    	
    	setTimeout('alias.view.effetDisparition()',1000);    	
    },
    
    effetDisparition:function() {
    	$('.ligne').animate({opacity:0},200,'swing',function(){
    		$('.ligne').remove();
    	});
    	self.effetEscalierParColonne();
    },
    
    effetEscalier_countCol:0,
    effetEscalierParColonne:function () {
		var colonneAtraiter = self.effetEscalier_countCol;
		for(var rangee = 0; rangee < alias.jeu.backupGrille.length; rangee++) {
			if(alias.jeu.backupGrille[rangee][colonneAtraiter] == 1) {
				var pointeur = 'pierreAedifice_'+colonneAtraiter+'_'+rangee;
		    	if(window.console&&(window.console.debug||window.console.log)) window.console.log("Bouge " + pointeur);
				var selecteur = $("#"+pointeur);
		    	if(selecteur.length > 0) selecteur.animate({top:(rangee+1)*self.largeurBrique},1000,'easeOutElastic');
				//alias.jeu.refreshNom($("#"+pointeur));
			}
		}
		self.effetEscalier_countCol++;
		setTimeout('alias.view.effetEscalierParColonne()',500/self.effetEscalier_countCol);
    },
    
    effetEscalier_countRangee:0,
    effetEscalierParRangee:function () {
		var colonneAtraiter = self.effetEscalier_countCol;
		
		
    },
    
    effetChuteEnBloc:function () {
    	$('.fake').each(function(){
    		var depY = $(this).position().top + self.largeurBrique;
    		$(this).animate({top:depY},1000,'easeInElastic',function(){
    			alias.jeu.refreshNom($(this));
    		});
    	});
    }
};

var self = VLA_LIBRAIRIE.tetris.view;
alias.view = self;
})(); 

//*************************** FIN tetris.view ***************************//




//-----------------------------------
/*
 * tetris.view.dialog
 */
//-----------------------------------

(function(){ 
	VLA_LIBRAIRIE.tetris.view.dialog = VLA_LIBRAIRIE.tetris.view.dialog || {};

	VLA_LIBRAIRIE.tetris.view.dialog = {
		dialog:{},
		message:{},
		fond_opacite:0.9,
		vitesse_apparition:200,
		interval:null,
		
		__contructor__:function() {
			$(document).ready(function(){
				self.dialog.wrap = $("#tetris_cartouche_information");
				self.dialog.fond = $("#tetris_cartouche_information .fond");
				self.dialog.contenu = $("#tetris_cartouche_information .contenu");
				self.hide();
			});
		},
	
		__events:function() {
			$("#tetris_cartouche_information").mouseenter(self.onMouseEnter);
			$("#tetris_cartouche_information").mouseleave(self.onMouseLeave);
		},
		
		__unEvents:function() {
			$("#tetris_cartouche_information").unbind('mouseenter');
			$("#tetris_cartouche_information").unbind('mouseleave');
			self.dialog.contenu.unbind('click');
		},
		
		load:function(options,callback){
			self.message = { type:null,
						url:null,
						cursor:null,
						html:null,
						callback:null,
						desactivation:true,
						mouseSensible:true,
						delay:null,
						position:"center"};
			for ( var cle in options ) {
				self.message[cle] = options[cle];
			}
			self.message.callback = callback;
			
			// CONTENU
			if(self.message.type == "texte");
			else if(self.message.type == "image") self.chargeurImage();
			
			// ACTION
			if(self.message.type != "formulaire") {
				self.dialog.contenu.unbind('click');
				if(self.message.callback != null) {
					if(self.message.desactivation == true) {
					self.dialog.contenu.click(function(){
						self.message.callback();
						self.desactiver();
					});
					} else {
						self.dialog.contenu.click(self.message.callback);
					}
				}
			} else {
				self.insertionHtml();
			}
			
			if(self.message.mouseSensible) {
				self.__events();
			} else {
				self.__unEvents();
			}
			
			if(self.message.cursor != null) self.dialog.contenu.css({cursor:self.message.cursor});
			else self.dialog.contenu.css({cursor:'default'});
		},
		
		chargeurImage:function() {
			var img = new Image();
			$(img)
				.load(function () {
					self.dialog.contenu.css('opacity',0);
					self.dialog.contenu.html(this);
					if(self.dialog.contenu.height() == 0 || self.dialog.contenu.width() == 0) if(window.console&&(window.console.debug||window.console.log)) window.console.error("TETRIS:VIEW:DIALOG:chargeurImage : Erreur taille image");

					self.position();
				})
				
			    .error(function () {
			      if(window.console&&(window.console.debug||window.console.log)) window.console.error("TETRIS:VIEW:DIALOG:MESSAGE : Erreur de chargement d'image");
			    })
			    
			    .attr('src', self.message.url);
		},
		
		insertionHtml:function() {
			self.dialog.contenu.css({top:0,left:0});
			self.dialog.contenu.css('opacity',0);
			self.dialog.contenu.html(self.message.html);
			self.activer();
			self.interval = setInterval(function(){
				if(self.dialog.contenu.width() > 0) {
					self.position();
					clearInterval(self.interval);
					self.dialog.wrap.hide();

					if(self.message.delay) setTimeout('alias.view.dialog.show()',self.message.delay);
					else self.show();
				}
			}, 50);
		},
		
		// VISUEL
		
		activer:function() {
			self.dialog.wrap.show();
		},
		
		desactiver:function () {
			self.hide(function(){self.dialog.wrap.hide();});
			
		},
		
		onMouseEnter:function() {
			self.show();
		},
		
		onMouseLeave:function() {
			self.hide();
		},
		
		show:function(callback) {
			self.activer();
			if(callback == "undefined" || callback == null) { 
				self.dialog.fond.animate({opacity:self.fond_opacite},self.vitesse_apparition);
				self.dialog.contenu.animate({opacity:1},self.vitesse_apparition);
			} else {
				self.dialog.fond.animate({opacity:self.fond_opacite},self.vitesse_apparition);
				self.dialog.contenu.animate({opacity:1},self.vitesse_apparition,callback);
			}
		},
		
		hide:function(callback) {
			if(callback == "undefined" || callback == null) {
				self.dialog.fond.animate({opacity:0},self.vitesse_apparition);
				self.dialog.contenu.animate({opacity:0},self.vitesse_apparition);
			} else {
				self.dialog.fond.animate({opacity:0},self.vitesse_apparition,callback);
				self.dialog.contenu.animate({opacity:0},self.vitesse_apparition);
			}
		},
		
		position:function() {
			if(self.message.position == "center") {
				var left = self.dialog.wrap.width()/2 - self.dialog.contenu.width()/2;
				var top = self.dialog.wrap.height()/2 - self.dialog.contenu.height()/2;	
				self.dialog.contenu.css({top:top,left:left});
			} else {
				var left = 0;
				var top = 0;
				if(self.message.position.x != null && self.message.position.x != "undefined" && self.message.position.y != null && self.message.position.y != "undefined") {
					top = self.message.position.y;
					left = self.message.position.x;
					if(self.message.position.x == "center") left = self.dialog.wrap.width()/2 - self.dialog.contenu.width()/2;
					if(self.message.position.y == "center") top = self.dialog.wrap.height()/2 - self.dialog.contenu.height()/2;
					self.dialog.contenu.css({top:top,left:left});
				}
			}
		}
	};

	var self = VLA_LIBRAIRIE.tetris.view.dialog;
	self.__contructor__();
})(); 

//*************************** FIN tetris.view.dialog ***************************//



//-----------------------------------
/*
 * tetris.view.affichette
 */
//-----------------------------------



(function(){ 
	VLA_LIBRAIRIE.tetris.view.affichette = VLA_LIBRAIRIE.tetris.view.affichette || {};

	VLA_LIBRAIRIE.tetris.view.affichette = {
			
		affichette:null,
		pointe:null,
		contenu:null,
		date:null,
		nom:null,
		memoire_brique:null,
		
		__contructor__:function() {
			$(document).ready(function(){
				self.affichette = $("#tetris_affichette");
				self.pointe = $("#tetris_affichette .pointe");
			});
		},
	
		deplacer:function(left,top) {
			if(left <= 0) {
				self.pointe.css("background-position","left");
				left = 30;
			} else if(left + self.affichette.width() >= 810) {
				self.pointe.css("background-position","right");
				left = 810 - 30 - self.affichette.width();
			} else {
				self.pointe.css("background-position","center");
			}
			self.affichette.css({top:top,left:left});
		},
		
		show:function(callback) {
			self.affichette.show();
			if(callback == "undefined" || callback == null) { 
				self.affichette.delay(600).animate({opacity:1},300);
			} else {
				self.affichette.delay(600).animate({opacity:1},300,callback);
			}
		},
		
		hide:function(callback) {
			self.affichette.css('opacity',0);
			if(callback != "undefined" || callback != null)  callback();
		},
		
		set:function(date,nom,contenu) {
			self.date = date;
			self.nom = nom;
    		self.contenu = contenu;
    		$("#"+self.memoire_brique).children(".info").children(".tetris_date").html();
			$("#"+self.memoire_brique).children(".info").children(".tetris_nomClient").html();
    		$("#"+self.memoire_brique).children(".info").children(".tetris_message").html();
    		self.affichette.children(".contenu").children("p").html(self.contenu);
    		self.affichette.children(".contenu").children(".date").html(self.date);
    		self.affichette.children(".contenu").children(".nom").html(self.nom);
    		self.show();
		},
		
		activer:function(brique_cible) {
			self.deplacer($("#"+brique_cible).position().left - 30,$("#"+brique_cible).position().top + 20);
			var arr = brique_cible.split("_");
			self.memoire_brique = brique_cible;
			var refBrique = alias.jeu.getReferenceBrique(arr[1],arr[2]);
			if($("#"+brique_cible).children(".info").children(".tetris_date").html() == "") {
				alias.ajax.informationBriqueGet(refBrique);
			} else {
				self.date = $("#"+brique_cible).children(".info").children(".tetris_date").html();
				self.nom = $("#"+brique_cible).children(".info").children(".tetris_nomClient").html();
	    		self.contenu =  $("#"+brique_cible).children(".info").children(".tetris_message").html();
	    		self.affichette.children(".contenu").children("p").html(self.contenu);
	    		self.affichette.children(".contenu").children(".date").html(self.date);
	    		self.affichette.children(".contenu").children(".nom").html(self.nom);
	    		self.show();
			}
		},
		
		desactiver:function() {
			self.hide(function(){self.affichette.hide();});
		}
	};

	var self = VLA_LIBRAIRIE.tetris.view.affichette;
	self.__contructor__();
})(); 

// *************************** FIN TETRIS:VIEW:AFFICHETTE ***************************//
