/* Slider */
var gSize;
var gFirstGeneration=true;
var sliderLeft;
var sliderRight;
var id = "searchDateFilter";
var sliderLeftID = id + "_slider_left";
var handleLeftID = id + "_handle_left";
var fillLeftID = id + "_fill_left";
var sliderRightID = id + "_slider_right";
var handleRightID = id + "_handle_right";
var fillRightID = id + "_fill_right";
var maxSliderLeft = 70;
var maxSliderRight = 90;
var bFilterInit = true;

/* Slider dates */
var dateFrom = '';
var dateTo = '';

function searchDateFilter_init () {	
	try {				
		setSearhDateFilterSlider(false); // Check filter state and initiate the graph			
	}
	catch (e) {
			// Catch erreur d'initialisation du searchDateFilter				
			//throw(e);			
		}
}

function decodeDate (sDate) { // date format mmm yyyy ex : jan 2007 return 200701
	var sResult = '';
	var aDate = sDate.split('/');
	var sMonth = aDate[0]; 
	var sYear = aDate[1];
	sResult = sYear + sMonth;
	return sResult;
}

function viewResults () {	
	var sdateFrom = decodeDate(dateFrom);  
	var sDateTo = decodeDate(dateTo); 
	var bFilterState = true;
	var filterLeft = 0;
	var filterRight = 464;
	if (sliderLeft !== undefined) {
		filterLeft = sliderLeft.getValue();
	}
	if (sliderRight !== undefined) {
		filterRight = sliderRight.getValue();
	}
	
	// Génération de l'url
	var sRequest = buildUrlRequestforParamsList([QUERYSTRING_RECHERCHE, QUERYSTRING_RECHERCHE_SANS, QUERYSTRING_LANG, QUERYSTRING_TYPE_RECHERCHE, QUERYSTRING_SORT_BY, QUERYSTRING_DISPLAY_MODE, QUERYSTRING_SOURCE, QUERYSTRING_PERIODE, QUERYSTRING_CRITERIA_STATE]);			
	sRequest += '&' + QUERYSTRING_DATE_DEBUT + '=' + sdateFrom;
	sRequest += '&' + QUERYSTRING_DATE_FIN + '=' + sDateTo;
	sRequest += '&' + QUERYSTRING_FILTER_STATE + '=' + bFilterState;
	sRequest += '&' + QUERYSTRING_FILTER_LEFT + '=' + filterLeft;
	sRequest += '&' + QUERYSTRING_FILTER_RIGHT + '=' + filterRight;
	
	var qs = new Querystring();	
	if(qs.get("rubrique") == "musiquefr")
	{
			if(qs.get(QUERYSTRING_SORT_BY) == null || qs.get(QUERYSTRING_SORT_BY) == '')
				sRequest += '&' + QUERYSTRING_SORT_BY + '=globalrelevance';
			if(qs.get(QUERYSTRING_SOURCE) == null || qs.get(QUERYSTRING_SOURCE) == '')
				sRequest += '&' + QUERYSTRING_SOURCE + '=07';
			sRequest += '&rubrique=musiquefr';
	}
	
	// Appel de la nouvelle requête	
	location.href = sRequest;	
}


function setNbResults (iYearLeft, iMonthLeft, iYearRight, iMonthRight) {
	var nbResults = 0;
	var years = searchDateList.SearchDateResults.list.years	
	var viewCommand = document.getElementById('searchDateFilter_view');
	
	var nbYears = years.length		
	for(var i=iYearLeft; i <= iYearRight ; i++) {				
		year = years[i];		
		var months = year.months;				
		var nbMonths = months.length;								
		if (i==iYearLeft) {				
				for(var j=iMonthLeft; j < nbMonths ; j++) {		
					month = months[j];	
					nbResults += month.value;			
				}
		}
		else if (i==iYearRight) {
					for(var j=0; j <= iMonthRight ; j++) {		
						month = months[j];	
						nbResults += month.value;			
					}
		
				}
				else {
					for(var j=0; j < nbMonths ; j++) {		
						month = months[j];	
						nbResults += month.value;			
				}
			}	
	}	
	// TODO : génération Dom de lien + gestion unobstrusive de capture de l'événement	
	viewCommand.innerHTML = '<div class="searchButtonLeft"></div><div class="searchButton"><a href="javascript:viewResults();" title="Relancer la recherche avec les nouvelles dates">Valider</a></div><div class="searchButtonRight"></div>';	 
	
}

function setSearhDateFilterSlider(bForceDisplay) {

	var qs = new Querystring();	
	var sRecherche = qs.get(QUERYSTRING_RECHERCHE);			
	var sDateFrom = qs.get(QUERYSTRING_DATE_DEBUT);	
	var sDateTo = qs.get(QUERYSTRING_DATE_FIN);
	var bFilterState = qs.get(QUERYSTRING_FILTER_STATE);
	var filterLeft = qs.get(QUERYSTRING_FILTER_LEFT);
	var filterRight = qs.get(QUERYSTRING_FILTER_RIGHT);
	
	// Contrôles des infos à afficher en fonction du contexte : recherche vide, recherche sans résultats, recherche filtrée par date
	checkDisplayFilterInfo(bFilterState, sRecherche, bForceDisplay);
	
	
	if (bFilterState || bForceDisplay) {
		searchDateFilterGraphicInit(parseInt(filterLeft), parseInt(filterRight));			
		Dom.setStyle('searchDateFilter', 'height', '115px');		
		Dom.setStyle('searchDateFilter_graphic', 'display','block');	
		Dom.setStyle('searchDateFilter_date_text', 'display','block');	
	}
	else {
		var years = searchDateList.SearchDateResults.list.years;
		var nbYears = years.length	;	
		var nbMonthsLastYear = years[nbYears - 1].months.length;							
		dateFrom = years[0].months[0].label + ' ' + years[0].label + ' ';
		dateTo = years[nbYears - 1].months[nbMonthsLastYear - 1].label + ' ' + years[nbYears - 1].label + ' ';				
		setNbResults(0,0,nbYears - 1,nbMonthsLastYear - 1);				
	}
	
	if (searchDateList == null) {		
		Dom.setStyle('searchDateFilter_graphic', 'display','none');	
	}

}

// TODO : Simplifier la gestion de l'affichage/masquage du searchDateFilter pour le rendre homogène avec l'implémentation type searchToolsContainer
function checkDisplayFilterInfo (bFilterState, sRecherche, bForceDisplay) {
	// Masquaque de la "phrase" résultat	
	if (sRecherche == null) {
		Dom.setStyle('searchParam', 'visibility','hidden');
	}
	// Vérification pour l'affichage du dateSearchFilter
	if (bFilterState != null || bForceDisplay !=null) { 			
		if (bFilterState || bForceDisplay) {						
				Dom.setStyle('searchDateFilter', 'visibility','visible');
				if (bForceDisplay) {
					displaySearchDateFilterGraphic();
				}
		}
		else {						
				Dom.setStyle('searchDateFilter', 'visibility','hidden');
		}
		
	}
	else { // masque l'affichage du filtre
		Dom.setStyle('searchDateFilter_graphic', 'display','none');	
		Dom.setStyle('searchDateFilter_date_text', 'display','none');				
		Dom.setStyle('searchDateFilter', 'visibility','hidden');			
		}
		
	if (searchDateList == null) {		
		Dom.setStyle('searchDateFilter_graphic', 'display','none');	
	}
}
function toggleDisplayFilter () {
	var searchDateFilterContainerLink = document.getElementById('searchDateFilterContainerLink');	
	if (Dom.getStyle('searchDateFilter', 'visibility') == 'hidden') {
		Dom.setStyle('searchDateFilter', 'visibility','visible');	
		Dom.setStyle('spacerContainer', 'display','none');	
		displaySearchDateFilterGraphic();				
		searchDateFilterContainerLink.innerHTML = 'Masquer la p&eacute;riode';		
	}
	else {
		Dom.setStyle('searchDateFilter', 'visibility','hidden');	
		Dom.setStyle('spacerContainer', 'display','block');	
		hideSearchDateFilterGraphic();		
		searchDateFilterContainerLink.innerHTML = 'Afficher la p&eacute;riode';		
	}
		
}

function displaySearchDateFilterGraphic() {  	
	var qs = new Querystring();	
	var bFilterState = qs.get(QUERYSTRING_FILTER_STATE);						
	Dom.setStyle('searchDateFilter', 'height', '120px');
	Dom.setStyle('searchDateFilter_graphic', 'display','block');
	Dom.setStyle('searchDateFilter_date_text', 'display','block');		
	if (searchDateList != null) {
	if (!bFilterState) {
		var today = new Date();
		var dNow = new Date();
		var years = searchDateList.SearchDateResults.list.years
		var nbYears = years.length;
		var nbMonths = years[nbYears -1].months.length;							
		var filterLeft = 0;
		var filterRight = 464;
	
		if (bFilterInit) {
			//var startDate = dNow.add('mo', -3); // trimestres			
			//sFilterSate = "&" + QUERYSTRING_FILTER_STATE + "=true";				
			//var filterRight = (nbYears - 1) * 78 + (nbMonths * 6);
			//var offset = 0;
			// Décalage pour un saut d'année graphique en début d'année
			//if (nbMonths < 3) {
			//	offset = 4;
			//}			
			
			//var filterLeft = filterRight - (3*3 + 12 + offset);			
			searchDateFilterGraphicInit(filterLeft, filterRight);		
			bFilterInit = false;
		}
	} 
	} else {
		var searchDateFilter_date_text = document.getElementById('searchDateFilter_date_text');
		searchDateFilter_date_text.innerHTML = "Aucun r&eacute;sultat sur aucune p&eacute;riode.";		
		Dom.setStyle('searchDateFilter_graphic', 'display','none');
	}
} 

function hideSearchDateFilterGraphic() {  	
	Dom.setStyle('searchDateFilter_graphic', 'display','none');	
	Dom.setStyle('searchDateFilter_date_text', 'display','none');	
	Dom.setStyle('searchDateFilter', 'height', '0');
} 

function searchDateFilterGraphicInit(leftHandle, rightHandle) { 
	if (searchDateList != null) {
		gFirstGeneration = false; 
		// Récupération des données + génération du graph	
		getSearchDateResults();     	
		// initialisation slider
		new fancySlider(0, 464, leftHandle, rightHandle);  	
	} else {
		var searchDateFilter_date_text = document.getElementById('searchDateFilter_date_text');
		searchDateFilter_date_text.innerHTML = "Aucun r&eacute;sultat sur aucune p&eacute;riode.";		
		Dom.setStyle('searchDateFilter_graphic', 'display','none');
	}
		
} 
         
// Gestion des slider
function fancySlider(start, end, leftHandle, rightHandle) {	
	
	
	// set Slider
	sliderLeft = YAHOO.widget.Slider.getHorizSlider(sliderLeftID, handleLeftID, start, end);
	sliderRight = YAHOO.widget.Slider.getHorizSlider(sliderRightID, handleRightID, start, end);
	
	// set left side
	sliderLeft.subscribe("change", checkFillZonesLeft);
	sliderLeft.subscribe("slideEnd", setNewValues);
	
	// set right side
	sliderRight.subscribe("change", checkFillZonesRight);
	sliderRight.subscribe("slideEnd", setNewValues);
	
	// Initial positions
	sliderLeft.setValue(leftHandle);
	sliderRight.setValue(rightHandle);
}

function checkFillZonesLeft(movefrom) {			
	Dom.get(fillLeftID).style.width = sliderLeft.getValue() + 'px';		   		
}

function checkFillZonesRight(movefrom) {				
	Dom.get(fillRightID).style.width = (464 - sliderRight.getValue()) + 'px';	
	Dom.get(fillRightID).style.left =  Dom.get(handleRightID).style.left;
}

function searchDateFilterCancel() {
	sliderLeft.setValue(0);
	sliderRight.setValue(464);
}

function getDateLabelLeft (value) {
	var results = new Array();
	var dateList = searchDateList.SearchDateResults.list
	var yearValue = Math.floor(value / 77); // rapport à la taille en pixel d'une année
	var monthValue = Math.floor((value % 77) / 6); // reste du rapport à l'année rapporté sur la taille en pixel d'un mois 	
	// Contrôles des extremmités	
	if (yearValue > dateList.years.length - 1) { 
		yearValue = dateList.years.length - 1;
	}
	if (yearValue < 0) { 
		yearValue = 0;
	}
	
	if (monthValue > dateList.years[yearValue].months.length - 1) { 
		monthValue = dateList.years[yearValue].months.length - 1;
	}
	if (monthValue < 0) {
		monthValue = 0;	
	}
	
	
	results[0] = dateList.years[yearValue].months[monthValue].label  + '/' + dateList.years[yearValue].label;
	results[1] = yearValue;
	results[2] = monthValue;
	return results;
}



function getDateLabelRight (value) {
	var results = new Array();
	var dateList = searchDateList.SearchDateResults.list
	var yearValue = Math.floor(value / 79); // rapport à la taille en pixel d'une année
	var monthValue = Math.floor((value % 79) / 6); // reste du rapport à l'année rapporté sur la taille en pixel d'un mois 	
	// Contrôles des extremmités	
	if (yearValue > dateList.years.length - 1) { 
		yearValue = dateList.years.length - 1;
	}
	if (yearValue < 0) { 
		yearValue = 0;
	}
	
	if (monthValue > dateList.years[yearValue].months.length - 1) { 
		monthValue = dateList.years[yearValue].months.length - 1;
	}
	if (monthValue < 0) {
		monthValue = 0;	
	}
	
	results[0] = dateList.years[yearValue].months[monthValue].label  + '/' + dateList.years[yearValue].label;
	results[1] = yearValue;
	results[2] = monthValue;	
	return results;
}

function setNewValues() {	
	var resultsLeft = new Array();
	var resultsRight = new Array();
	var valLeft = sliderLeft.getValue();
	var valRight = sliderRight.getValue();        	
	var resultsLeft = new Array();
	var resultsLeft=getDateLabelLeft(valLeft);
	var resultsRight=getDateLabelRight(valRight);

	dateFrom = resultsLeft[0];
	dateTo = resultsRight[0];
	setNbResults(resultsLeft[1],resultsLeft[2],resultsRight[1],resultsRight[2]);	
}

function checkDisplayFilterAfterDom () {
	var searchResultID = document.getElementById('searchResultID');
	var qs = new Querystring();	
	var sRecherche = qs.get(QUERYSTRING_RECHERCHE);
	var tabWords = searchResultID.innerHTML.split(' ');		
	if (tabWords[0] == 'Aucun' && sRecherche != null) {		
		setSearhDateFilterSlider(true);			
	} 
}

function checkDisplayFilterContent () {
	Event.onAvailable('searchResultID', checkDisplayFilterAfterDom);
}

// Initialisation sur le onAvailable
Event.onAvailable('searchDateFilter', searchDateFilter_init);
// Initialisation sur load
Event.addListener(window, 'load', checkDisplayFilterContent);
