jQuery(document).ready(function(){
//variable de debug
var DEBUG = false;

/* ---------- FONCTION SEARCH ENGINE ----------
		Moteur fonctionnel de la recherche        
----------------------------------------------- */
	
	var searchEngine = {
		clickEvent:function(event) {
			if(DEBUG)console.log('========== clickEvent function =========');
			
			//on annule l'effet des liens
			event.preventDefault();
			
			var $currentTarget = event.currentTarget;
				
			//on parse l'adresse du lien pour récupérer l'id et la catégorie (donnees[0] = catégorie, donnees[1] = ID)
			var donnees = new Array();
			donnees = searchEngine.parseLink($currentTarget);
			
			
			//On toggle la cible en fonction de sa catégorie
			searchDesign.toggleTarget($currentTarget, donnees[0]);
			
			//on push l'id dans un tableau
			this.pushId(donnees[0], donnees[1]);
		},
		
				
		parseLink:function(link) {
			if(DEBUG)console.log('========== parseLink function =========');
			
			var href = jQuery(link).attr('href');
			
			if(DEBUG)console.log('		Adresse passé en variable : '+href);
			
			//on récupère la catégorie du lien
			var regCat = /\?{1}(.*)\={1}/;
			var categorie = regCat.exec(href);
			
			//on récupère l'id associé à la catégorie
			var regId = /[0-9]+$/;
			var id = regId.exec(href);
			
			if(DEBUG)console.log('	Catégorie : '+categorie[1]);
			if(DEBUG)console.log('	Id : '+id);
			
			var arr = new Array();
			
			arr.push(categorie[1]);
			arr.push(id);
			
			if(DEBUG)console.log('	Informations retournées : '+arr);
			
			return arr;
		},
		
		loadLink:function() {
			if(DEBUG)console.log('========== loadLink function =========');
			if(DEBUG)console.log('Base URL :'+ BASE_URL);
			
			//variables :
			//var collection = BASE_URL+'collection.html?';
			var collection = BASE_URL+'catalogsearch/advanced/result/?';
			var design = '';
			var rawMaterials = '';
			var color = '';
			
			if(designArray.length > 0) {
				var design = 'lan_design[]='+designArray.join('&lan_design[]=');
				var esperluette = true; //permet de savoir si on doit placer un "&" devant ou pas.
			}
			if(rawMaterialsArray.length > 0) {
				if(esperluette) var rawMaterials = '&lan_raw_materials[]='+rawMaterialsArray.join('&lan_raw_materials[]=');
				else { 
					var rawMaterials = 'lan_raw_materials[]='+rawMaterialsArray.join('&lan_raw_materials[]='); 
					esperluette = true;
				}
			}
			
			if(colorArray.length > 0) {
				if(esperluette) var color = '&color[]='+colorArray.join('&color[]=');
				else { 
					var color = 'color[]='+colorArray.join('&color[]='); 
					esperluette = true; 
				}
			}
			
			var lienFinal= collection+design+rawMaterials+color;
			
			return lienFinal;
		},
		
		pushId:function(categorie, id) {
			if(DEBUG)console.log('========== chartLink function =========');
			
			switch (categorie) {
				case 'lan_design':
					
					if(!searchEngine.PushArray(designArray, id, false)){
						if(DEBUG)console.log('  push de l\'id dans le tableaux');
						designArray.push(id);
						
						if(DEBUG)console.log('tableau designArray :'+ designArray);
					}else {
						this.PushArray(designArray, id, true)
					}
					
					
				break;
				
				case 'lan_raw_materials':
					
					if(!searchEngine.PushArray(rawMaterialsArray, id, false)){
						if(DEBUG)console.log('  push de l\'id dans le tableaux');
						rawMaterialsArray.push(id);
						
						if(DEBUG)console.log('tableau rawMaterialsArray : '+rawMaterialsArray);
					}else {
						this.PushArray(rawMaterialsArray, id, true)
					}
					
				break;
				
				case 'color':
				if(!searchEngine.PushArray(colorArray, id, false)){
						if(DEBUG)console.log('  push de l\'id dans le tableaux');
						colorArray.push(id);
						
						if(DEBUG)console.log(' tableau colorArray : '+colorArray);
					}else {
						this.PushArray(colorArray, id, true)
					}
				break;
				
				default:
				break;
			}

			
		},
		
		PushArray:function(array, valeur, splice) {
			
			var length =  array.length;
			if(length == 0) return false;
			
			// on parcours le tableau
			for(var i=0; i < length; i++){
	 	 		
				if(parseInt(array[i]) === parseInt(valeur)) {
					//si splice est à true, c'est qu'on veut supprimer la valeur du tableau
					if(splice == true) {
						array.splice(i, 1);
						if(DEBUG)console.log('id '+valeur+' supprimé dans le tableau');
						if(DEBUG)console.log('New array : '+ array);
						return true;
					}
					
					if(DEBUG)console.log('id '+valeur+' trouvé dans le tableau');
					return true;
				}
			}
		
			if(DEBUG)console.log('id '+valeur+' introuvable dans le tableau');
			return false;
		}
	}

/* ---------- FONCTION SEARCH DESIGN --------------------------
				Moteur graphique de la recherche
		permet notamment de gérer les différents toggles        
---------------------------------------------------------------- */

	var searchDesign = {
		
		toggleTarget:function(target, categorie) {
			
			if(DEBUG)console.log('========== toggleTarget function =========');
			
			//dans tous les cas, on toggle la class de la cible
			jQuery(target).toggleClass('selected');
			
			//puis, en fonction de la catégorie, on applique d'autres fonctions
			switch (categorie) {
				case 'lan_design':
					var src = jQuery(target).children().attr('src');						
					var regExtension = /[a-zA-Z\.]{4}$/;
					
					extension =  regExtension.exec(src);
					srcWithoutExt =  src.replace(extension, '');
					
					var newSrc = '';
											
					if(jQuery(target).hasClass('selected')) {
						newSrc = srcWithoutExt+'_selected'+extension;
					}else {
						newSrc = src.replace('_selected', '');
					}
					
					if(DEBUG)console.log('toggle de l\'image avec la source suivante : '+newSrc);
						
						
					jQuery(target).children().attr('src', newSrc);
				break;
				
				case 'color':					
										
					if(stop == false){
						stop = true;
						//on passe l'opacité des couleurs à 50%;
						this.colorOpacityInit(colorOpacity);
						jQuery('img', target).fadeTo(1, colorOpacity);
					}
					
					if(jQuery(target).hasClass('selected')) {
						jQuery('img', target).fadeTo(1, 1);
					}else {
						jQuery('img', target).fadeTo(1, colorOpacity);
					}
					
					if(!jQuery(target).parent().parent().find('a').hasClass('selected')){
						stop = false;
						this.colorOpacityInit(1);
					}

					
				break;
				
				default:
				break;
			}
		},

		toggleButton:function(bool, lien) {
			if(DEBUG)console.log('========== toggleButton function =========');
			if(DEBUG)console.log('lien passé en paramètre : '+lien);
			
			switch (bool) {
				case true:
					toggleButton = true;
					if(DEBUG)console.log('toggleButton = true');
					//on cache le boutton d'envoi du formulaire
					jQuery('.form-search button').hide();
					
					//et on le remplace par un lien
					jQuery('.form-search').append('<a href="" class="button send"><span>Recherche</span></a>');
					//jQuery('.form-search').append("<button class=\"button send\" type=\"\"><span>Recherche</span></button>");
				break;
				
				case false:
					toggleButton = false;
					if(DEBUG)console.log('toggleButton = false');
					
					jQuery('.form-search a.button').hide();
					jQuery('.form-search button').show();
				break;
				
				default:
				break;
			}
		},
		
		colorOpacityInit:function(valeur){
			//jQuery('#formRecherche .searchColor').find('a').css({'opacity': valeur});
			jQuery('#formRecherche .searchColor li img').fadeTo('fast', valeur);
		}
	}
	
// ----------------------------------------------------------------------------------------------------------- \\
// ------------------------------------------ FONCTION DE RECHERCHE ------------------------------------------ \\
// ------------------------------------------------------------------------------------------------------------ \\
	// paramètres
	var colorOpacity = 0.25;
	
	//Initialisation des variables 
	var designArray = new Array();
	var rawMaterialsArray = new Array();
	var colorArray = new Array();
	var toggleButton = false;
	var stop = false;
	
	
	jQuery('#formRecherche a').click(function(e){
		
		//à chaque évènement de souris, on parse le lien
		searchEngine.clickEvent(e);
		
		//on charge le lien de recherche
		var searchLink = searchEngine.loadLink();
		if(DEBUG)console.log('lien retourné : '+searchLink);
		
	
		//on remplace le button "recherche" par un <a>
		if(toggleButton == false) {
			searchDesign.toggleButton(true);
		}
		
		//et on met le lien de recherche dans ce lien
		jQuery('.form-search a.button').attr('href', searchLink);
	});
	
	//lorsqu'on qu'on focus sur la barre de recherche par mots clés
	jQuery('.form-search #search').focus(function(){
		
		//On affiche le bouton d'envoi du formulaire (seulement si celui-ci a été remplacé par un lien)
		if(toggleButton == true) {
			searchDesign.toggleButton(false);
		}
	});
	
	
});
