// JavaScript Document

// Firebug issues
var console;
try{ console.log('[init] OK'); }catch(e){ console={ log:function(){} } }

// Debug mode
var debug=true;

//CONFIGURATION
var ip_select = false; //1 fleur par IP ou non (false = non)
var ip_tab = new Array();
var client_ip;

var init_mode = "120"; //Nb de fleurs à afficher sur le jardin. ALL si toutes, sinon un nombre !

var pseudo;
var mail;
var message;
var gab_flower;

var ajax_url = "http://www.lesfleursdelafraternite.org/ajax_jardin.php";

var droppable = 0; //Check si le droppable existe déjà ou pas.
var ie6 = 0; //Check si on est sur IE6

var nb_flower = 0; //Permet de savoir combien de fleurs sont présentes, et génère les ID.


//functions

//Renvoie les tailles de la FENETRE du client
function getWindowSize(){
	windowWidth =  window.innerWidth;
	windowWidth = (windowWidth)? windowWidth : document.documentElement.clientWidth;
	windowWidth = (windowWidth)? windowWidth : document.body.clientWidth;
	windowHeight =  window.innerHeight;
	windowHeight = (windowHeight)? windowHeight: document.documentElement.clientHeight;
	windowHeight = (windowHeight)? windowHeight: document.body.clientHeight;  
	return {'width': windowWidth, 'height': windowHeight};
}

//Renvoie les tailles de la PAGE HTML
function getPageSize(){
	var windowSize = getWindowSize()
	var xScroll = document.body.scrollWidth;
	var yScroll = (window.innerHeight && window.scrollMaxY)? window.innerHeight + window.scrollMaxY : document.body.scrollHeight;
	var pageWidth = (xScroll < windowSize.width)? windowSize.width : xScroll;  
	var pageHeight = (yScroll < windowSize.height)? windowSize.height : yScroll;
	return {'width': pageWidth, 'height': pageHeight};
}

//IN_ARRAY
function in_array(needle, haystack, argStrict) {
 
    var key = '', strict = !!argStrict;
 
    if (strict) {
        for (key in haystack) {
            if (haystack[key] === needle) {
                return true;
            }
        }
    } else {
        for (key in haystack) {
            if (haystack[key] == needle) {
                return true;
            }
        }
    }
 
    return false;
}

//Detecte le navigateur
var BrowserDetect = {
	init: function () {
		this.browser = this.searchString(this.dataBrowser) || "An unknown browser";
		this.version = this.searchVersion(navigator.userAgent)
			|| this.searchVersion(navigator.appVersion)
			|| "an unknown version";
		this.OS = this.searchString(this.dataOS) || "an unknown OS";
	},
	searchString: function (data) {
		for (var i=0;i<data.length;i++)	{
			var dataString = data[i].string;
			var dataProp = data[i].prop;
			this.versionSearchString = data[i].versionSearch || data[i].identity;
			if (dataString) {
				if (dataString.indexOf(data[i].subString) != -1)
					return data[i].identity;
			}
			else if (dataProp)
				return data[i].identity;
		}
	},
	searchVersion: function (dataString) {
		var index = dataString.indexOf(this.versionSearchString);
		if (index == -1) return;
		return parseFloat(dataString.substring(index+this.versionSearchString.length+1));
	},
	dataBrowser: [
		{
			string: navigator.userAgent,
			subString: "Chrome",
			identity: "Chrome"
		},
		{ 	string: navigator.userAgent,
			subString: "OmniWeb",
			versionSearch: "OmniWeb/",
			identity: "OmniWeb"
		},
		{
			string: navigator.vendor,
			subString: "Apple",
			identity: "Safari",
			versionSearch: "Version"
		},
		{
			prop: window.opera,
			identity: "Opera"
		},
		{
			string: navigator.vendor,
			subString: "iCab",
			identity: "iCab"
		},
		{
			string: navigator.vendor,
			subString: "KDE",
			identity: "Konqueror"
		},
		{
			string: navigator.userAgent,
			subString: "Firefox",
			identity: "Firefox"
		},
		{
			string: navigator.vendor,
			subString: "Camino",
			identity: "Camino"
		},
		{		// for newer Netscapes (6+)
			string: navigator.userAgent,
			subString: "Netscape",
			identity: "Netscape"
		},
		{
			string: navigator.userAgent,
			subString: "MSIE",
			identity: "Explorer",
			versionSearch: "MSIE"
		},
		{
			string: navigator.userAgent,
			subString: "Gecko",
			identity: "Mozilla",
			versionSearch: "rv"
		},
		{ 		// for older Netscapes (4-)
			string: navigator.userAgent,
			subString: "Mozilla",
			identity: "Netscape",
			versionSearch: "Mozilla"
		}
	],
	dataOS : [
		{
			string: navigator.platform,
			subString: "Win",
			identity: "Windows"
		},
		{
			string: navigator.platform,
			subString: "Mac",
			identity: "Mac"
		},
		{
			   string: navigator.userAgent,
			   subString: "iPhone",
			   identity: "iPhone/iPod"
	    },
		{
			string: navigator.platform,
			subString: "Linux",
			identity: "Linux"
		}
	]

};
BrowserDetect.init();

//Initialise le script
function init_jardin(){
	
	//verif IE6
	if(BrowserDetect.browser == "Explorer" && BrowserDetect.version < 7 && ie6 == 0){
		alert('L\'affichage de ce site n\'est pas optimis\351 pour votre version du navigateur.\n Pour profiter pleinement du site, veuillez mettre \340 jour votre version d\'Internet Explorer.');
		ie6 = 1;
	}
	
	if(droppable == 0){
		
		Droppables.add(
			 'jardin',
			 {
				onDrop: save_flower
			 }
		  );
		droppable = 1;
		
	}
	
	if(ip_select == true){
		get_ip();	
	}
	
	var url = ajax_url+"?action=get_flowers&answer_type=json";
	if(init_mode == "all"){
		url += "&mode=all";
	}else{
		url += "&mode="+init_mode;
	}
	
	new Ajax.Request(url, {
		method: 'post',
		asynchronous: false,
		onSuccess: function(transport) {
			var retour=transport.responseText;
			var json=eval('(' + retour + ')');
			if(debug==true){ console.log('[GET flowers], response : '+retour); }
	
				var html;
				var i = 0;
				
				for(i; i<json.flowers.length; i++){
					
					html = "";
					nb_flower++;
					//HTML FLEUR + MESSAGE
					html += "<div class='fleur_div' id='fleur_"+nb_flower+"' style='top:"+json.top[i]+"px; left:"+json.left[i]+"px;'>";
					html += "<div class='fleur' id='fleur_gab"+json.flowers[i]+"' onmouseover='javascript:open_pseudo(\""+nb_flower+"\");' onmouseout='javascript:close_pseudo(\""+nb_flower+"\");' onclick='javascript:open_message(\""+nb_flower+"\");'>";
					html += "<img src='/img/jardin/gab"+json.flowers[i]+".png' alt='' title='' /></div>";
					html += "<div class='pseudo' id='pseudo_"+nb_flower+"' style='display:none;'>";
					html += json.pseudo[i]+"</div>";
					html += "<div class='message' id='message_"+nb_flower+"' style='display:none;'><b><u>"+json.pseudo[i]+"</u></b> a &eacute;crit :<br />"+json.message[i]+"<br /><br /><a href='javascript:close_message("+nb_flower+");'>Fermer</a></div>";
					html += "</div>";
					
					if(debug==true){ console.log('[NB flowers] : '+nb_flower); }
					
					document.getElementById('jardin').innerHTML += html;
					
				}
				
		}
	});	
}

//Ouvre le pseudo au survol !
function open_pseudo(fleur_id){
	
	for(var i=1; i<=nb_flower; i++){
		document.getElementById('pseudo_'+i).style.display = "none";
	}
	
	if(document.getElementById('message_'+fleur_id).style.display == "none"){
		document.getElementById('pseudo_'+fleur_id).style.display = "block";
	}
	
}

//Ferme le pseudo à la perte du survol !
function close_pseudo(fleur_id){
	
	document.getElementById('pseudo_'+fleur_id).style.display = "none";
	
}

//Ouvre le MESSAGE au clic !
function open_message(fleur_id){
	
	for(var i=1; i<=nb_flower; i++){
		document.getElementById('pseudo_'+i).style.display = "none";
		document.getElementById('message_'+i).style.display = "none";
	}
	
	document.getElementById('pseudo_'+fleur_id).style.display = "none";
	document.getElementById('message_'+fleur_id).style.display = "block";
}

//Ferme le message au clic !
function close_message(fleur_id){
	
	document.getElementById('pseudo_'+fleur_id).style.display = "none";
	document.getElementById('message_'+fleur_id).style.display = "none";
	
}

//Initialise le tableau des IP si le mode filtrage IP est activé.
function get_ip(){

	var url = ajax_url+"?action=get_ip&answer_type=json";
	
	new Ajax.Request(url, {
		method: 'post',
		asynchronous: false,
		onSuccess: function(transport) {
			var retour=transport.responseText;
			var json=eval('(' + retour + ')');
			if(debug==true){ console.log('[GET IP], response : '+retour); }
	
				ip_tab = json.ips;
				client_ip = json.client;
				
		}
	});	
}

//Création d'une fleur.
function add_flower(){
	
	var ip_verif = 0;

	if(ip_select == true){
		if(in_array(client_ip, ip_tab) == true){
			alert('Vous avez d\351j\340 d\351pos\351 une fleur dans le jardin. Vous ne pouvez pas recommencer.');
			ip_verif = 1;
		}	
	}
	
	if(ip_verif == 0){
		
		var page = getPageSize();
		var fenetre = getWindowSize();
		var blackout = document.getElementById('blackout');
		
		if(BrowserDetect.browser == "Explorer" && BrowserDetect.version < 7){
			blackout.style.width = page.width+"px";
			blackout.style.height = page.height+"px";
		}
	
		
		new Effect.Appear(blackout, { duration: 1.0 });
		
		var div = document.getElementById('form');
		div.style.left = (fenetre.width/2)-300 + "px";
		div.style.display = 'none';
		new Effect.Appear(div, { duration: 1.5 });
	}
	
}

//Validation du formulaire, si OK draggable
function valid_form(){
	
	pseudo = document.getElementById('pseudo_in').value;
	mail = document.getElementById('mail_in').value;
	message = document.getElementById('mess_in').value;
	
	if(document.getElementById('gab_in1').checked){
		gab_flower = 1;
	}
	
	if(document.getElementById('gab_in2').checked){
		gab_flower = 2;
	}
	
	if(document.getElementById('gab_in3').checked){
		gab_flower = 3;
	}
	
	if(document.getElementById('gab_in4').checked){
		gab_flower = 4;
	}
	
	if(document.getElementById('gab_in5').checked){
		gab_flower = 5;
	}
	
	var html = "<div id='drag_fleur' class='dragger'><img src='img/jardin/gab"+gab_flower+".png' alt='' title='' /></div>";
	
	document.getElementById('zone_drag').innerHTML = html;
	
	document.getElementById('drag_info').style.display = "block";
	
	new Draggable('drag_fleur');
	Droppables.add(
		 'jardin',
		 {
			onDrop: save_flower
		 }
	  );
	
	document.getElementById('pseudo_in').value = "";
	document.getElementById('mail_in').value = "";
	document.getElementById('mess_in').value = "";
	
	var blackout = document.getElementById('blackout');
	new Effect.Fade(blackout, { duration: 1.5 });
	var div = document.getElementById('form');
	new Effect.Fade(div, { duration: 1.0 });
	
}

//Annulation d'une fleur.
function cancel_form(){
	
	document.getElementById('pseudo_in').value = "";
	document.getElementById('mail_in').value = "";
	document.getElementById('mess_in').value = "";
	
	var blackout = document.getElementById('blackout');
	new Effect.Fade(blackout, { duration: 1.5 });
	var div = document.getElementById('form');
	new Effect.Fade(div, { duration: 1.0 });
	
}

//Sauvegarde une fleur
function save_flower(draggable,droparea){
	
	//110 & 147 = DIFF ENTRE TOP ZONE_DRAG et JARDIN
	var top = 110 + parseInt(document.getElementById("drag_fleur").style.top);
	var left = parseInt(document.getElementById("drag_fleur").style.left) - 147;
	
	
	document.getElementById('drag_info').style.display = "none";
	
	var url = ajax_url+"?action=save_flower&answer_type=json";
	url += "&pseudo="+encodeURIComponent(pseudo);
	url += "&email="+encodeURIComponent(mail);
	url += "&mess="+encodeURIComponent(message);
	
	url += "&top="+top;
	url += "&left="+left;
	url += "&gab="+gab_flower;
	
	new Ajax.Request(url, {
		method: 'post',
		asynchronous: false,
		onSuccess: function(transport) {
			var retour=transport.responseText;
			var json=eval('(' + retour + ')');
			if(debug==true){ console.log('[SAVE FLOWER], response : '+retour); }
				
			if(json.response == "ok"){
				alert('La fleur a bien \351t\351 d\351pos\351e.');
				document.getElementById("drag_fleur").style.display = "none";
				init_jardin();
			}else{
				alert('une erreur est survenue. Veuillez renouveler l\'op\351ration.');
			}
		}
	});	
}

function send_friend(){
	
	var ip_verif = 0;

	if(ip_verif == 0){
		
		var page = getPageSize();
		var fenetre = getWindowSize();
		var blackout = document.getElementById('blackout');
		
		if(BrowserDetect.browser == "Explorer" && BrowserDetect.version < 7){
			blackout.style.width = page.width+"px";
			blackout.style.height = page.height+"px";
		}
	
		
		new Effect.Appear(blackout, { duration: 1.0 });
		
		var div = document.getElementById('form2');
		div.style.left = (fenetre.width/2)-300 + "px";
		div.style.display = 'none';
		new Effect.Appear(div, { duration: 1.5 });
		var div = document.getElementById('form3');
		div.style.left = (fenetre.width/2)-300 + "px";
		div.style.display = 'none';
	}
	
}//Validation du formulaire, si OK draggable
function valid_form2(){
	
	nom1 = document.getElementById('nom_in').value;
	mail1 = document.getElementById('email_in').value;
	mail2 = document.getElementById('email_out').value;
	message = document.getElementById('message_in').value;
	message = message.replace(/\n/gi,"<br>");
	
	var url = "/ajax_jardin.php"
	var postbody="action=send_friend&nom1="+encodeURIComponent(nom1)+"&mail1="+encodeURIComponent(mail1)+"&mail2="+encodeURIComponent(mail2)+"&message="+encodeURIComponent(message);
	new Ajax.Request(url, {
		method: 'post',
		postBody: postbody,
		onSuccess: function(transport) {
			var retour=transport.responseText;
			if(retour=="ok"){
				document.getElementById('nom_in').value = "";
				document.getElementById('email_in').value = "";
				document.getElementById('email_out').value = "";
				document.getElementById('message_in').innerHTML = "";
				document.getElementById('form2').style.display='none';
				
				document.getElementById('form3').style.display='block';
			}
		}
	});
	
}

//Annulation d'une fleur.
function cancel_form2(){
	
	document.getElementById('nom_in').value = "";
	document.getElementById('email_in').value = "";
	document.getElementById('email_out').value = "";
	document.getElementById('message_in').value = "";
	
	var blackout = document.getElementById('blackout');
	new Effect.Fade(blackout, { duration: 1.5 });
	var div = document.getElementById('form2');
	new Effect.Fade(div, { duration: 1.0 });
	
}

function cancel_form3(){
	
	var blackout = document.getElementById('blackout');
	new Effect.Fade(blackout, { duration: 1.5 });
	var div = document.getElementById('form3');
	new Effect.Fade(div, { duration: 1.0 });
	
}