/* -------------------------------------------------------------- */
// données de la carte de France
var map_data   = new Array();

// données de la région
var popup_data = new Array();

// sélection en cours -> voir filtre_selection
var selected_data = new Array();

// sélection à afficher
var selection_key = new Array();

// document xml
var xmldoc;

// cookie de sélection
var cookie_prefix = "projet_mioterr_";


/* -------------------------------------------------------------- */
// chargement des données xml
var load_xmldoc = function(xmlfile) {
	if (xmldoc = xmlobj())
		xmldoc.load(xmlfile);
	else
		alert("Erreur de chargement des données XML");
};

// action à la fin du chargement des données -> voir xmlobj.js
var xmlobj_onload = function() {
	// gestion des cookies
	var cookies = "";
	var cookie = getcookie();
	for (c in cookie) {
		if (c.toString().indexOf(cookie_prefix, 0) == 0) {
			if (cookie[c] == checkbox_selected)
				cookies += "'" + c + "'";
		}
	}

	// mise à jour de la sélection en fonction des cookies
	var projet = xmldoc.getElementsByTagName("projet");
    for (i = 0; i < projet.length; i++) {
		/*
			la sélection xml est prioritaire à la sélection cookie
		*/
		var key		 = projet[i].attributes.getNamedItem("key");
		var selected = projet[i].attributes.getNamedItem("selected");

		selected.value = (selected.value != checkbox_selected 
		?
			(cookies.indexOf("'" + cookie_prefix + key.value + "'", 0) >= 0 
			? checkbox_selected 
			: checkbox_unselected)
		
		: selected.value
		);
    }
    
	// création des points de la carte de france
	append_map_point();
};

/* -------------------------------------------------------------- */
/*
	mise à jour de la sélection dans le document xml
*/
var update_xmldoc_selection = function(key_value, selected_value) {
	var projet = xmldoc.getElementsByTagName("projet");
    for (i = 0; i < projet.length; i++) {

		var key		 = projet[i].attributes.getNamedItem("key");
		var selected = projet[i].attributes.getNamedItem("selected");

        if (key.value == key_value) {
			// mise à jour du noeud xml
			selected.value = selected_value;
			// mise à jour cookie
			setcookie(cookie_prefix + key_value, selected_value, (1000 * 60 * 60 * 24 * 365));
			// sortie
			break;       		
        }
    }
};

/* -------------------------------------------------------------- */
/*
		CARTE DE FRANCE : un point = une région
*/
var map_obj_class = function() {
	return {
		  map_container		: getById("map_container")
		, popup_container	: getById("popup_container")
	};
}
var map_obj;
var map_obj_init = function() {
	if (!map_obj) map_obj = new map_obj_class();
}

var append_map_point = function() {
	map_obj_init();
	var point = xmldoc.getElementsByTagName("point");

	var div, input;
	for (i = 0; i < point.length; i++) {

		div = append(map_obj.map_container, "div");
		div.className ="common_button pointer" + (point[i].attributes.getNamedItem("programme").value  != "" ? " btMain_map_encours" : " btMain_map");
		
		/*
		voir :
			- index.php->map_container.style.zIndex
			- popup.inc.php->popup_container.style.zIndex
		*/
		div.style.zIndex = map_obj.map_container.style.zIndex; 

		// index du point -> voir prototype.js
		div.cvalue = point[i].attributes.getNamedItem("id").value;
		
		// positionnement
		div.style.left	= px(point[i].attributes.getNamedItem("left").value);
		div.style.top	= px(point[i].attributes.getNamedItem("top").value);

		div.onclick = function() {

			/* position du popup -> gestion [prototype ie] si utilisation map_obj.map_container.position()
			*/
			/*
			proto_ie(map_obj.map_container);
			var container_position = map_obj.map_container.position();
			var position = this.position();
			position.left += container_position.left;
			position.top  -= container_position.top;
			*/
			
			/* gestion position css : absolute (hors flux)
			*/
			var position = {left:0, top:0};
			// position horizontale flottante
			position.left = Number(this.style.left.split("px")[0]);
			// position verticale flottante
			position.top = Number(this.style.top.split("px")[0]);

			// décalage
			position.left += 4;
			position.top  -= 10;
	
			map_obj.popup_container.style.left = px(position.left);
			map_obj.popup_container.style.top  = px(position.top);

			// affichage du popup avec les données de la région
			if (this.blur) this.blur();

			// index du point -> voir prototype.js
			select_map_data(this.cvalue);
		};
	}
};

/* -------------------------------------------------------------- */
// mise à jour et affichage du popup avec les données de la région
var select_map_data = function(selected) {
	var region = xmldoc.getElementsByTagName("region");

	// animation conteneur
	var popup_container = getById("popup_container");
	if (popup_container.style.opacity >= 0.6)
		setOpacity(popup_container, 0.6);
	else 
		setOpacity(popup_container, 0);
	
    // création de la carte région et du tableau de sélection
	load_popup_data(region[selected]);
	// affichage du premier enregistrement de la région par défaut
	show_popup_record(0);

	// si le popup n'est pas ouvert
	if (popup_container.style.opacity == 0)
		// ouverture ou redimensionnement du panneau de droite
		open_popup_right_slide(popup_slide_min_width, popup_slide_small_width, popup_slide_for_detail);

	// affichage du conteneur
	open_popup_container(map_data_when_opened);
};

var map_data_when_opened = function () {
	/*
		à faire à la fin de l'affichage du conteneur ci-dessus
	*/


}

/* -------------------------------------------------------------- */
/*
	enregistrement popup (voir tableau de sélection et fiche détail)
*/
var popup_record = function(
	  key
	, titre
	, photo
	, soustitre
	, texte
	
	, selected
	, checkbox
	
	, point
	, left_pos
	, top_pos
	
	, programme
) 
{
	this.key		= key;
	this.titre		= titre;
	this.photo		= photo;
	this.soustitre	= soustitre;
	this.texte		= texte;
	
	this.selected	= selected; // sélection de l'enregistrement
	this.checkbox	= checkbox; // case à cocher de l'enregistrement dans le tableau

	this.point		= point;	// point de l'enregistrement sur la carte
	this.left_pos	= left_pos;
	this.top_pos	= top_pos;

	this.programme	= programme;
};

var new_popup_record = function(rec) {
	return new popup_record(
		  rec[4]
		, rec[0]
		, rec[1]
		, rec[2]
		, rec[3]
		
		, rec[5]
		, null		// voir append_popup_selection()
		
		, null		// voir append_popup_selection()
		, rec[6]
		, rec[7]
		, rec[8]
	);
};

var load_popup_data = function(region) {
	// projet de la région
	var projet = region.getElementsByTagName("projet");

	// réinitialisation du tableau
	popup_data = new Array();

	// lecture des données xml
    for (var i = 0; i < projet.length; i++) {
    
		// tableau des valeurs des noeuds enfants -> voir load_selected_data()
		var rec = xmlnodeChildrenValue(projet[i].childNodes);
		// ajout attibuts
		with (projet[i].attributes) {
			rec[rec.length] = getNamedItem("key").value;
			rec[rec.length] = getNamedItem("selected").value;
			rec[rec.length] = getNamedItem("left").value;
			rec[rec.length] = getNamedItem("top").value;
			rec[rec.length] = getNamedItem("programme").value;
		}
		
		// création des données
		popup_data[i] = new_popup_record(rec);
    }
    
    // création du tableau de sélection et des points sur la carte
    // popup_obj : voir popup.js->popup_obj_class()
    popup_obj_init();
	append_popup_selection(region, popup_obj.selection, popup_obj.map);

	// gestion des checkbox
	set_button_checkbox();
};

/*
	sélection sauvegardée -> voir append_popup_selection()
	complément des projets de la région sélectionnée 
	avec les projets sélectionnés dans les autres régions

	filtre_selection = true  -> tous les projets de toutes les régions
	filtre_selection = false -> seulement les projets sélectionnés
*/
var filtre_selection = false;
var load_selected_data = function() {
	var select_it = false;
	
	var projet = xmldoc.getElementsByTagName("projet");
	selected_data = new Array();

    for (i = 0; i < projet.length; i++) {

		var select_it = (projet[i].attributes.getNamedItem("selected").value == checkbox_selected);
			select_it = (!filtre_selection || (filtre_selection && select_it));
		if (select_it) {

			// tableau des valeurs des noeuds enfants -> voir load_selected_data()
			var rec = xmlnodeChildrenValue(projet[i].childNodes);
			// ajout attibuts
			with (projet[i].attributes) {
				rec[rec.length] = getNamedItem("key").value;
				rec[rec.length] = getNamedItem("selected").value;
				rec[rec.length] = getNamedItem("left").value;
				rec[rec.length] = getNamedItem("top").value;
				rec[rec.length] = getNamedItem("programme").value;
			}

			selected_data[selected_data.length] = new_popup_record(rec);
        }
	}
	// nombre d'enregistrement
	return selected_data.length;
};

/*
	mise à jour de la carte région et création des points de la carte
	création du tableau de sélection : enregistrement + case à cocher
*/
var append_popup_selection = function(region, table, map) {
	var tbody, tr, td, button, div;

	/* ------------------------------------------ */
	// RAZ de la carte région
	while (map.hasChildNodes()) {
		map.removeChild(map.childNodes[0]);
	}
	// nom de la région
	getById("titre_region").innerHTML = region.attributes.getNamedItem("titre").value;

	// création de la photo de la région
	img = append(map, "img");
	setOpacity(img, 1);
	img.src = region.attributes.getNamedItem("photo").value;

	/* ------------------------------------------ */
	// RAZ du tableau
	while (table.hasChildNodes()) {
		table.removeChild(table.childNodes[0]);
	}
	// création du tableau
	tbody = append(table, "tbody");

	// la sélection de la région pour ne pas la répéter dans le complément
	var popup_selected = new Array();
	
	for (var i = 0; i < popup_data.length; i++) {
		// nouvelle ligne
		tr = append(tbody, "tr");

		// titre
		td = append(tr, "td");
		td.className = "checkbox popup_slide_selection_title font8 fontW";
		td.innerHTML = (popup_data[i].titre == "" ? "&nbsp;" : popup_data[i].titre);

		// sous titre
		td = append(tr, "td");
		td.className = "checkbox popup_slide_selection_descr font8 fontW";
		td.innerHTML = (popup_data[i].soustitre == "" ? "&nbsp;" : popup_data[i].soustitre);
	
		// case à cocher
		td = append(tr, "td");
		td.className = "popup_slide_selection_check font8 fontW";
		
		// bouton de sélection
		button = append(td, "button", "button");
		popup_data[i].button = button;
		// valeur et GUI
		button.cvalue = popup_data[i].selected;
		button.className = (button.cvalue == checkbox_selected ? checkbox_on : checkbox_off);
		/*
			mise à jour de l'enregistrement sur onclick du checkbox (checkbox.js)
			mise à jour du point sur la carte
			voir index.html->btPopupDetailSelect.onchange()
		*/
		button.onchange = function() {
			// on cherche le bouton parmi les boutons des enregistrements
			for (var i = 0; i < popup_data.length; i++) {
				if (this == popup_data[i].button) {
					
					// mise à jour de son enregistrement
					popup_data[i].selected = this.cvalue;
					
					// mise à jour du point sur la carte
					popup_data[i].point.className = (
							popup_data[i].selected == checkbox_selected 
						? "common_button pointer btPopup_map_selected" 
						: "common_button pointer" + (popup_data[i].programme != "" ? " btPopup_map_encours" : " btPopup_map")
					);
					
					// mise à jour document xml
					update_xmldoc_selection(popup_data[i].key, this.cvalue);
					
					break;
				}

			}
		};
		
		// la sélection de la région pour ne pas la répéter dans le complément
		if ((!filtre_selection) || (filtre_selection && (popup_data[i].selected == checkbox_selected))) {
			popup_selected[popup_selected.length] = popup_data[i].key;
		}

		/* point sur la carte région */
		div = append(map, "div");
		popup_data[i].point = div;

		div.className = (popup_data[i].selected == checkbox_selected 
			? "common_button pointer btPopup_map_selected" 
			: "common_button pointer" + (popup_data[i].programme != "" ? " btPopup_map_encours" : " btPopup_map"));
		div.style.left = px(popup_data[i].left_pos);
		div.style.top  = px(popup_data[i].top_pos);

		// index du point -> voir prototype.js
		div.cvalue = i;

		div.onclick = function() {
			if (this.blur) this.blur();
			show_popup_record(this.cvalue);
			open_popup_right_slide(popup_slide_min_width, popup_slide_small_width, popup_slide_for_detail);
		};

	}

	/*
	complément des projets de la région sélectionnée 
	avec les projets sélectionnés dans les autres régions
	*/
	if (load_selected_data() > 0) {
	
		// sélection de la région à ne pas répéter
		popup_selected = "'" + popup_selected.join("'") + "'";

		for (var i = 0; i < selected_data.length; i++) {
			// enregistrement de la région à ne pas répeter
			var reg = new RegExp("'" + selected_data[i].key + "'");
			
			if (!reg.test(popup_selected)) {
				// nouvelle ligne
				tr = append(tbody, "tr");

				// titre
				td = append(tr, "td");
				td.className = "checkbox popup_slide_selection_title font8 fontW";
				td.innerHTML = (selected_data[i].titre == "" ? "&nbsp;" : selected_data[i].titre);

				// sous titre
				td = append(tr, "td");
				td.className = "checkbox popup_slide_selection_descr font8 fontW";
				td.innerHTML = (selected_data[i].soustitre == "" ? "&nbsp;" : selected_data[i].soustitre);
		
				// case à cocher
				td = append(tr, "td");
				td.className = "popup_slide_selection_check font8 fontW";
		
				// bouton de sélection
				button = append(td, "button", "button");
				selected_data[i].button = button;
				// valeur et GUI
				button.cvalue = selected_data[i].selected;
				button.className = (button.cvalue == checkbox_selected ? checkbox_on : checkbox_off);
				/*
					mise à jour de l'enregistrement sur onclick du checkbox (checkbox.js)
				*/
				button.onchange = function() {
					// on cherche le bouton parmi les boutons des enregistrements
					for (var i = 0; i < selected_data.length; i++) {
						if (this == selected_data[i].button) {
							
							// mise à jour de son enregistrement
							selected_data[i].selected = this.cvalue;
							
							// mise à jour document xml
							update_xmldoc_selection(selected_data[i].key, this.cvalue);

							break;
						}
					}
				};

			}
		}
	}
};

/* -------------------------------------------------------------- */
/*	
	chargement de la fiche détail de l'enregistrement
*/
var show_popup_record = function(id) {
	// voir popup.inc.php->btPopupDetailSelect.onchange()
	getById("popup_id").value = id;
	
	// bouton de sélection
	var checkbox = getById("btPopupDetailSelect");
	button_checkbox_selected(checkbox, popup_data[id].selected);
	
	getById("popup_key").value				= popup_data[id].key;
	getById("titre_detail").innerHTML		= popup_data[id].titre;
	getById("photo_detail").src				= popup_data[id].photo;
	getById("soustitre_detail").innerHTML	= popup_data[id].soustitre;
	getById("texte_detail").innerHTML		= popup_data[id].texte;
	
	/*
	try {
		//getById("btPopupDetailSelect").style.visibility = "hidden";
		//getById("LABEL_btPopupDetailSelect").style.visibility = "hidden";
		setTimeout(function(){
			var offset = (getById("soustitre_detail").clientHeight > 25 ? -15 : 0);
			if (getById("titre_detail").clientHeight > 25)
				offset += 67;
			else
				offset += 80;
			getById("texte_detail").style.height = px(offset);

			//getById("btPopupDetailSelect").style.visibility = "visible";
			//getById("LABEL_btPopupDetailSelect").style.visibility = "visible";
		}
		, 100);
	}
	catch(e) {}
	*/
	
	if (!getById("btPopupDetailSelect").onchange)
		getById("btPopupDetailSelect").onchange = spread_popup_selected;
}

var spread_popup_selected = function() {
	/*	mise à jour de l'enregistrement sur onclick du checkbox (voir checkbox.js)
		voir :
		- show_popup_record()		: mise à jour getById("popup_id").value
		- append_popup_selection()	: création popup_data[id].button
	*/
	var id = getById("popup_id").value;
	
	// mise à jour de son enregistrement -> voir prototype.js
	popup_data[id].selected = this.cvalue;

	// mise à jour du point sur la carte
	popup_data[id].point.className = (popup_data[id].selected == checkbox_selected 
		? "common_button pointer btPopup_map_selected" 
		: "common_button pointer" + (popup_data[id].programme != "" ? " btPopup_map_encours" : " btPopup_map")
	);
	// mise à jour document xml
	update_xmldoc_selection(popup_data[id].key, popup_data[id].selected);

	// mise à jour du bouton du tableau de sélection
	button_checkbox_selected(popup_data[id].button, popup_data[id].selected);
};

/* -------------------------------------------------------------- */
/*	
	affichage de la sélection
*/
var show_popup_selection = function() {
	var projet = xmldoc.getElementsByTagName("projet");
	selection_key = new Array();

    for (i = 0; i < projet.length; i++) {

		var key		 = projet[i].attributes.getNamedItem("key");
		var selected = projet[i].attributes.getNamedItem("selected");

        if (selected.value == checkbox_selected) {
			selection_key[selection_key.length] = key.value;
        }
    }
	if (selection_key.length > 0) {
	
		window.location.href = "?page=promotion&selection=" + selection_key.join(",");
		
		/*
		close_popup_right_slide(popup_slide_min_width, popup_slide_larg_width, when_closed = null);
		close_popup_container(when_closed = show_selection_key);
		*/
	}
	else {alert("Veuillez sélectioner au moins un projet")}
};

var show_selection_key = function(){
	//alert("Sélection = " + selection_key.join(","));
};
