var isNewMarker;

/*Liste de la forme 
	cat_idCat
		=>marker
		=>marker
		=>cat_idCat
			=>marker
*/			
var listMarkers = new Array();


var currentGMarkerListe = new Array();
var currentGInfoWindowsListe = new Array();

/* //Appel les differentes fonctions d'ajout */
function mod1_add ( idParent, type )
{
	this.isNewMarker = true;
	
	switch ( type )
	{
		case "categorie" :
			mod1_addCategorie( idParent, $F("mod1_nom") );
		break;
		
		case "marker" :
			mod1_addMarker( idParent, $F("mod1_nom") );
		break;
	}	
		



}

/* //Ajoute une categorie à la liste */
function mod1_addCategorie( idParent, name )
{
	ajaxSauvegarde( "categorie", name, idParent );
}

/* //Ajoute un marker à la liste */
function mod1_addMarker( idParent, name )
{
	ajaxSauvegarde( "marker", name, idParent );
}


/* //On ajoute un champs texte qui va nous permettre de rentrer le nom de la categorie ou du marker */
function ajouterChampsTexte( idParent, type  )
{
	$( idParent ).innerHTML += "<div id=\"mod1_insertName\"><input id=\"mod1_nom\" type=\"text\" value=\"\"/>	<input id=\"mod1_valider\" type=\"button\" value=\"Ok\" onClick=\"mod1_add('"+idParent+"', '"+type+"');\"/></div>";
}

/* //Supprime un element par rapport à son element parent */
function removeChild ( parent, child )
{
	var obj = document.getElementById(parent);
	var old = document.getElementById(child);
	obj.removeChild(old);
}



/* Fonction ajax sauvegarde */

function ajaxSauvegarde( t, n, id )
{

	var url ='../../generatorSource/modules/mod1_categories&markers/include/ajax/ajax_sauvegarder.php';
	var ajax;
	switch ( t )
	{
		case "categorie" :
			ajax = new Ajax.Request(
				url,
				{
					method:'post',
					parameters: { type:t, name:n, idParent:id },
					onComplete:ajaxSauvegardeCatCallback
				});
		break;
		
		case "marker" :
			ajax = new Ajax.Request(
				url,
				{
					method:'post',
					parameters: { type:t, name:n, idParent:id, lat: map.getCenter().lat(), lng:map.getCenter().lng() },
					onComplete:ajaxSauvegardeMarkCallback
				});
		break;
		
	}	
}	


/* //Callback de l'ajout de categorie qui renvoie l'id de la categorie que l'on vient de creer */
function ajaxSauvegardeCatCallback ( request )
{

	var tab = request.responseText.split("|§|");
	var id = tab[0];
	var name = tab[1];
	var idParent = tab[2];
	
	placerCategorieArborescence ( idParent, id, name );						
	
	
	
	removeChild ( idParent, "mod1_insertName" );										
	Sortable.create ('mod1_arborescence', {tree:true, scroll:window,  onChange:modifierEmplacement}); 									


}

/* //Callback de l'ajout de marker qui renvoie l'id du marker que l'on vient de creer */
function ajaxSauvegardeMarkCallback ( request )
{
	var tab = request.responseText.split("|§|");
	var id = tab[0];
	var name = tab[1];
	var idParent = tab[2];
			
	
	placerMarkerArborescence ( idParent, id, name );
	placerMarkerMap ( id, name , idParent);
	
	removeChild ( idParent, "mod1_insertName" );										
	Sortable.create('mod1_arborescence', {tree:true, scroll:window, onChange:modifierEmplacement}); 
}



/* Fonction qui permette d'afficher les categories et les markers */
function placerCategorieArborescence ( idParent, id, name )
{
	 $( idParent ).innerHTML += "<li class=\"mod1_ul\" id=\"mod1_"+id+"\" name=\"mod1_"+id+"\">\
									<ul class=\"mod1_ul\" id=\"mod1_Cat_"+id+"\" name=\"mod1_Cat_"+id+"\" >"+name+"\
										 <div id=\"mod1_content_"+id+"\" name=\"mod1_content_"+id+"\"></div>\
										<div  class=\"mod1_ajoutDiv\">\
											<input type=\"button\" value=\"Ajouter categorie\" id=\"mod1_addCat\" onClick=\"ajouterChampsTexte( 'mod1_content_"+id+"', 'categorie'  )\" ></input>\
											<input type=\"button\" value=\"Ajouter un marker\" id=\"mod1_addMarker\" onClick=\"ajouterChampsTexte( 'mod1_content_"+id+"', 'marker'  )\" ></input>\
										</div></ul></li>";
										
	addCategorieToList( idParent, id );									
										

}
	
function placerMarkerArborescence ( idParent, id, name )
{
	 $( idParent ).innerHTML += " <li class=\"mod1_li\" id=\"mod1_"+id+"\" name=\"mod1_"+id+"\" >"+name+"</li>";
	 
	 if ( isNewMarker )
		this.isNewMarker = false;
	else
		ajaxChargerMarker ( id );
	 
}	




/*************************************************** MODIFICATION ******************************************************************/

function modifierEmplacement ()
{
	/* // document.getElementById("test").innerHTML  = "OK "+Sortable.serialize('mod1_arborescence'); */

}

/*************************************************** OPERATION SUR LA MAP ******************************************************************/
function placer ( id, name, lat, lng, desc, isPreview, typeMarker, urlIcon )
{var graphInfoWindows = false;
	
	if ( isPreview )
	{
		/* //Pour les graphes */
		graphInfoWindows = true;
		if ( graphInfoWindows )
		{
				ajaxConstruireGraph(  id );
		}		
	
	
		
		var infoWindowHTML = name;
		var drag=false;
	}
	else
	{
		var infoWindowHTML = name+"<BR />\
							<label for=\"descriptionMarker"+id+"\">Description</label><BR />\
							<textarea id=\"descriptionMarker"+id+"\">"+desc+"</textarea><BR />\
							<input type=\"hidden\" value=\""+lat+"\" id=\"latitude"+id+"\" />\
							<input type=\"hidden\" value=\""+lng+"\" id=\"longitude"+id+"\" />\
							<input type=\"button\" value=\"Save\" onClick=\"ajaxSaveMarker('"+id+"');\"></input>";
		var drag=true;		
	
	}
	 

	var latlng = new GLatLng (lat, lng);
	
	
	var marker;
	 switch ( typeMarker )
	 {
		case  "flatIcon" :
			var maxSize = 50;
			var maxCount = 0;
			var multiplier = maxSize/(maxCount+20);
			var size = Math.round((10+20) * multiplier);

			var color = "#F8A420";
			var colorSelected = "#DC5400";
			marker = createFlatIcon ( latlng, name, infoWindowHTML, size, name, color, colorSelected);
		break;
		
		
		case  "markerIcon" :
		
				var icon = new GIcon(G_DEFAULT_ICON);
				icon.image = urlIcon;
				icon.shadow = "";
				icon.iconSize  = new GSize(20, 20);
					
				marker = new GMarker(latlng, {icon: icon, title: name});

		break;
		
		default :
			marker= new GMarker(latlng, { title: name, draggable:drag});
		break;
	}	

	
	

		
	if ( isPreview )
	{
			if ( !graphInfoWindows )
			{
				 this.currentGEvent = GEvent.addListener(marker, "click", function() 
				{
					marker.openInfoWindow(infoWindowHTML);
				}, 100);
			}	
	}
	else
	{
		 this.currentGEvent = GEvent.addListener(marker, "click", function() 
		{
			marker.openInfoWindowTabsHtml
			(
			[
				new GInfoWindowTab("Create",infoWindowHTML),
				new GInfoWindowTab("Preview","")
			]
			);
		}, 100);
	}	


	 GEvent.addListener(marker, "dragend", function() 
	 {
		var l = marker.getLatLng();

		$("latitude"+id).value = l.lat();
		$("longitude"+id).value = l.lng();

     });
	

	this.currentGMarkerListe[id] = marker;
	this.currentGInfoWindowsListe[id] = infoWindowHTML;
	
	
	this.map.addOverlay( marker );	
	
	return marker;
}

function placerMarkerMap ( id, name, idParent, typeMarker )
{
	/* //On ajoute un marker au centre de la map */
	
	var lat = map.getCenter().lat();
	var lng = map.getCenter().lng();		
	
		
	var marker = placer ( id, name, lat, lng, "", false, typeMarker );

	this.map.setCenter(new GLatLng(lat, lng), 4);
	
	/* // marker.openInfoWindowTabsHtml
	// (
	// [
		// new GInfoWindowTab("Create",infoWindowHTML),
		// new GInfoWindowTab("Preview","")
	// ]
	// ); */
	





}

/* //Procedure qui va enregistrer les infos concernant le marker : description... */
function ajaxSaveMarker( i )
{
	var url ='../modules/mod1_categories&markers/include/ajax/ajax_sauvegarderMarker.php';
	
	var ajax = new Ajax.Request(
	url,
	{
		method:'post',
		parameters: { id:i, description:$F("descriptionMarker"+i), lat:$F("latitude"+i), lng:$F("longitude"+i) },
		onComplete:ajaxSaveMarkerCallback
	});

}

function ajaxSaveMarkerCallback( request )
{
/* 	// document.getElementById("test").innerHTML = request.responseText; */
}



/*************************************************** CHARGEMENT MARKER ******************************************************************/

function ajaxChargerMarker ( i )
{

	var url ='../modules/mod1_categories&markers/include/ajax/ajax_chargerMarker.php';
	
	var ajax = new Ajax.Request(
	url,
	{
		method:'post',
		parameters: { id:i },
		evalScripts: true, 
		onComplete:ajaxChargerMarkerCallback
	});

}

function ajaxChargerMarkerCallback ( request )
{
	var tab = request.responseText.split("|§|");
	var id = tab[0];
	var titre = tab[1];
	var description = tab[2];
	var latitude = tab[3];
	var longitude = tab[4];
	var idParent = tab[5];
	var typeMarker = tab[6];

	var marker = placer ( id, titre, latitude, longitude, description, false, typeMarker );
	addMarkerToList( "mod1_content_"+idParent, marker );

}




/*************************************************** Creation d'une arborescence de liste de markers et de categories ******************************************************************/

function addMarkerToList( idP, marker )
{	

	
		var idTab = idP.split ("mod1_content_");
		var idParent = idTab[1];

		var expression = new RegExp("^cat_[0-9]*$");
	
		for ( var e in this.listMarkers )
		{
			if ( expression.test(e))
			{	
				if ( e == "cat_"+idParent )
				{		
					this.listMarkers[e][this.listMarkers[e].length] = marker;
					return;
				}
			}
		}
		
		
/* 		//A CHANGER !!!!!
		//Si le marker est dans une sous categories */
		for ( var e in this.listMarkers )
		{
			if ( expression.test(e))
			{	
				for ( var se in this.listMarkers[e])
				{
					if ( expression.test(se))
					{	
						if ( se == "cat_"+idParent )
						{		
							this.listMarkers[e][se][this.listMarkers[e][se].length] = marker;
							return;
						}
					}	
				}	
			}
		}
	
}

function addCategorieToList( idP, id )
{
	
	if ( idP == "mod1_content" )
	{	
		this.listMarkers["cat_"+id] = new Array();
	}
	else
	{
		var idTab = idP.split ("mod1_content_");
		var idParent= idTab[1];
		var expression = new RegExp("^cat_[0-9]*$");
		
		for ( var e in this.listMarkers )
		{

			if ( expression.test(e))
			{	
				if ( e == "cat_"+idParent )
				{			
					this.listMarkers[e]["cat_"+id] = new Array();
					return;
				}
			}
		}
	}	
			
}




function test ()
{
/* 	// var expression = new RegExp("^cat_[0-9]*$");
	// for ( var e in this.listMarkers )
	// {
		// if ( expression.test(e))
		// {	
			// for ( var i in this.listMarkers["cat_1"]["cat_6"] )
			// {	document.getElementById("test").innerHTML += i+" ";
				// try
				// {		
					// this.listMarkers["cat_1"]["cat_6"][i].hide();
				// }
				// catch (err){}
			// }
		// }
	// } */

}

















