if(typeof $j == "undefined")
	$j = jQuery.noConflict();

$j.extend({
	log: function(t) {
		if($j.browser.mozilla)
			console.log(t);
	}
});

/*******************************************************************************
***                               INFO BULLES                                ***
********************************************************************************
* Construction des bulles d'information et d'erreur au chargement de la page   *
* Vertical = bulle s'affichant de bas en haut                                  *
* Horizontal = bulle s'affichant de droite a   gauche                          *
*******************************************************************************/

var Bubble = {
	toString:'Bubble',
	template: function(info, arrow, type ){
		var bubble =(
		'<div class="vipBubble'+arrow+'InfoTop"><!--  --></div>'+
		'<div class="vipBubble'+arrow+'InfoMiddle vipTxt1b">'+
			'<div class="vipBubblePictoInfo"><!-- --></div>'+
			info+
		'</div>'+
		'<div class="vipBubble'+arrow+'InfoBottom"><!--  --></div>'
		);
		return bubble;
	},
	construct: function(i){
		var $self = $j(this);
		var bubblenameArr = this.className.split("_");
		var isArrow = (bubblenameArr[1].toLowerCase()=='vertical')? 'Vertical' : 'Horizontal';
		var type = (bubblenameArr[2].toLowerCase()=='info')? 'Info' : 'Oups';
		var innerHTML = $self.html();
		// on verifie si le div conteneur n'a pas deja fait la bubble !!!
		if( innerHTML.indexOf('vipBubble')<0 ){
			var bubble = Bubble.template(innerHTML, isArrow, type );
			$self.html(bubble);
		}
		// au click on cache..
		$self.click(function(){
			$j(this).hide();
		});
	},
	findAndConstruct: function(){
		var tmpBubbles = $j(this).parent().find("div[class*=bubbleTxt_]");
		tmpBubbles.each(Bubble.construct);
	},
	showPseudo: function(){
		$j('div.bubbleTxt_pseudo_horizontal_error')
			.animate({opacity: "show", left: "190"}, "fast")
			.removeClass('vipBubbleBlur')
			.addClass("vipBubbleFocus");
		Bubble.hideAllErrors();
	},
	hidePseudo: function(){
		$j('div.bubbleTxt_pseudo_horizontal_error')
			.animate({opacity: "hide", left: "210"}, "fast")
			.removeClass('vipBubbleFocus')
			.addClass("vipBubbleBlur");
	},
	showEmail: function(msg){
		$j.log("showEmail()"); /////////////////////////////////////////////////
		if(msg=="ALREADY_ASSIGNED"){
			$j('div.bubbleTxt_Email_horizontal_error')
				.animate({opacity: "show", left: "190"}, "fast")
				.removeClass('vipBubbleBlur')
				.addClass("vipBubbleFocus");
		}
		else{
			$j('div.bubbleTxt_Email_horizontal_oups')
				.animate({opacity: "show", left: "190"}, "fast")
				.removeClass('vipBubbleBlur')
				.addClass("vipBubbleFocus");
		}
	},
	hideEmail: function(){
		$j.log("hideEmail()"); /////////////////////////////////////////////////
		$j('div.bubbleTxt_Email_horizontal_error')
			.animate({opacity: "hide", left: "210"}, "fast")
			.removeClass('vipBubbleFocus')
			.addClass("vipBubbleBlur");
		$j('div.bubbleTxt_Email_horizontal_oups')
			.animate({opacity: "hide", left: "210"}, "fast")
			.removeClass('vipBubbleFocus')
			.addClass("vipBubbleBlur");
	},
	showCgu: function(){
		$j('div.bubbleTxt_Cgu_horizontal_error')
			.animate({opacity: "show", left: "190"}, "fast")
			.removeClass('vipBubbleBlur')
			.addClass("vipBubbleFocus");
	},
	hideCgu: function(){
		$j('div.bubbleTxt_Cgu_horizontal_error')
			.animate({opacity: "hide", left: "210"}, "fast")
			.removeClass('vipBubbleFocus')
			.addClass("vipBubbleBlur");
	},
	show: function(_element, _type, h, v){
		$j.log("show()"); /////////////////////////////////////////////////
		var $this = $j(_element);
		var type = $this.hasClass('isError') ? 'oups': 'info';
		Bubble.hideAllErrors( $this.parents('.vipGradientBody') );
		var parent = $this.removeClass('vipBubbleBlur')
						.addClass("vipBubbleFocus")
						.parent();
		if (typeof arguments[4] != "undefined") {
			parent = $j(parent).parent();
		}
		// pas de bulle d'erreur que des bulles d'infos
		var type = _type // oups /info / oups_minor
		//type = 'oups';
		
		$j.log("type = " + type); /////////////////////////////////////////////////
		if(h) parent.find("div.bubbleTxt_horizontal_"+type).animate({opacity: "show", left: "190"}, "fast");
		if(v) parent.find("div.bubbleTxt_vertical_"+type).animate({opacity: "show", top: "705"}, "fast");
	},
	showRight: function(){
		$j.log("showRight()"); /////////////////////////////////////////////////
		var $this = $j(this);
		var type = $this.hasClass('isError') ? 'oups': 'info';
		if(($j('#signupsubmitted').text() == 'true') || ($j('#signuplocation').text() != 'landing')){
			$j.log("$j(this).attr('id') = '" + $j(this).attr('id') + "'"); /////////////////////////////////////////////////
			Bubble.show($this, type, 1, 1);
		}
	},
	showLeft: function(){
		$j.log("showLeft()"); /////////////////////////////////////////////////
		var $this = $j(this);
		var type = $this.hasClass('isError') ? 'oups': 'info';
		Bubble.show($this, type, 1, 1, "parent");
	},
	showBottom: function(){
		$j.log("showBottom()"); /////////////////////////////////////////////////
		var $this = $j(this);
		var type = $this.hasClass('isError') ? 'oups': 'info';
		Bubble.show($this, type, 0, 1);
	},
	/*
	showForce: function(_element, _type){
		$j.log("showForce()"); /////////////////////////////////////////////////
		var $this = $j(_element);
		var type = _type;
		Bubble.show($this, type, 1, 1);
	},
	*/
	hide: function(_element, _type, h, v){
		var $this = $j(_element);
		var parent = $this.removeClass('vipBubbleFocus')
						.addClass("vipBubbleBlur")
						.parent();
		if (typeof arguments[4] != "undefined") {
			parent = $j(parent).parent();
		}
		// pas de bulle d'erreur que des bulles d'infos
		var type = _type // oups /info / oups_minor
		//type = 'oups';
		if(h) parent.find("div.bubbleTxt_horizontal_"+type).animate({opacity: "hide", left: "210"}, "fast");
		if(v) parent.find("div.bubbleTxt_vertical_"+type).animate({opacity: "hide", top: "705"}, "fast");
	},
	hideRight: function(){
		var $this = $j(this);
		var type = $this.hasClass('isError') ? 'oups': 'info';
		Bubble.hide($this, type, 1, 1);
	},
	hideLeft: function(){
		var $this = $j(this);
		var type = $this.hasClass('isError') ? 'oups': 'info';
		Bubble.hide($this, type, 1, 1, "parent");
	},
	hideBottom: function(){
		var $this = $j(this);
		var type = $this.hasClass('isError') ? 'oups': 'info';
		Bubble.hide($this, type, 0, 1, "parent");
	},
/*
	hideForce: function(_element,_type){
		var $this = $j(_element);
		var type = type // oups /info / oups_minor
		Bubble.hide($this, type, 1, 1);
	},
*/
	hideAllErrors: function(container){
		// on cache toutes les bubbles Erreurs
		$j("div.bubbleTxt_horizontal_oups,div.bubbleTxt_vertical_oups", container).hide();
	},
	showTabError: function(tabName){
		// pas de bulle d'erreur que des bulles d'infos
		//$j('.' + tabName ).siblings('div.bubbleTxt_horizontal_oups,div.bubbleTxt_vertical_oups').show();
		$j('.' + tabName ).siblings("div.bubbleTxt_horizontal_oups").animate({opacity: "show", left: "190"}, "fast");
		$j('.' + tabName ).siblings("div.bubbleTxt_vertical_oups").animate({opacity: "show", top: "705"}, "fast");
	},
	hideAllInfos: function(container){
		// on cache toutes les bubbles Infos
		$j("div.bubbleTxt_horizontal_info,div.bubbleTxt_vertical_info", container).hide();
	},
	hideAllBubbles: function(){
		// on cache toutes les bubbles!
		Bubble.hideAllErrors();
		Bubble.hideAllInfos();
	},
	init: function(){
		$j("select,textarea,input[type!=submit]")
			.each( Bubble.findAndConstruct );
		$j("#vipColRightMonCompte")
			.find("select,input[type!=submit]")
			.focus(Bubble.showRight)
			.blur(Bubble.hideRight);
		$j("#vipLandingBottomLeft")
			.find("select,input[type!=submit]")
			.focus(Bubble.showRight)
			.blur(Bubble.hideRight);
		$j("#vipColRightMesPhotos")
			.find("select,input[type!=submit]")
			.focus(Bubble.showLeft)
			.blur(Bubble.hideLeft);
		$j(".vipPartTextarea")
			.find("textarea")
			.focus(Bubble.showBottom)
			.blur(Bubble.hideBottom);
		/*
		$("#vipPhoto1").focus(Bubble.showBottom)
			.blur(Bubble.hideBottom);
		*/
	}
};

/*****************************************************/
/***                    Tabs                       ***/
/*****************************************************/

var Tabs = {
	toString:'Tabs',
	lastTab: '',
	visited: {},
	saved: {},
	init: function(tabToShow){
		Tabs.show(Signup.lastTab);
	},
	show: function( tabToShow ){
		Tabs.lastTab = tabToShow;
		Tabs.visited[tabToShow] = tabToShow;
	},
	isVisited: function(tab){
		return Tabs.visited[tab] ? true: false;
	},
	isSaved: function(tab){
		if( typeof tab == 'undefined')
			var tab = Tabs.lastTab;
		return Tabs.saved[tab] ? true: false;
	},
	setVisited: function(){
		return Tabs.visited[Tabs.lastTab] = Tabs.lastTab;
	},
	setSaved: function(){
		return Tabs.saved[Tabs.lastTab] = Tabs.lastTab;
	},
	landing: {
		show: function(){
			Tabs.show('landing');
		}
		,
		out: function(){
			if(Signup.lastTab == 'landing')return;
		}
	}
};


/*****************************************************/
/***                   Signup                      ***/
/*****************************************************/
var Signup = {
	toString:'Signup',
	minLimitTextarea: {
		"vipWhoIam"		: 100,
		"vipMyIdeal"	: 100,
		"default"		: 200
	},
	neededTextarea: {
		"vipWhoIam"		: 1,
		"vipMyIdeal"	: 1
	},
	maxLimitTextarea: 2000,
//	regExp: /^[^<>~"'&\(\)=Â°\+~#\{\}\[\]|\\`\^Â¨Â£\$Ã¸%\*,\?;:\/!Â§]*$/i,
//	// le moins ny est pas ex: jean-marc_ \- ni le underscore _ ' &
//	regExp : /^([\w\-]+\.)*[\w\-]+$/i
//	regExp : /^([\w\p{L}\-]+\.)*[\w\p{L}\-]+$/i,
	regExp : /^([\wáàâäéèêëíìîïóòôöúùûüÿçñÁÀÂÄÉÈÊËÍÌÎÏÓÒÔÖÚÙÛÜŸÇÑ\-]+\.)*[\wáàâäéèêëíìîïóòôöúùûüÿçñÁÀÂÄÉÈÊËÍÌÎÏÓÒÔÖÚÙÛÜŸÇÑ\-]+$/i,
 /*    accepte : alphanumerique, caracteres accentues, -_ et . non contigu, ni au debut, ni a la fin.  */
	points: {
		"jq_account_my_kvk"						: 2,
		"jq_account_my_firstname"				: 2,
		"jq_account_my_pseudo"					: 2,
		"jq_account_my_pwd"						: 2,
		"jq_account_my_name_fac"				: 0,
		"jq_photos_my_ann_whoami"				: 7,
		"jq_photos_my_ann_majormoments_fac"		: 0,
		"jq_account_my_search_age_mini"			: 1,
		"jq_account_my_search_age_maxi"			: 1,
		"jq_photos_my_search_ideal"				: 7,
		"jq_photos_my_studies"					: 2,
		"jq_photos_my_training"					: 2,
		"jq_photos_my_job"						: 2,
		"jq_photos_my_company_fac"				: 0,
		"jq_photos_my_birth_day"				: 0,
		"jq_photos_my_birth_month"				: 1,
		"jq_photos_my_birth_year"				: 1,
		"jq_photos_my_nationality"				: 2,
		"jq_photos_my_marital"					: 2,
		"jq_photos_my_haschildren"				: 2,
		"jq_photos_my_livewith"					: 2,
		"jq_photos_my_country"					: 0,
		"jq_photos_my_area"						: 0,
		"jq_photos_my_zipcode"					: 0,
		"jq_photos_my_town"						: 2,
		"jq_photos_my_height"					: 2,
		"jq_photos_my_appearance"				: 2,
		"jq_photos_my_haircolor"				: 2,
		"jq_photos_my_eyes"						: 2,
		"jq_photos_my_personality"				: 2,
		"jq_photos_my_look"						: 2
	},
	display:{
		good: function(self){
			self.removeClass('isError')
				.addClass('isGood')
				.parent('DIV.vipLine').find('label')
				.css("background-position","0 -460px")
		},
		error: function(self){
			$j.log("display.error()"); //////////////////////////////////////////////////////
			self.removeClass('isGood')
				.addClass('isError')
				.parent('DIV.vipLine').find('label')
				.removeAttr("style")
		},
		goodLi: function(self){
			self.parent('li')
				.css("background-position","0 -460px");
		},
		errorLi: function(self){
			self.parent('li')
				.removeAttr("style")
		}
	},
	onBlur:function(){
		// on supprime les espace (trim) debut/fin
		this.value =  this.value.replace(/^\s+/, "").replace(/\s+$/, "");
		// on compresse les sauts de lignes multiple (mac/windows/linux)
		this.value =  this.value.replace(/\r{2,}/g, "\n\n").replace(/(\r\n){2,}/g, "\n\n").replace(/\n{2,}/g, "\n\n");
		// on compresse les espace multiple
		this.value =  this.value.replace(/[ ]+/g, " ");
		// on recupere la class de gauche [0]
		var jq_className = this.className.split(" ")[0];
		//alert(jq_className);
		// on recupere le nom de l'onglet split("_")[1]
		var hash = jq_className.split("_");
		//alert(hash);
		//alert(hash[1]);
		//var tab = hash[1];
		hash.shift();						// # jq
		//var tab 		= hash.shift();		// # profil
		var tab = 'landing';
		//alert(tab);
		// on recupere le nom de l'element
		//var elementName = hash.join('_');				// # my_ann_whoami
		var elementName = hash.join('_').substring(3)	// # ann_whoami
		// cas ou country[], zicode[] etc.
		if( elementName.substr(elementName.length -2) == '[]' )
			elementName = elementName.substring(0, elementName.length-2);
		// ex Account.check.email();
		var tab_object = window[ $j.camelize( tab ) ];
		// on supprime la variable du tableau
		delete tab_object['sendData'][jq_className];
		delete Signup['data'][jq_className];
		var checkFunction = tab_object['check'][elementName];
		var isOk = false;
		if(checkFunction)
			isOk = checkFunction();
		var self = $j(this);
		//on ne teste pas ceux qui sont facultatif
/*
		if(isOk){
			Signup.display.good(self);
		}
		else {
			// is Error
			$j.log('is Error');
			Signup.display.error(self);
		}
*/

		if( $j('#signupsubmitted').text() == true )		//if( Signup.errors.isActivated() )
		{
			if( isOk ) {
				Signup.display.good(self);
			}
			else{
				//if( Tabs.isSaved() )	//on affiche l'erreur que si il a appuyer sur le bouton enregistrer du present onglet
				//{
					$j.log("Signup.display.error(self) !!!!!!"); //////////////////////////////////////////////////////
					// is Error
					Signup.display.error(self);
				//}
			}
		}

		Bubble.hideAllBubbles();
		//Signup.updatePercent();	// on met a jour la barre
	},
	init: function(){
		$j.log('init');
		//on calcule le num d'element de profil
		//this.lastTab = null;
		//this.tabs = ['profil_','portrait_','search_','parcours_','photos_'];
		this.elements = Signup.element.getAll(true);
		this.elements_len= this.elements.length;
		this.elements_valid_len= 0;
		this.data = {};
		this.sendData = {};
		//this.errors.desactivate();
	},
	element: {
		getLength: function(status){
			var status = status || false;
			Signup.elements		= Signup.element.getAll(status);
			return Signup.elements_len	= Signup.element.length;
		},
		getName: function(startName, withFac){
			withFac = typeof withFac == 'undefined' ? false: true;
			var total = $j('[class^='+startName+']').length;
			var tmp = {};
			var $elements = withFac ? $j('[class^='+startName+']'): $j('[class^='+startName+']:not([class*=_fac])') ;
			$elements.each(function(i){
				classN = this.className.split(" ")[0]
				tmp[ classN ]=null;
			});
			var names=[];
			for(var e in tmp){
				names.push(e);
			}
			//console.log('>' , names)
			return names;
		},
		getAll: function(force, withFac){
			if( !force && typeof Signup.elements == 'object' ){
				return Signup.elements;
			}
			withFac = typeof withFac == 'undefined' ? false: true;
			var tmp = {};
			var names=[];
			var elements = Signup.tabs;
			//alert('nb elements: '+elements.length);
			for(var e in elements){
				// on suspend ...
				var $elements = withFac ? $j('[class^=jq_account]'): $j('[class^=jq_account]:not([class*=_fac])') ;
				//var $elements = $j('[class^=jq_'+elements[e]+']:not([class*=_fac])') ;
				$elements.each( function(i){
						// on ne prend que le 1er className;
						tmp[ this.className.split(' ')[0] ]=null;
					}
				);
			}
			for(var e in tmp){
					names.push(e);
			}
			return names;
		},
		countAll: function(){
			var arr = Signup.element.getAll(true);
			var total = 0;
			for( var e in Signup.points)
				total += Signup.points[e];
			return total;
		},
		countValid: function(){
			Signup.elements_valid_len = 0;
			var data = Signup.data
			for( var e in data){
				if( e.substr(e.length-4) != '_fac' ){
					Signup.elements_valid_len += Number( Signup.points[e] );
				}
			}
			return Signup.elements_valid_len;
		}
	},
	errors: {

		activate:function(tab){
			Signup.checkIfSend=true;
		},
		desactivate: function(){
			Signup.checkIfSend=false;
		},
		isActivated: function(){
			return Signup.checkIfSend;
		},
		timer_call: function(activated , obj, func, params){
			var tmp = $j.timeStart( func );
			var $return = obj[func].apply(this,params);
			$j.timeStop(tmp);
			return $return;
		},

		showAll: function(){
			var $_tmp = {};
			var checked_obj = Signup.errors.get();
			var errors_obj = checked_obj.errors;
			var valids_obj = checked_obj.valids;
			Bubble.hideAllErrors();
			// on reset les erreurs
			$j('.isError').removeClass('isError').removeAttr("style");
			// on reset les valids
			$j('.isGood').removeClass('isGood').removeAttr("style");
			$j.each(errors_obj, Signup.errors.showTab);
			$j.each(valids_obj, Signup.errors.showTabOk);
			//console.log( errors_obj );
			return errors_obj;
		},
		showTab: function(tab, tab_errors){
			// flag pour afficher le 1er tab
			var my_ann_parsed=false;
			//if( Tabs.isVisited(tab)==false )
			if( Tabs.isSaved(tab)==false )
				return;
			// affiche TOUTES les erreurs!!!
			for(var e in tab_errors){
				var error = tab_errors[e];
				// oblige d'utiliser cette notation a cause des []...
				var self = $j("[class*='"+error+"']")
				$j.log("Signup.display.error(self) in Signup.errors.showTab()"); //////////////////////////////////////////////////////
				Signup.display.error(self);
				/*
				// gestion des ï¿½tapes (chemin de fer)
				var my_ann_pos = error.indexOf('_my_ann_');
				if( my_ann_pos >-1 ){
					alert('Signup:showTab > my_ann_pos: ' + my_ann_pos);
					var li_search = error.substring(my_ann_pos);
					alert('Signup:showTab > li_search: ' + li_search);
					var $tab = $j("li[id*="+li_search+"]>a")
					
					Signup.display.errorLi($tab);
					// recupere le href pour le dernier chiffre...
					var num_tab= $tab.attr('href').substring(-1);
					if(my_ann_parsed==false){
						$j(".vipSignupColumnLeft > ul").tabs("select", num_tab );
						// on flag ...
						my_ann_parsed=true;
					}
				}
				*/
			}
			//console.log( tab_errors[0] );
			Bubble.showTabError(tab_errors[0]);
		},
		showTabOk: function(tab, tab_valids){
			// on commente pour checker tous les valider!!!
			for(var e in tab_valids){
				var valid = tab_valids[e];
				// oblige d'utiliser cette notation a cause des []...
				var self = $j("[class*='"+valid+"']");
				Signup.display.good(self);
				var my_ann_pos = valid.indexOf('_my_ann_');
				if( -1 < my_ann_pos ){
					
					var li_search = valid.substring(my_ann_pos);
					var self = $j("li[id*="+li_search+"]>a")
					
					var localData = $j('textarea.'+valid).val();
					if ( ( Signup.points[valid] > 0 ) || ( ( 0 == Signup.points[valid] ) && ( localData.length > 0 ) ) ) {
						Signup.display.goodLi(self);
					}
				}
			}
		},
		get: function(){
			$j.log("Signup.errors.get()");
			//var data = Signup.data;
			var data = Signup.checkAll();
			//retrieve array() of valid elements
			//var validElement = ['jq_account_my_name_fac', 'jq_parcours_my_company_fac', 'jq_parcours_my_professional_fac'];
			var validElement = [];
			$j.each( data,  function(val){
				//on enleve les _fac
				//if( val.substr(val.length-4)!='_fac' )
				validElement.push(val);
			});
			//retrieve the difference ... so the ones in errors
			var errors = $j.array_diff( Signup.element.getAll(true, true), validElement );
			var obj = { errors: errors, valids: validElement }
			var return_obj = { errors: {}, valids: {} }
			for(var type in obj){
				for(var e in obj[type]){
					var elem = obj[type][e];
					// format:
					// jq_account_my_kvk
					var prefix_arr = String(elem).split("_my_");
					if( prefix_arr ){
						var prefix = prefix_arr[0].substr(3);
						if( typeof return_obj[type][prefix] == 'undefined')
							return_obj[type][prefix] = [];
						return_obj[type][prefix].push(elem);
					}
				}
			}
			return return_obj;
		},
		getTab: function(obj){
			//retrieve array() of valid elemnts
			var validElement = [];
			$j.each( Signup.data,function(i,val){ validElement.push(i);});
			//retrieve the difference ... so the ones in errors
			var obj = typeof obj=='object'?obj:eval(obj);
			var hasError = $j.array_diff( Signup.element.getName(obj.prefix, true), validElement );
			// supprime si present
			$j('a.vipSignupNavChoice_' + obj.prefixName + 'a.vipSignupNavChoiceOk_' + obj.prefixName )
				.removeAttr('class')
				.addClass('vipSignupNavChoice_' + obj.prefixName);
			if( hasError.length == 0){
				$j('a.vipSignupNavChoice_' + obj.prefixName )
					.removeAttr('class')
					.addClass('vipSignupNavChoiceOk_' + obj.prefixName);
			}
			return hasError;
		},
		getTabOk: function(obj){
			//retrieve array() of valid elemnts
			var validElement = [];
			$j.each( Signup.data,function(i,val){ validElement.push(i);});
			//retrieve the difference ... so the ones in errors
			var obj = typeof obj=='object'?obj:eval(obj);
			// supprime si present
			$j('a.vipSignupNavChoice_' + obj.prefixName + 'a.vipSignupNavChoiceOk_' + obj.prefixName )
				.removeAttr('class')
				.addClass('vipSignupNavChoice_' + obj.prefixName);
			if( hasError.length == 0){
				$j('a.vipSignupNavChoice_' + obj.prefixName )
					.removeAttr('class')
					.addClass('vipSignupNavChoiceOk_' + obj.prefixName);
			}
			return validElement;
		}

	},

	updatePercent: function(){
		var len 		= Signup.element.countAll();
		var valid_len 	= Signup.element.countValid();
		var num = Number( valid_len );
		var width = 0;
		if( num>0){
			num = Math.ceil( (num*100)/len );
			//272 px
			//longueur = $j('.vipProfilCompletion').width();
			var longueur = 272;
			var width =Math.ceil( (num/100)* longueur );
		}else{
			num = 0;
		}
		$j('P.txtCompletion>SPAN').text(num);
		$j('DIV.vipLevelCompletion').animate({ width: width+"px"} );
	},
	populateForm: function(){
		var json_data = Signup.cookie.get();
		if( json_data == undefined || json_data['data'] == undefined ||  json_data['data'] == '' ){
			Signup.data = {};
		}
		else{
			// on a deja rempli une premier efois !!
			//on la gestion d'erreurs
			//Signup.errors.activate();
			Signup.data		= json_data['data'];
			Signup.lastTab	= json_data['tab'];
			for(var e in Signup.data){
				var val = Signup.data[e];
				
				$j("[class^='"+e+"']:not(:checkbox)").each(function(){
					this.value = val;
				});
				$j("[class^='"+e+"']:checkbox").each(function(){
					if( this.value == val)
						this.checked=true;
				});
			}
			Signup.save();
			Signup.errors.showAll();
		}
	},


	setTabOk: function(){
		var gotoPage = [];
		var fullPage = [];
		function array_swap(pos,a){
			var len = a.length;
			var nextPos = (pos+1)%len;
			var b = a.slice(nextPos,len);
			if(nextPos>0){
			 var c = a.slice(0,nextPos);
			 for(var e in c)
			 	b.push( c[e] );
			}
			return b;
		}
		var len = Signup.tabs.length
		var pos = $j.inArray(Tabs.lastTab, Signup.tabs);
		// goto The first error page
		var tabs = Signup.tabs
		// goto The next error page
		var tabs = array_swap(pos,tabs);
		$j.each( tabs , function(i,tab){
			// on recupere les erreurs
			var obj = $j.getObject(tab);
			var errors_arr = Signup.errors.getTab(obj);
			
			if( errors_arr.length <=0 ) {
				fullPage.push(tab);
			}
			else{
				gotoPage.push(tab);
			}
		});
		//Signup.gotoFirstErrorPage(gotoPage,fullPage);
		Signup.gotoPage(gotoPage,fullPage);
	},
	gotoPage: function(gotoPage,fullPage){
		if(gotoPage.length>0 && $j.inArray(Tabs.lastTab, fullPage)>-1 ){
			Tabs[ gotoPage[0] ].show();
		}
	},

	save: function(){
		var sendData = Signup.saveData();
		// mise a jour de la barre
		//Signup.updatePercent();
		// mis a jour des pictos et redirection
		//Signup.setTabOk();
		return sendData;
	},
	saveData: function(){
		//on set l'action saved sur l'onglet actuel
		//Tabs.setSaved();
		Signup.sendData = {};
		//Signup.sendData.tab= Tabs.lastTab;
		Signup.sendData.data= Signup.checkAll();
		Signup.data= Signup.sendData.data;
		//Signup.cookie.set(Signup.sendData); ///////////////////////////////////////////////////////////////////////////////////////////////////////////
		return Signup.sendData;
	},
	checkAll: function(){
		var data = {};
		//var Signup_tabs_len= Signup.tabs.length ;
		/* Pas de tab
		for(var e=0;e<Signup_tabs_len;e++){
			var obj = $j.getObject(Signup.tabs[e]);
			if( obj['checkAll'] ){
				$j.extend( data , obj.checkAll() );
			}
		}
		*/
		var obj = $j.getObject('landing');
		$j.extend( data , obj.checkAll() );
		return data;
	},
	submit: function(){
		//var sendData = Signup.save();
		$j('#signupsubmitted').text('true');
		// pour activer l'affichage des erreurs
		//Signup.errors.activate();
		var Errors = Signup.errors.showAll();
		// si tous les champs sont remplis on fais notre requete
		var hasErrors = ($j.countObj(Errors) >0);
		if( !hasErrors ){
			//noQuit = true;
			_save = function(newParam){
				Signup.sendData = {};
				
				
				Signup.sendData.data= Signup.checkAll();
				Signup.data= Signup.sendData.data;
				var ajaxargs_args = new Array();
				ajaxargs_args["email"] = $j('#vipMyEmail').val();
				$j.log("email ! = " + ajaxargs_args["email"]);
				ajaxargs_args["majeurCGU"] = $j('#vipCguAccept:checked').length;
				ajaxargs_args["vipCouponId"] = $j('#vipCouponId').val();
				ajaxargs_args["mtcmk"]=$j('#vipMtcmk').val();
				ajaxargs_args["optin"]=$j('#vipMyOptin:checked').length;
				
				param = {ajaxfunc:"sendLandingInscription", ajaxargs:ajaxargs_args};
				
				$j.log("param.ajaxargs[\"email\"] = " + param.ajaxargs["email"]);
				ajaxargs = $j.getArgs(param);
				$j.log("ajaxargs = " + ajaxargs);
				$j.ajax({
					type: "POST",
					url: "/ajax/ajax.php",
					data: ajaxargs,
					success: function(msg){
						if(msg!='ERROR'){
							// on poste le formulaire ! ///////////////////////////////////////////////////////////
							$j("#vipLandingForm").submit();
						}
						else{
							Signup.errors.showAll();
						}
					}
				});
			}
			_save();
		}
		else{
			$j(Errors).each(function(tab, tab_errors){
				for(var e in tab_errors){
					var error = "" + tab_errors[e];
					var firstError = error.split(",");
					if( firstError[0] ) {
						$j("." + firstError[0] ).focus();
					}
				}
			});
		}
	},
	cookie: {
		get: function(){
			var returnAjax = false;
			$j.ajax({
				type: "POST",url: "/ajax/ajax.php",
				dataType: "json",
				async:false,	// obligatoire pour le retour
				data: {
					ajaxfunc: 'get_cookie',
					ajaxargs: null
				},
				success: function(obj){
					if( obj['action'] && obj['action'] != 'reset' ){
						//
					}
					else{
						returnAjax = obj;
					}
				}
			});
			if( returnAjax['data'] )
				return returnAjax;
			else
				return {tab: 'landing', data: returnAjax};
		},
		set: function(sendData) {
			
			var newParam = sendData.data
			$j.ajax({
				type: "POST",
				url: "/ajax/ajax.php",
				dataType: "json",
				data: $j.getArgs({ajaxfunc: 'save_cookie', ajaxargs: [newParam]}),
				success: function(obj){
					//if( obj['action'] && obj['action'] == 'reset' )
					//if( obj['action'] && obj['action'] == 'success' )
				}
			});
			
		},
		get_old: function(){
			//sendData = $j.toJSON(sendData);
			var $vip  = $j.parseJSON( $j.cookie('vip') );
			if( $vip === null )
				return null;
			var chunk_len = $vip.chunk||0;
			var cookieData = "";
			// obligÃ© a cause des caractereres encodÃ© par encodeURIComponent et decoupÃ© ensuite
			for(var i=0;i<chunk_len;i++){
				cookieData += $j.cookie('vip_signup'+i,undefined, {encoded:true});
			}
			cookieData = decodeURIComponent(cookieData);
			return {tab: $vip.tab , data: $j.parseJSON(cookieData)};
		},
		set_old: function(sendData) {
			// enregistrement des donnees on decoupe nos donnees en portion <4000
			// une marge de 500 semble etre acceptable
			var data = $j.toJSON(sendData.data);
			// attention on encode URI puis on utilise encoded:true;
			var chunks = encodeURIComponent(data).match(RegExp('.{1,'+3500+'}','g'));
			//chunks = sendData.match(RegExp('.{1,'+3500+'}','g'));
			var chunks_len=chunks.length
			for(var i=0; i<chunks_len;i++){
				data = chunks[i];
				if( chunks[i+1] ){
					// encodeURIComponent transform certains caracteres en hexa
					// ex: %20, %3F etc
					// on recherche si la valeur hexa n'est pas coupee si oui on
					if( data.length - data.lastIndexOf('%') < 3 ){
						chunks[i+1] = data.substring( data.lastIndexOf('%') ) + chunks[i+1];
						data 		= data.substring( 0, data.lastIndexOf('%') );
					}
				}
				$j.cookie( 'vip_signup' + i, data, {expires:1500, encoded:true} );
			}
			$j.cookie( 'vip', $j.toJSON( {tab:sendData.tab,chunk:chunks_len} ), {expires:1500} );
		},
		del: function(){
			$j.cookie( 'vip', null);
			for(var i=0; i<10;i++)
				$j.cookie( 'vip_signup' + i, null);
		}
	}
};

/*****************************************************/
/*                     Landing                       */
/*****************************************************/
var Landing = {
	toString: 'Landing',
	sendData: {},
	init: function(){
		// init variables
		this.sendData	= {}
		this.prefixName	= 'account';
		this.prefixStart= 'jq_' +this.prefixName+'_';
		this.prefix		= 'jq_' +this.prefixName+'_my_';
		this.prefix_len	= this.prefix.length;
		this.elements = Signup.element.getName(this.prefix);
		this.elements_len = this.elements.length;
		if(navigator.appVersion.indexOf("Mac")!=-1){
			$j('#vipContainer').find('#vipNewHeaderTexte').css('font-size','11px');
			$j('#vipContainer').find('.vipNewHeaderTexteTwo ').css('margin-left','58px');
		}
	},
	initData: function(){
		this.sendData ={};
	},
	checkAddData: function(name, data){
		if(String(data).match(/^\d+$/) || data.length>5 ){
			this.addData( name, data);
			return true;
		}
	},
	addData: function(name, data){
		this.sendData[name] = data;
		Signup.data[name] = data;
	},
	checkAll:function(){
		// on reinitialise tout!!
		this.initData();
		Landing.check.email();
		Landing.check.search_age();
		Landing.check.kvk();
		Landing.check.firstname();
		Landing.check.pseudo();
		Landing.check.pwd();
		Landing.check.cgu();
		Landing.check.optin();
		return this.sendData;
	},
	check: {
		input: function(element, minChar, maxChar, RegExp){
			var isOk = false;
			var name = Landing.prefix+element
			var minChar = typeof minChar == 'undefined' ? 0:  minChar;
			var maxChar = typeof maxChar == 'undefined' ? Signup.maxLimitTextarea:  maxChar;
			var RegExp = typeof RegExp == 'undefined' ? '':  RegExp;
			$j('input.'+name).each(function(){
				if (this.value.length >= minChar && this.value.length <= maxChar && this.value.match(RegExp) ) {
					Landing.addData(name, this.value);
					isOk = true;
				}
				
				//console.log( this.value.match(RegExp))
			});
			return isOk;
		},
		select: function(element){
			// kvk est utilise
			var isOk = false;
			var name = Landing.prefix+element
			$j('select.'+name).each(function(){
					var kvk =  this.value == 1 ? 'HF': 'FH';
					var $optionMarital  = $j('#my_marital'+kvk).html();
					var $optionLiveWith = $j('#my_livewith'+kvk).html();

					$j('#vipMyMarital').html( $optionMarital);
					$j('#vipMyLivewith').html( $optionLiveWith);
					
					isOk = Landing.checkAddData(name,this.value);
			});
			return isOk;
		},
		search_age: function(){
			var age_mini=$j('select.'+Landing.prefix+'search_age_mini').val();
			var age_maxi=$j('select.'+Landing.prefix+'search_age_maxi').val();
			if(age_mini != -1 && age_maxi != -1 && age_mini<age_maxi){
				Landing.addData(Landing.prefix+'search_age_mini', age_mini);
				Landing.addData(Landing.prefix+'search_age_maxi', age_maxi);
				return true;
			}
			else{
				return false;
			}
		},
		kvk: function(){
			return Landing.check.select('kvk');
		},
		firstname: function(){
			var RegExp = Signup.regExp
			return Landing.check.input('firstname',2,60,RegExp);
		},
		pseudo: function(){
			var $elem = $j('input.'+Landing.prefix+'pseudo');
			var minChar = 4;
			var maxChar = 50;
			var RegExp = Signup.regExp;
			
			if ($elem.val().length >= minChar && $elem.val().length <= maxChar && $elem.val().match(RegExp) ) {
				$j.log("RegExp is OK ! :)"); ///////////////////////////////////////////////
				var params = {
						ajaxfunc: 'checkPseudoAvailable'
						,ajaxargs: $elem.val()
				}
				Landing.addData(Landing.prefix+'pseudo', $elem.val());
				$j.ajax({
					type: "POST",
					url: "/ajax/ajax.php",
					data:params,
					async: false, 
					//beforeSend: function() {},
					success: function(msg){
						if (msg == '') {
							Bubble.hidePseudo();
						}else{
							Bubble.showPseudo(msg);
							// on met le champ a vide et on reverifie le tout via le trigger
							$elem.val('').blur();
							Signup.display.error( $elem );
						}
					},
					error: function(e){
						$j.log("checkPseudoAvailable error : "+e);
					}
				});
				return true;
			}
			else
				$j.log("RegExp is KO ! :("); ///////////////////////////////////////////////
				return false;
		},
		email: function(){
			$j.log("Landing.check.email()"); ///////////////////////////////////////////////
			$j.log("$j('input.'+Landing.prefix+'email').val() = '" + $j('input.'+Landing.prefix+'email').val() + "';"); ///////////////////////////////////////////////
			if($j('input.'+Landing.prefix+'email').val() != ''){
				var params={
					 ajaxfunc: 'checkEmailAvailable',
					 ajaxargs: $j('input.'+Landing.prefix+'email').val()
				};
				$j.log("Landing.check.email before addData"); ///////////////////////////////////////////////
				Landing.addData(Landing.prefix+'email', $j('input.'+Landing.prefix+'email').val());
				$j.log("Landing.check.email after addData"); ///////////////////////////////////////////////
				$j.ajax({
					type: "POST",
					url: "/ajax/ajax.php",
					data:params,
					async: false, 
					success: function(msg){
						$j.log("Landing.check.email ajax success !"); ///////////////////////////////////////////////
						if (msg == '') {
							Bubble.hideEmail();
						}
						else {
							Bubble.showEmail(msg);
							// on met le champ a vide et on reverifie le tout via le trigger
							var $elem = $j('input.'+Landing.prefix+'email')
							$elem.blur();
							Signup.display.error( $elem );
						}
					},
					error: function(){
						$j.log("Landing.check.email ajax ERROR !"); ///////////////////////////////////////////////
					}
				});
				return true;
			}
			else
				return false;
		},
		cgu: function(){
			var $return = $j('input#vipCguAccept').is(':checked');
			if($return)Landing.addData(Landing.prefix+'cgu', $return);
			return $return;
		},
		optin: function(){
			var $return = $j('input#vipOptinAccept').is(':checked');
			if($return)Landing.addData(Landing.prefix+'optin', $return);
			return $return;
		},
		
		pwd: function(){
			var RegExp  = /^[\da-z]+$/i;
			return Landing.check.input('pwd', 4, 15, RegExp);
		}
	}
};

$j(document).ready(function() {
	
	/* gestion du slide de l'image */
	/* JQUERY CYCLE */
	if($j.browser.msie == false || parseInt($j.browser.version) != 6){
		$j('.slideshow').cycle({
			fx: 'fade',
			speed: 2000,
			timeout: 6000
		});
	}
	
	/* gestion du mot de passe */
	$j("#vipForgotPass").click(function() {
		$j("#vipContainerLandingMdpSended").fadeOut();
		$j("#vipContainerLandingMdp").fadeIn();
	});
	
	$j("#vipSendPass").click(function() {
		$j("#vipContainerLandingMdp").fadeOut();
		$j("#vipContainerLandingMdpSended").fadeIn();
	
		var ajaxargs_args = new Array();
		ajaxargs_args["email"] = $j( '#vipForgotPassEmail' ).val();
		var param = {ajaxfile:"sendForgottenPassword", ajaxfunc:"sendForgottenPassword", ajaxargs:ajaxargs_args};
		ajaxargs = $j.getArgs(param);
		$j.ajax({
			type: "POST",
			url: "/ajax/ajax.php",
			data: ajaxargs
		});
		setTimeout('$j("#vipContainerLandingMdpSended").fadeOut()',5000);
	});
	
	//trapping du Enter press sous SAFARI
	if ($j.browser.safari) {
		function keyEnterAction(e){
			//e.target.tagName, e.target.nodeName
			//e.srcElement.tagName, e.srcElement.nodeName
			if( e.srcElement.tagName == "TEXTAREA")
				return true;
			if(e.keyCode == 13 || e.keyCode == 3){
				//Signup.submit();
				return false;
			}
		}
		$j().keydown(keyEnterAction);
		//$j().keyup(keyEnterAction);
	}
	
	$j("h1.jq_current_title").css("background-position","0px -39px"); /* Positionnement de l'image du titre sur ACCOUNT*/  
	
	Bubble.init();
	Landing.init();
	Signup.init();
	Tabs.init();
	
	Signup.tabs = ['account', 'landing'];
	// gestion du submit
	$j('a.vipBtnB1,input#submit,div#vipLandingFormBtn').click(Signup.submit);
	// gestion du onBlur
	$j('select, input[type!=submit],textarea').blur( Signup.onBlur );
	
	$j("#vipLandingSubmit").click(function() {
		$j('#vipLoginHeader').submit();
	});
	
/*
	// logique du prompt de reprise d'inscription
	noQuit = false;
	
	$j("#vipLandingSubmit").click(function() {
		noQuit = true;
		$j('#vipLoginHeader').submit();
	});
	
	$j(".vipFooterContent > a").click(function() {
		noQuit = true;
	});
	
	$j(".langindfooterseo > a").click(function() {
		noQuit = true;
	});
*/
	
	/*
	window.onbeforeunload = function() {
		if(!noQuit)
			return false;
	}
	*/

});
