/*///////////////////////////////////////////////////////////////////////////////////////////////////////
///// Code mixing by Molokoloco for Agence Clark... [BETA TESTING FOR EVER] ........... (o_O)  /////////
///////////////////////////////////////////////////////////////////////////////////////////////////////

Functions :
	
	db(myvar)
	vd(obj, parent)
	die()
	exec(func)
	isSet(myVar)
	isId(myElmt)
	isWhat(myVar)						:  return ( number | string | object | boolean | function )
	checkUrl(strUrl)
	checkMail(strMail)
	checkDate(strDate)
	cleanString(string)
	inArray(myValue,myArray)
	RollOverImage() : Change l'image lors du passage de la souris
	OpenClose(a,div) : Ouverture/Fermeture d'un conteneur  l'aide d'un lien dont la classe change
	ModalInfo(titre, texte)
	focusInput() : Vide les input de leur valeur par defaut
	simpleCheck(form) : Verifier les champs d'un formulaire dont la valeur est vide ou pas defaut
	
	
	
Have to check prototype !

	// EX. ONLOAD EVENT 
	var page_loaded = function(evt) { if (evt) Event.stop(evt); ... }
	Event.observe(window, 'load', page_loaded);	
	...
*/

// ------------------------- REQUIRE :) ---------------------------------- //
if (navigator.userAgent.indexOf('Firefox') >= 0){//initialisation de la console (bug FF3);
	if( typeof console != 'undefined' ) console.log();
}
if (typeof Element == 'undefined') throw("tools.js requires prototype.js library");

// ------------------------- DEBUG VAR ---------------------------------- //
var db = function(myvar) {
   var varValue = 'DB (' + typeof myvar + ') :\n';
    if (typeof myvar == 'string' || typeof myvar == 'number') varValue = myvar;
    //else if (typeof myvar == 'object') return vd(myvar);
    else {
        for (var att in myvar) {
            if (typeof myvar[att] != 'function') // (bad prototype noise)
                varValue += '\t'+att + ' <'+typeof myvar[att]+'> ' + myvar[att]+'\n';
        }
    }
	if (typeof myvar == 'array') varValue += "\n"+myvar.inspect();
    if (navigator.userAgent.indexOf('Firefox') >= 0 && typeof console != 'undefined' && console.log) console.log(varValue); // DEV
    else nativeAlert(varValue);
};

// ------------------------- DEBUG OBJET -------------------------------- //
var vd = function(obj, parent) {
    if (typeof obj != 'object') return db(obj);
    for (var attr in obj) {
        if (parent && typeof console != 'undefined') console.log(parent + "+" + attr + "\n" + obj[attr]);
        else if( typeof console != 'undefined' ) console.log(attr + "\n" + obj[attr]);
        if (typeof obj[attr] == 'object') {
            if (parent) vd(obj[attr], parent + "+" + attr);
            else vd(obj[attr], attr);
        }
    }
}

// ------------------------- STOP SCRIPT ---------------------------------- //
var die = function(mess) {
    throw(( mess ? mess : "JS says that you killing him softly : Oh my god moonWalker is down..."));
};


// ------------------------- Execute function ---------------------------------- //
var exec = function(func) {
	if (typeof(func) == 'string') func = eval(func);
	else if (typeof(func) != 'function') return false;
	try { func(); return true; }
	catch(e) { func; return true; }
	return false;
}

// ------------------------- IS SET ? ---------------------------------- //
var isSet = function(myVar) {
	if (typeof(myVar) == 'undefined' || myVar === '' || myVar === null) return false;
	else return true;
};

// ------------------------- ID ELEMENT EXIST ? ---------------------------------- //
var isId = function(element) {
	if (!isSet(element)) return false;
	try { 
		if ($(element)) return true;
		else return false;
	}
   	catch(e) { return false; }
};

// ------------------------- Type of ---------------------------------- //
var isWhat = function(myVar) {
	if (!isSet(myVar)) return '';
	else return typeof myVar; // number | string | object | boolean | function
};

// ------------------------- VALIDATE URL ------------------------------ //
var checkUrl = function(strUrl) {
    var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/;
    return regexp.test(strUrl);
};

// ------------------------- VALIDATE URL ------------------------------ //
var checkMail = function(strMail) {
    var regexp = /^[A-Za-z0-9._-]+@[A-Za-z0-9.\-]{2,}[.][A-Za-z]{2,4}$/;
    return regexp.test(strMail);
};

// ------------------------- VALIDATE DATE : 15/02/78 ------------------------------ //
var checkDate = function(strDate) {
    if (!isSet(strDate) || !strDate.match('/')) return false;
    var date_array = strDate.split('/');
    var day = String(date_array[0]);
    var month = String(date_array[1]);
    var year = String(date_array[2]);
    if (day.length < 2 || month.length < 2 || year.length < 2) return false;
    if (parseInt(year) > 78) year = '19'+year;
    else year = '20'+year;
    month = parseInt(month - 1);
    var source_date = new Date(year,month,day);
    if (year != source_date.getFullYear() || month != source_date.getMonth() || day != source_date.getDate()) return false;
    else  return true;
};

// ------------------------- CLEAN WORD STRING ------------------------------ //
var cleanString = function(string) {
	if (!isSet(string)) return '';
	//var myregexp = new RegExp(/((&ldquo;)|(&rdquo;)|(&acute;)|(&lsquo;)|(&rsquo;)|(&hellip;)|(\)|(\)|(\)|(\)|(\)|(\)|(\)|(\)|(\)|(\)|(\)|(\)|(\))/gi);
	var myregexp = new RegExp(/((&ldquo;)|(&rdquo;)|(&acute;)|(&lsquo;)|(&rsquo;)|(&hellip;)|(\)|(\)|(\)|(\)|(\)|(\)|(\)|(\)|(\)|(\)|(\)|(\)|(\))/gi);
	string = string.replace(myregexp,' ');
	return string;
};

// ------------------------- inArray ---------------------------------- //
var inArray = function(myValue, myArray) {
	if (isWhat(myArray) != 'object') return false;
    for (var k in myArray) { if (myArray[k] == myValue) return true; }
    return false;
};

// ------------------------- Rollover Image ---------------------------------- //
var RollOverImage = function(){
	var options = Object.extend({}, arguments[0] || {});
	if (!options.RollRech) options.RollRech = '';
	var RollRech = options.RollRech;
	
	$$(RollRech+'input[type=image]',RollRech+'img.rollover').each(
		function(e,index){
			var chemin = e.src;
			var pos_debut = chemin.lastIndexOf('/')+1;
			var pos_fin = chemin.lastIndexOf('.');
			var chemin_fichier = chemin.substring(0,pos_debut);
			var nom_fichier = chemin.substring(pos_debut,pos_fin);
			var ext_fichier = chemin.substr(pos_fin);
			if(!e.hasClassName('no_roll')){
				Event.observe(e, 'mouseover', function(){
					e.src = chemin_fichier+nom_fichier+'_on'+ext_fichier;
				});			 
				Event.observe(e, 'mouseout', function(){
					e.src = chemin_fichier+nom_fichier+ext_fichier;
				});
			}
		}
	);
};

// ------------------------- Open Close ---------------------------------- //
var OpenClose = function(a,div){
	if($(a).hasClassName('on') && $(div).getStyle('display')=='block'){
		$(a).removeClassName('on');
		effet_close = new Array();
		effet_close[0] = new Effect.BlindUp($(div),{duration:0.3});
		effet_close[1] = new Effect.Fade($(div),{duration:0.3});
		new Effect.Parallel(effet_close,{duration:0.3});
	}
	else{
		$(a).addClassName('on');
		effet_open = new Array();
		effet_open[0] = new Effect.BlindDown($(div),{duration:0.3});
		effet_open[1] = new Effect.Appear($(div),{duration:0.3});
		new Effect.Parallel(effet_open,{duration:0.3});
	}
};

// ------------------------- Appel ModalBox ---------------------------------- //
var ModalInfo= function (titre, texte) {
	$('domNode').update(texte);
	Modalbox.show($('domNode'), {title: titre, width: 600});
};

// ------------------------- Focus Input ---------------------------------- //
var focusInput = function(){
	var input = $$('input[value!=""]');
	input.each( function(e,i){
		if((e.type=='text' || e.type=='password') && e.hasClassName('focusInput')){
			Event.observe(e, 'focus', function(evt){
				if(e.value==e.defaultValue)e.value='';
			});
			Event.observe(e, 'blur', function(evt){
				if(e.value=='')e.value=e.defaultValue;
			});
		}
	});
}

// ------------------------- Simple Check ---------------------------------- //
var frmSimpleCheck = function(form){
	var valide = true;
	$$('#'+form.id+' .simpleCheck').each(function(e){
		if(e.value == '' || e.value == e.defaultValue ) valide = false;
	});
	$$('#'+form.id+' .simpleCheckMail').each(function(e){
		var reg_expression_mail = /^[A-Za-z0-9._-]+@[A-Za-z0-9.\-]{2,}[.][A-Za-z]{2,4}$/;
	    var res = reg_expression_mail.test(e.value);
		if(res == false || e.value == e.defaultValue ) valide = false;
	});	
	return valide;
};

// ------------------------- Ancre Scroll ---------------------------------- //
var AncreScroll = function(){
	// Variables
	var options = Object.extend({}, arguments[0] || {});
	if (!options.AncreDuree) options.AncreDuree = 1;
	var AncreDuree = options.AncreDuree;	
	var AncreName;
	var AncreHref;
	
	// Init
	$$('.ancre_scroll').each( function(e){
		AncreHref = e.readAttribute('href');
		AncreName = AncreHref.substr(1);
		Event.observe(e, 'click', function(){
			Effect.ScrollTo($(AncreName),{
				duration : AncreDuree,
				beforeStart : function(){ e.setAttribute('href', 'javascript:void(0);'); },
				afterFinish : function(){ e.setAttribute('href', AncreHref); }
			});
		});
	});	
};