var oMapManager;

var initCalendar = function(oEventsManager)
{
	//calendar
	if ( typeof Calendar != 'undefined' )
	{
		var oCalendar = new Calendar(
			{
				calendarEveDuInput: 'd/m/Y',
				calendarEveAuInput: 'd/m/Y',
				offset : 1
			},
			{
				pad : 0,
				direction:1
			}
		);
	}
	
	if( $$('.reinit_date') )
	{
		var oLink = $$('.reinit_date');

		oLink.addEvent( 'click', function(e){
			oCalendar.calendars.each( function( elem, index ){
				elem.el.value = '';
			});
		});
	}
	
	oEventsManager.fireEvent('nextStep');
}

function setCheckboxDisplay(el)
{
	var objWrap;
	objWrap = document.getElementById(el.id+"Wrap");
	if(el) {
	    if(el.checked) objWrap.className = "styledCheckboxWrap wrapChecked";
	    else  objWrap.className = "styledCheckboxWrap";
	}
}

var slideCriteria = function(oEventsManager)
{
	if ($('more_filters') && $('more_filters_link'))
	{
		height = $('more_filters').getSize();

		$('more_filters').setStyle('height', 0);

		more_height = height.y;

		$('more_filters_link').addEvent('click', function(){
			if ($('more_filters').getSize().y == 0)
			{
				$('more_filters').tween('height', more_height);
				$('more_filters_link').set("html",$("less").value);
				$('arrow').set("class","arrow_up fl");
			}
			else
			{
				$('more_filters').tween('height', 0);
				$('more_filters_link').set("html",$("others").value);
				$('arrow').set("class","arrow fl");
			}
		});
	}
	oEventsManager.fireEvent('nextStep');
}

var changeDrillDownMode = function( oEventsManager )
{
	var aBtnMode = $$('.change_mode_btn');
	aBtnMode.each(function(oBtnMode)
	{
		oBtnMode.addEvent('click', function(e)
		{
			e.stopPropagation();

			var iMode = this.get('rel'); // 0 = To Default Mode - 1 = To Carto Mode
			var oUrl = new URI(window.location);
			oUrl.setData('mode_map', iMode);
			oUrl.go();
		});
	});

	oEventsManager.fireEvent('nextStep');
}

var addMapEvent = function( oEventsManager )
{
	var sIdContainer = 'gmap';

	// init GPS center of map
	var oGPSCenter = new Hash ({
		iLatitude:  43.945372,
		iLongitude: 4.805832
	});

	var iZoom = 9;

	if( $(sIdContainer) )
	{
		oMapManager = new MapManager( sIdContainer, {
			oGPSCenter: oGPSCenter,
			iZoomValue: iZoom,
			iMapTypeID: google.maps.MapTypeId.TERRAIN
		});
		oMapManager.initMap();
	
		oMapManager.addEvent( 'mapLoaded', function mapLoaded()
		{
			this.removeEvent( 'mapLoaded', mapLoaded );
			oEventsManager.fireEvent('nextStep');
		});
		
	} else
		oEventsManager.fireEvent('nextStep');
}

var addMarkersEvent = function( oEventsManager )
{
	if( !oMapMarkerOverlay )
		var oMapMarkerOverlay = null;
	
	/** Click action on marker to open window info **/	
	var OpenOverlayWindow = function( sIdOBT, oMarker )
	{
		var oRequest = new Request({
			url: '../content/inc/infoWindowGmap.inc.php',
			method: 'post',
			onRequest: function(){
				CloseOverlayWindow.run();
			},
			onComplete: function( sReturn ){

				if( oMapMarkerOverlay == null )
					oMapMarkerOverlay = new MapMarkerOverlay();

				oMapMarkerOverlay.setMap( oMapManager.getMap() );
				
				if( sReturn != '' )
					oMapMarkerOverlay.setContent( sReturn );
				
				if( oMarker != null )
					oMapMarkerOverlay.setPositionFromMarker( oMarker );
				
			 	google.maps.event.addListener( oMapMarkerOverlay, 'overlayLoaded', function() {
			 		// center map on window
			 		oMapManager.getMap().setCenter( oMarker.position );
			 		
			 		// add event close on button
			 		if( $('close_window') )
			 		{
				 		$('close_window').addEvent( 'click', function(){
							CloseOverlayWindow.run();
						});
			 		}
			 	});

			}
		}).send('CleOBT='+sIdOBT+'&id_version='+iIdVersion);
	}
	
	/** Click action on marker to close window info **/	
	var CloseOverlayWindow = function()
	{
		if( oMapMarkerOverlay != null )
		{
			oMapMarkerOverlay.setMap( null );
			oMapMarkerOverlay.setContent('');
		}
	}

	try
	{
		/*######## BUILD MARKER COLLECTION ########*/
		//Initialize MarkerCollection object
		var oMarkerCollection = new MapMarkerCollection({startIndex:0});
		
		/*######## BUILD ALL MARKERS AND PUSH INSIDE COLLECTION ########*/
		aData.id.each( function( elem, index ){
			
			if( elem != '' && elem != undefined )
			{
				//Build a valid marker object
				var iGPSLongitude = null;
				if( $type(aData.GPSLongitude[index]) == 'string' && aData.GPSLongitude[index] != '' )
					iGPSLongitude = aData.GPSLongitude[index].replace(',', '.').toFloat();
				
				var iGPSLatitude = null;
				if( $type(aData.GPSLatitude[index]) == 'string' && aData.GPSLatitude[index] != '' )
					iGPSLatitude = aData.GPSLatitude[index].replace(',', '.').toFloat();
				
				var sCommune = null;
				if( $type(aData.Commune[index]) == 'string' && aData.Commune[index] != '' )
					sCommune = aData.Commune[index];
												
				if( (iGPSLongitude != null && iGPSLatitude != null) || sCommune != null )
				{
					/*** instance new MapMarker ***/
					var oCurrentMarker = new MapMarker(
						{
							sAddress : sCommune,
							oGPSCoord : {
								iLatitude: iGPSLatitude,
								iLongitude: iGPSLongitude
							},
							oIcon :
							{
								sIconPath : './img/global/marker.gif'
							}
						}
					);
					
					/*** Add click event on marker when it is appended ***/
					if( elem != '' && elem != undefined )
					{
						oCurrentMarker.addEvent( 'MarkerAppended', function(){
							
							var oGmapMarker = this.getGMarker();
							
							this.oMarkerEvents.click = google.maps.event.addListener(
								oGmapMarker,
								'click',
								function( e )
								{
									OpenOverlayWindow.run( [elem, oGmapMarker] );
								}
							);						
						});
					}				
														
					oMarkerCollection.pushMarkerWithoutFilter(oCurrentMarker);
				}
			}
		});
		/*######## END BUILD ALL MARKERS AND PUSH INSIDE COLLECTION ########*/

		/*######## SHOW MARKERS AND INITIALIZE ENVENT ON EACH ########*/
		oMarkerCollection.addEvent(
			'AllMarkerAppended',
			function()
			{
				oMapManager.setCenterWidthBounds();

				oEventsManager.fireEvent('nextStep');
			}
		);

		oMarkerCollection.showMarkers( oMapManager );
		/*######## END SHOW MARKERS AND INITIALIZE ENVENT ON EACH ########*/
		
	} catch(e) {
		oEventsManager.fireEvent('nextStep');
	}
}

var validCriteriaFieldForm = function( oEventsManager )
{
	if( $$('.criteria form.form_checkbox') )
	{
		$$('.criteria form.form_checkbox').each( function( elem, index ){
			
			var sIdForm = elem.get('id');
			var aIdField = sIdForm.split('_');
			if( aIdField.length == 3 )
				var iIdField = aIdField[2];
			
			elem.addEvent( 'submit', function(e){
				e.stop();
				
				var oUrl = new URI(window.location);
				var sDirectory = oUrl.get('directory');
				var aDirectories = sDirectory.split('/');
				
				if( aDirectories.length > 2 )
				{
					var iPosSearchQuery = aDirectories.length - 2;
					var sSearchQuery = aDirectories[iPosSearchQuery];
					var aSearchQuery = sSearchQuery.split('~');
					
					if( aSearchQuery.length > 1 )
					{
						var aCheckbox = this.getElements('span.wrapChecked>input.styledCheckbox');
						if( aCheckbox.length > 0 )
						{
							
							aCheckbox.each( function( elem, index ){
								if( index == 0)
									aSearchQuery[iIdField] = elem.value;
								else
									aSearchQuery[iIdField] += '¤' + elem.value;
							});
							
						} else {
							aSearchQuery[iIdField] = '';							
						}
						
						sSearchQuery = aSearchQuery.join('~');
						aDirectories[iPosSearchQuery] = sSearchQuery;
						sDirectories = aDirectories.join('/');
						
						oUrl.set( 'directory', sDirectories );
					}

					oUrl.go();
				}		
			});		
		});
	}
	
	oEventsManager.fireEvent('nextStep');
}

var initFreeFieldFork = function( oEventsManager )
{
	if ( $('valid_date_search') )
	{
		$('valid_date_search').addEvent('click', function(e){

			e.stop();
			if ( $('idFieldFork') )
			{
				var idField = $('idFieldFork').get('value');
				submitRequestFork(idField);
			}
		});
	}
	
	oEventsManager.fireEvent('nextStep');
}

function submitRequestFork(idField)
{
	var model = '([0-9]{1,2})\/([0-9]{1,2})\/([0-9]{4})';
	var regExp = new RegExp(model);

	var startValue = $('calendarEveDuInput').get('value');
	if( startValue.test(regExp) )
		startValue = startValue.replace(regExp, '$3-$2-$1');
	else
		startValue = 'empty';

	var endValue = $('calendarEveAuInput').get('value');
	if( endValue.test(regExp) )
		endValue = endValue.replace(regExp, '$3-$2-$1');
	else
		endValue = 'empty';

	model = '(.*\/)(.*)(\/offres\-[0-9]{1,2}\-[0-9]{1}\.html)(.*$)';

	regExp = new RegExp(model);
	var chaine = location.href;

	var extract = regExp.exec(chaine);
	sSearchQuery = extract[2];
	aSearchQuery = sSearchQuery.split('~');

	if( (startValue != '' && startValue != 'empty') || (endValue != '' && endValue != 'empty'))
		aSearchQuery[idField.toInt()] = startValue + '|' + endValue;
	else
		aSearchQuery[idField.toInt()] = '';

	sSearchQuery = aSearchQuery.join('~');

	url = extract[1]+sSearchQuery+extract[3];

	location.href = url;
	
	oEventsManager.fireEvent('nextStep');
}

/**
* fonction permettant de valider le calendrier du drilldown sous la forme
* d'une url drilldown
*
*/
function submitField( idField, urlLocation, urlLabel )
{
	var chaine = '';

	// reg expr for url
	model = '(.*\/)(.*)(\/[a-zA-Z]*)(\-[0-9]{1,2}\-[0-9]{1}\.html)(.*$)';

	regExp = new RegExp(model);

	chaine = location.href;
	if( $chk(urlLocation) )
		chaine = urlLocation;

	extract = regExp.exec(chaine);
	sSearchQuery = extract[2];
	aSearchQuery = sSearchQuery.split('~');

	aSearchQuery[idField.toInt()] = urlLabel;

	sSearchQuery = aSearchQuery.join('~');

	url = extract[1]+sSearchQuery+extract[3]+extract[4];

	window.location.href = url;
}

//################### INTIALIZE EVENTS ###################
oEventsManager.registerEvent('initCalendar', initCalendar);
oEventsManager.registerEvent('slideCriteria', slideCriteria);
oEventsManager.registerEvent('changeDrillDownMode', changeDrillDownMode);
oEventsManager.registerEvent('addMapEvent', addMapEvent);
oEventsManager.registerEvent('addMarkersEvent', addMarkersEvent);
oEventsManager.registerEvent('validCriteriaFielfForm', validCriteriaFieldForm);
oEventsManager.registerEvent('initFreeFieldFork', initFreeFieldFork);
//################### END INTIALIZE EVENTS ###################
