/* Cross-Browser Split 1.0.1
(c) Steven Levithan <stevenlevithan.com>; MIT License
An ECMA-compliant, uniform cross-browser split method */

var cbSplit;

// avoid running twice, which would break `cbSplit._nativeSplit`'s reference to the native `split`
if (!cbSplit) {

cbSplit = function (str, separator, limit) {
    // if `separator` is not a regex, use the native `split`
    if (Object.prototype.toString.call(separator) !== "[object RegExp]") {
        return cbSplit._nativeSplit.call(str, separator, limit);
    }

    var output = [],
        lastLastIndex = 0,
        flags = (separator.ignoreCase ? "i" : "") +
                (separator.multiline  ? "m" : "") +
                (separator.sticky     ? "y" : ""),
        separator = RegExp(separator.source, flags + "g"), // make `global` and avoid `lastIndex` issues by working with a copy
        separator2, match, lastIndex, lastLength;

    str = str + ""; // type conversion
    if (!cbSplit._compliantExecNpcg) {
        separator2 = RegExp("^" + separator.source + "$(?!\\s)", flags); // doesn't need /g or /y, but they don't hurt
    }

    /* behavior for `limit`: if it's...
    - `undefined`: no limit.
    - `NaN` or zero: return an empty array.
    - a positive number: use `Math.floor(limit)`.
    - a negative number: no limit.
    - other: type-convert, then use the above rules. */
    if (limit === undefined || +limit < 0) {
        limit = Infinity;
    } else {
        limit = Math.floor(+limit);
        if (!limit) {
            return [];
        }
    }

    while (match = separator.exec(str)) {
        lastIndex = match.index + match[0].length; // `separator.lastIndex` is not reliable cross-browser

        if (lastIndex > lastLastIndex) {
            output.push(str.slice(lastLastIndex, match.index));

            // fix browsers whose `exec` methods don't consistently return `undefined` for nonparticipating capturing groups
            if (!cbSplit._compliantExecNpcg && match.length > 1) {
                match[0].replace(separator2, function () {
                    for (var i = 1; i < arguments.length - 2; i++) {
                        if (arguments[i] === undefined) {
                            match[i] = undefined;
                        }
                    }
                });
            }

            if (match.length > 1 && match.index < str.length) {
                Array.prototype.push.apply(output, match.slice(1));
            }

            lastLength = match[0].length;
            lastLastIndex = lastIndex;

            if (output.length >= limit) {
                break;
            }
        }

        if (separator.lastIndex === match.index) {
            separator.lastIndex++; // avoid an infinite loop
        }
    }

    if (lastLastIndex === str.length) {
        if (lastLength || !separator.test("")) {
            output.push("");
        }
    } else {
        output.push(str.slice(lastLastIndex));
    }

    return output.length > limit ? output.slice(0, limit) : output;
};

cbSplit._compliantExecNpcg = /()??/.exec("")[1] === undefined; // NPCG: nonparticipating capturing group
cbSplit._nativeSplit = String.prototype.split;

} // end `if (!cbSplit)`

// for convenience...
String.prototype.split = function (separator, limit) {
    return cbSplit(this, separator, limit);
};


var validStep = function(step){
	var form = false;
	//vérification du formulaire et des champs obligatoires
	tab = new Array();
	$(step).getElements('input').each(function(el,i){
			name = new Array();
			name = el.name.split('-');
			if(name[3] == 'o'){
				el.getParent().getParent().setStyle('background','none');
				if(el.value.trim() == '')
					tab.include(el);
			}
	});
	$(step).getElements('textarea').each(function(el,i){
			name = el.name.split('-');
			if(name[3] == 'o'){
				el.getParent().getParent().setStyle('background','none');
				if(el.value.trim() == '')
					tab.include(el);
			}
	});
	$(step).getElements('.formulaire_error').each(function(item){
		item.dispose();
	});
	
	
	//attribution du message d'erreur pour les champs obligatoires vides
	var errorMessage = "Ce champ est obligatoire, veuillez le renseigner s'il vous plaît.";
	tab.each(function(el){
		el.getParent().getParent().adopt(new Element('div', {
							'class': 'formulaire_error',
							'html': errorMessage,
							'style': 'height: 40px;color:#fff;'
						}).morph({height: 40}));
		el.getParent().getParent().setStyle('background-color','#6B221C');
		el.getParent().getParent().setStyle('padding','10px');
	});
	
	if(tab.length == 0)
		form = true;
		
	//vérification du choix d'un élément
	var cpt=0;
	var nb_el=0;
	
	$(step).getElements('.element').each(function(el){
		if(el.getElement('.bouton').checked){
  			cpt++;
  		}
  		nb_el++;
	});
		
	if(form){
		if(nb_el>0){
			if(cpt==1)
				return true;
			else
				return false;
		}
		else{
			return true;
		}
	}
	else{
		return false;
	}
	
	
}

var checkSteps = function(type){
	if(type=='total')
		var etapes = $$('.etape');
	else
		var etapes = $$('.visited');
		
	var bool = true;
	etapes.each(function(item){
		id_step = item.get('id');
		var num_etape = id_step.substr(5,(id_step.length-5)); 
		
		//on check si l'étape a correctement été renseignée
		var id = 'statut-img-'+num_etape;
		if(validStep(id_step)){
			$(id).set('src',wwwroot+'/media/img/img_conception/ok.png');
			$(id).set('alt','ok');
		}
		else{ //sinon 
			$(id).set('src',wwwroot+'/media/img/img_conception/ko.png');	
			$(id).set('alt','ko');
			bool = false;
		}
	});
	return bool;
}


//fonction qui coche le bouton si on click dans la case du produit
var checkOnClick = function(el){
	if(el.getElement('.bouton').checked){
  		el.getElement('.bouton').set('checked', '');
  		el.set('class','element');
  	}
  	else{
  		var checkbox = el.getParent().getParent().getElements('.bouton');
  		checkbox.each(function(item){
  			item.set('checked', '');
  			item.getParent().getParent().set('class','element');
  		});
  		
  		el.getElement('.bouton').set('checked', 'checked');
  		el.set('class','element select');
  	}
}

//fonction qui switch à l'étape cliquée dans le menu an haut de page
var switchStep = function(lien, id_lien){
	
	$$('.etape').setStyle('display','none');
	var num_etape = id_lien.substr(6,(id_lien.length-6)); 
	var etape_cur = 'step-'+num_etape;
	$(etape_cur).setStyle('display','block');
	$(etape_cur).addClass('visited');
	checkSteps();
	switchButton();
	selectCur();
	this.refreshSlider(0);
	var myFx = new Fx.Scroll('etapes', {wheelStops: false}).toElement('etapes');
	
}

//fonction qui permet de passer à l'étape suivante à l'aide du bouton bas de page
var nextStep = function(){
	var done = false;
	var etapes = $$('.etape');
	etapes.each(function(item){
		if(item.isDisplayed() && !done){
			id_step = item.get('id');
			var num_etape = id_step.substr(5,(id_step.length-5)); 
			etapes.setStyle('display','none');
			var etape_cur = 'step-'+(parseInt(num_etape)+1);
			$(etape_cur).setStyle('display','block');
			$(etape_cur).addClass('visited');
			done = true;
		}	
	});
	checkSteps();
	switchButton();
	affichageEtapes('next');
	selectCur();
	this.refreshSlider(0);
	var myFx = new Fx.Scroll('etapes', {wheelStops: false}).toElement('etapes');
	
}

//fonction qui permet de passer à l'étape suivante à l'aide du bouton bas de page
var prevStep = function(){
	var done = false;
	var etapes = $$('.etape');
	etapes.each(function(item){
		if(item.isDisplayed() && !done){
			id_step = item.get('id');
			var num_etape = id_step.substr(5,(id_step.length-5)); 
			etapes.setStyle('display','none');
			var etape_cur = 'step-'+(parseInt(num_etape)-1);
			$(etape_cur).setStyle('display','block');
			$(etape_cur).addClass('visited');
			done = true;
		}	
	});
	checkSteps();
	switchButton();
	affichageEtapes('prev');
	selectCur();
	this.refreshSlider(0);
	var myFx = new Fx.Scroll('etapes', {wheelStops: false}).toElement('etapes');
	
}

//fonction gerant l'affichage de la barre de choix d'étape en haut de page (8 etapes à l'affichage maxi)
var affichageEtapes = function(type){
	checkSteps();
	var etapes = $$('.select_etape');
	var tab = new Array();
	if(etapes.length > 6){
		etapes.each(function(item){
			if(item.isDisplayed()){
				tab.include(item);
			}
		});
		if(tab.length > 5){
			if(type == 'next'){
				id_last = tab.getLast().get('id');
				var num_etape = id_last.substr(6,(id_last.length-6));
				var etape_next = 'etape-'+(parseInt(num_etape)+1);
				if($(etape_next)){
					id_first = tab[0].get('id');
					$(id_first).setStyle('display', 'none');
					$(etape_next).setStyle('display', 'block');
				}

			}
			else if(type == 'prev'){
				id_first = tab[0].get('id');
				var num_etape = id_first.substr(6,(id_first.length-6));
				var etape_prev = 'etape-'+(parseInt(num_etape)-1);
				if($(etape_prev)){
					$(etape_prev).setStyle('display', 'block');
					id_last = tab.getLast().get('id');
					$(id_last).setStyle('display', 'none');
				}
			}
			else{}
		}
	}
	this.refreshSlider(0);
	var myFx = new Fx.Scroll(document, {wheelStops: false}).toElement('etapes');
	
}

var switchButton = function(){

	var etapes = $$('.etape');
	/*
	* affichage du bouton pour valider le formulaire et on efface celui pour passer à l'étape suivante
	* Si on est à la derniere étape
	*/
	
	//récupération des 2 boutons
	var bnext = $$('#next_step');
	var bprev = $$('#prev_step');
	var bnext2 = $$('#next_fleche');
	var bprev2 = $$('#prev_fleche');
	
	etapes.each(function(item){
		if(item.isDisplayed()){
			id_step = item.get('id');
			var num_etape = id_step.substr(5,(id_step.length-5)); 
			var etape_next = 'step-'+(parseInt(num_etape)+1);
			var etape_prev = 'step-'+(parseInt(num_etape)-1);

			if(!$(etape_next)){ //alors on change de bouton
				bnext.setStyle('display', 'none');
				bnext2.setStyle('display', 'none');
				$('finalisation').setStyle('display','block');
			}
			else{
				bnext.setStyle('display', 'block');
				bnext2.setStyle('display', 'block');
				$('finalisation').setStyle('display','none');
			}
			if(!$(etape_prev)){
				bprev.setStyle('display', 'none');
				bprev2.setStyle('display', 'none');
				$('btns_etapes').setStyle('margin-left','18px');
			}
			else{
				bprev.setStyle('display', 'block');
				bprev2.setStyle('display', 'block');
				$('btns_etapes').setStyle('margin-left','0px');
			}
		}	
	});
}

var selectCur = function(){

	var step = $$('.select_etape');
	var num_etape = 1;
	var num_etape2 = 1;
	var cur = step[0];
	var id;
	step.each(function(item){
		//on recupère le num de l'étape courante
		var etapes = $$('.etape');
		etapes.each(function(item2){
			if(item2.isDisplayed()){
				cur = item2.get('id');
				num_etape = cur.substr(5,(cur.length-5)); 
			}
		});
		
		//on attribut ou on eneleve la class selon le cas
		id = item.get('id');
		num_etape2 = id.substr(6,(id.length-6)); 
		if(item.hasClass('etape_active') && (num_etape2 != num_etape)){ //Si il a la class active et qu'il est différent de l'étape courante 
			//alors on lui enlève la class
			item.removeClass('etape_active');
		}
		else if(num_etape2 == num_etape){ //si c'est l'etape active
			//alors on lui ajoute la class active
			item.addClass('etape_active');
		}
	});
	
}

 var myMooFlowPage = {
 
 	start: function(){ 
 		milkbox = new Milkbox();
		var mf = new MooFlow($('MooFlow'), { 
			useSlider: true, 
			useCaption: true, 
			useMouseWheel: true, 
			useKeyInput: true, 
			useViewer: true, 
			useResize: false,
			onClickView: function(obj){
				milkbox.showThisImage(obj.href);
			} 
		}); 
	}
	
 }

window.addEvent('domready', function(){

	$$('.element').addEvent('click',function(){
		checkOnClick(this);
	});
	
	
	$$('.select_etape').addEvent('click',function(){
		switchStep(this, this.get('id'));
	});
	
	
	$$('#next_step').addEvent('click', function(){
		nextStep();
	});
	
	$$('#prev_step').addEvent('click', function(){
		prevStep();
	});
	
	$$('#next_fleche').addEvent('click', function(){
		nextStep();
	});
	
	$$('#prev_fleche').addEvent('click', function(){
		prevStep();
	});
	
	selectCur();
	if($('MooFlow'))
		myMooFlowPage.start();

	$$('#finalisation').addEvent('click',function(){
		if(checkSteps('total'))
			$('form_conception').submit();
		else
			alert("un ou plusieurs champs n'ont pas été renseignés, ou vous avez oublié de sélectionner un ou plusieurs éléments, veuillez vous reporter aux étapes concernées avant de continuer, merci");
	});
	
	if($('min') && $('max')){
	$('min').addEvent('keyup',function(){
		$('min').value = $('min').value.toInt();		
		if($('min').value == 'NaN')
			$('min').value = 0;
	});
	$('max').addEvent('keyup',function(){
		$('max').value = $('max').value.toInt();
		if($('max').value == 'NaN')
			$('max').value = 0;
	});
	}
});

