/*--------------------------------------------------------------

__  __ `__ \  _ \  ___/  __ `/_  __ \  __ \
_  / / / / /  __/ /__ / /_/ /_  / / / /_/ /
/_/ /_/ /_/\___/\___/ \__,_/ /_/ /_/\____/

--------------------------------------------------------------*/

main = {
	
	initMaillingForm: function(){
		var tE = $('fldEmail');
		tE.store('defaultValue', tE.get('value'));
		tE.addEvent('focus', function(e){
			e.stop();
			var tV = this.get('value');
			if(tV == this.retrieve('defaultValue')) this.set('value', '');
		});
		tE.addEvent('blur', function(e){
			e.stop();
			var tV = this.get('value');
			if(tV == '') this.set('value', this.retrieve('defaultValue'));
		});
	},
	
	/* Mailling form validation and sending
	--------------------------------------------------------------*/
	validateMaillingForm: function(){
		var tE = $('fldEmail');
		var tV = tE.get('value');
		if(tV == tE.retrieve('defaultValue') ){
				this.displayMaillingMsg(dict.get('msg_mailling_email_empty'));			
		}else if(this.validateEmail(tV) == false){
			this.displayMaillingMsg(dict.get('msg_mailling_email_bad'));
		}else{
			this.sendMaillingData();
		}
	},
	
	sendMaillingData: function(){
		var _self = this;
		var tQ = this.getMaillingSendData();		
		var tUrl = this.themePath + "/include/register.php?"+ tQ;

		var myRequest = new Request({url: tUrl, method: 'get', onSuccess: function(mResponse){
			var tE = $('fldEmail');
			tE.set('value', tE.retrieve('defaultValue'));
			_self.displayMaillingMsg(dict.get('msg_mailling_success'),true);
		}}).send();
	},
	
	getMaillingSendData: function(){
		var tQ = $('maillingForm').toQueryString();
		return tQ;
	},
	
	displayMaillingMsg: function(mMsg,isSuccess){
		var tE = $('maillingMsgDisplay');
		tE.setStyle('display', 'block');
		new Fx.Tween(tE).start('opacity', 0, 1);
		tE.set('html', mMsg);
		if(isSuccess == true) tE.addClass('success');
		else tE.removeClass('success');
		
	},
	
	validateEmail: function(str){
		var error = false;
		var at="@";
		var dot=".";
		var lat=str.indexOf(at);
		var lstr=str.length;
		var ldot=str.indexOf(dot);
		/* no [@] -OR- [@] at begining -OR- [@] at the end */
		if (str.indexOf(at)==-1 || str.indexOf(at)==0 || str.charAt(lstr-1)==at) error = true;
		/* no [.] -OR- [.] at begining -OR- [.] at the end */
		if (str.indexOf(dot)==-1 || str.indexOf(dot)==0 || str.charAt(lstr-1)==dot) error = true;
		/* no char after the [@] */
		if (str.indexOf(at,(lat+1))!=-1) error = true;
		/* [.] next to [@] */
		if (str.substring(lat-1,lat)==dot || str.substring(lat+1,lat+2)==dot) error = true;
		/* no [.] after the [@] */
		if (str.indexOf(dot,(lat+2))==-1) error = true;
		/* a [ ] exists */
		if (str.indexOf(" ")!=-1) error = true;
		if(error == false) return true;
		else return false;	
	},
	
	
	
	//***********************************************************
	b_commentToAjax: function(mId, mB){
		if(mB != false){
			tE = this.getElementWithPostId(mId,'.ajaxloader');
			tE.setStyle('display','block');
			tE = this.getElementWithPostId(mId,'.b_comment');
			tE.setStyle('display','none');
		}else{
			tE = this.getElementWithPostId(mId,'.ajaxloader');
			tE.setStyle('display','none');
			tE = this.getElementWithPostId(mId,'.b_comment');
			tE.setStyle('display','block');
		}
	},
	b_commentToClose: function(mId, mB){
		if(mB != false){
			tE = this.getElementWithPostId(mId,'.b_comment');
			tE.addClass('b_close');
		}else{
			tE = this.getElementWithPostId(mId,'.b_comment');
			tE.removeClass('b_close');
		}
	},
	b_commentUpdateCount: function(mId, mV){
		//COMMENTAIRE (0)
		tE = this.getElementWithPostId(mId,'.b_comment');
		tEE = tE.getElement('.open');
		var cLabel = tEE.get('text');
		var i1 = cLabel.lastIndexOf('(');
		var i2 = cLabel.lastIndexOf(')');
		var tS = cLabel.substring(i1+1,i2);
		var tInt = tS.toInt();
		var tV = tInt+mV;
		var sLabel = cLabel.substring(0,i1);
		var tLabel = sLabel+'('+tV+')';
		tEE.set('text',tLabel);
	},
	
	getElementWithPostId: function(mId,mQ){
			var tPost = $('post-'+mId);
			return tPost.getElement(mQ);
	},
	
	/* Ajax Comments
	----------------------------------------------------------------------------------------------------------------------------*/
	toggleAjaxComments: function(mId){
		if(this._commentsToggle.contains(mId) == false){
			this.openAjaxComments(mId);
		}else{			
			this.closeAjaxComments(mId);
		}
	},
	
	//-- openAjaxComments
	//------------------------------------------------------------------------------------
	openAjaxComments: function(mId){
		if(this._commentsToggle.contains(mId) == false){
			this._commentsToggle.push(mId);
			//----
			var _aS = new ActionStack(this);
			var as = [];
				
			as[as.length] = {func:this.b_commentToAjax, param:[mId, true]};
			
			as[as.length] = {func:this.loadCommentsInto, param:[mId, '_getComments_'+mId, _aS], wait:true};
			
			as[as.length] = {func:this.b_commentToAjax, param:[mId, false]};
			as[as.length] = {func:this.b_commentToClose, param:[mId, true]};
			
			as[as.length] = {func:this.injectCommentsWith, param:[mId, '_getComments_'+mId]};
			
			as[as.length] = {func:this.initFieldComments, param:[mId]};
			as[as.length] = {func:this.initValidationComments, param:[mId]};
			
			as[as.length] = {func:this.slideInComments, param:[mId, _aS]};
			
			_aS.setStack(as);
			_aS.start();
		}
	},	
	
	closeAjaxComments: function(mId){
		if(this._commentsToggle.contains(mId) == true){
			this._commentsToggle.erase(mId);
			//---
			var _aS = new ActionStack(this);
			var as = [];
		
			as[as.length] = {func:this.b_commentToClose, param:[mId, false]};
			as[as.length] = {func:this.killValidationComments, param:[mId]};
			as[as.length] = {func:this.slideOutComments, param:[mId, _aS]};
			
			_aS.setStack(as);
			_aS.start();
		}
	},
	
	//-- open/close AjaxComments functions
	//----------------------------------
	loadCommentsInto: function(mId, mDataId, callnext){
		var _self = this;
		var tQ = "id="+mId;		
		var tUrl = this.themePath + "/include/getAjaxComments.php?"+ tQ;
		var myRequest = new Request({url: tUrl, method: 'get', onSuccess: function(mResponse){
			_self[mDataId] = mResponse;
			if(callnext != null) callnext.next();
		}}).send();
	},
	
	injectCommentsWith: function(mId, mDataId){
		var tData = this[mDataId];
		tE = this.getElementWithPostId(mId,'.comments');
		//tE.setStyle('display','block');
		tE.set('html',tData);
	},
	
	initFieldComments: function(mId){	
		var ar = ['name', 'email', 'msg'];
		var lg = ar.length;
		for(var i=0; i<lg; i++){
			var defaultValue = dict.get('comments_'+ar[i]);
			var tE = this.getElementWithPostId(mId,'.'+ar[i]);
			tE.store('defaultValue',defaultValue);
			tE.addEvent('focus', function(e){
				e.stop();
				var tV = this.get('value');
				if(tV == this.retrieve('defaultValue')) this.set('value', '');
			});	
			tE.addEvent('blur', function(e){
				e.stop();
				var tV = this.get('value');
				if(tV == '') this.set('value', this.retrieve('defaultValue'));
			});	
		}
	},
	
	initValidationComments: function(mId){
		var tData = {};
		//---
		var tE = this.getElementWithPostId(mId,'.name');
		var tF = new LiveValidation(tE, { validMessage:" ", wait: 500, onlyOnBlur:true } );
		tF.add(Validate.Presence, {failureMessage:" "});
		tF.add( Validate.Format, { pattern:new RegExp("^"+dict.get('comments_name')+"$","i"), negate:true, failureMessage:" "} );
		tData.name = tF;
		//---
		var tE = this.getElementWithPostId(mId,'.email');
		var tF = new LiveValidation(tE, { validMessage:" ", wait: 500 } );
		tF.add(Validate.Presence, {failureMessage:" "});
		tF.add(Validate.Email, {failureMessage:" "});
		tData.email = tF;
		//---
		var tE = this.getElementWithPostId(mId,'.msg');
		var tF = new LiveValidation(tE, { validMessage:" ", wait: 500, onlyOnBlur:true } );
		tF.add(Validate.Presence, {failureMessage:" "});
		tF.add( Validate.Format, { pattern:new RegExp("^"+dict.get('comments_msg')+"$","i"),negate:true, failureMessage:" "} );
		tData.msg = tF;
		//---
		this['_lvRef_'+mId] = tData
	},
	
	killValidationComments: function(mId){
		var ar = this['_lvRef_'+mId];
		for(var i in ar){
			ar[i].destroy();
		}
	},
	
	resetFormComments: function(mId){
		this.killValidationComments(mId);
		var ar = ['name', 'email', 'msg'];
		var lg = ar.length;
		for(var i=0; i<lg; i++){
			var tE = this.getElementWithPostId(mId,'.'+ar[i]);
			tE.set('value', tE.retrieve('defaultValue'));
		}				
		this.initValidationComments(mId);
	},
	
	slideInComments: function(mId, callnext){
		if(callnext == null) callnext = {next:function(){}};
		//---
		tE = this.getElementWithPostId(mId,'.comments');
		tE.setStyle('display','block');	
		new Fx.Slide(tE, {}).hide().slideIn('vertical').chain( callnext.next.bind(callnext) );
	},
	
	slideOutComments: function(mId, callnext){
		if(callnext == null) callnext = {next:function(){}};
		//---
		tE = this.getElementWithPostId(mId,'.comments');
		new Fx.Slide(tE, {}).slideOut('vertical').chain( callnext.next.bind(callnext) );
	},
	
	
	//-- submitComments
	//------------------------------------------------------------------------------------
	onSubmitComments: function(mId){ //form event
		this.submitComments(mId);
	},
	
	submitComments: function(mId){
		var _aS = new ActionStack(this);
		var as = [];
		//--
		as[as.length] = {func:this.b_submit_commentToAjax, param:[mId, true]};
			
		as[as.length] = {func:this.postAjaxComments,param:[mId, '_newComments_'+mId, _aS], wait:true};
			
		as[as.length] = {func:this.b_submit_commentToAjax, param:[mId, false]};
		as[as.length] = {func:this.resetFormComments, param:[mId]};
		as[as.length] = {func:this.updateComments, param:[mId, '_newComments_'+mId ,_aS], wait:true};
		as[as.length] = {func:this.b_commentUpdateCount, param:[mId, 1]};
		
		_aS.setStack(as);
		_aS.start();
	},
	
	b_submit_commentToAjax: function(mId, mB){
		if(mB != false){
			var tE = $('ajaxloader-'+mId);
			tE.setStyle('display','block');
			tE = this.getElementWithPostId(mId,'.b_submit_comment');
			tE.setStyle('display','none');
		}else{
			var tE = $('ajaxloader-'+mId);
			tE.setStyle('display','none');
			tE = this.getElementWithPostId(mId,'.b_submit_comment');
			tE.setStyle('display','block');
		}
	},
	
	postAjaxComments: function(mId, mDataId, callnext){
		var tE = $('commentform-'+mId);
		var _self = this;
		var tQ = tE.toQueryString();
		var tUrl = this.themePath + "/include/postAjaxComments.php?"+ tQ;
		new Request({url: tUrl, method: 'get', onSuccess: function(mResponse){
			_self[mDataId] = mResponse;
			if(callnext != null) callnext.next();
		},
		onComplete: function(mResponse){ //DIRTY - on fail
			if(mResponse == null){
				_self.onFailPostAjaxComment(mId);
			}
		}
		}).send();
	},
	
	onFailPostAjaxComment: function(mId){
		this.b_submit_commentToAjax(mId,false);
	},
	
	updateComments: function(mId, mDataId, callnext){
		var tE = this.getElementWithPostId(mId,'.comments');
		var tP = tE.getParent();
		tP.setStyle('height', 'auto');
		//---
		var tData = this[mDataId];
		var el = new Element('li', {'html': tData});		
		var tE = this.getElementWithPostId(mId,'.commentlist');
		tE.adopt(el);		
		
		new Fx.Slide(el, {}).hide().slideIn('vertical').chain( callnext.next.bind(callnext) );
	},
	
	/* Contact
	-------------------------------------------------------------------------------------------------------------------------
	------------------------------------------------------------------------------------------------------------------------*/
	initContactForm: function(){
		this.initFieldContact();
		this.initValidationContact();
	},
	
	openContact: function(type){
		this.resetFormContact();
		this.contactInAnim(type);
	},
	closeContact: function(){
		this.contactOutAnim();
	},
	
	contactInAnim: function(type){
		var tE = $('contactwrapper');
		var tFx = new Fx.Tween(tE, {duration:444, transition: Fx.Transitions.Quint.easeInOut});
		if(type=="bottom"){
			var size = window.getSize();
			var tD = size.y * 0.7;
			new Fx.Scroll(window, {duration:tD, transition: Fx.Transitions.Quint.easeInOut}).toTop().chain(function(){
    		tFx.start('top', 0);
			});
		}else{
			tFx.start('top', 0);
		}
	},
	contactOutAnim: function(){
		var tE = $('contactwrapper');
		var size = tE.getSize();
		var tY = -1*size.y;
		var tFx = new Fx.Tween(tE, {duration:444, transition: Fx.Transitions.Quint.easeInOut}).start('top', tY);
	},
	
	onSubmitContact: function(){
		var _aS = new ActionStack(this);
		var as = [];
		//--
		as[as.length] = {func:this.postAjaxContact};
			
		as[as.length] = {func:this.contactFormToThanks};
		as[as.length] = {trg:_aS, func:_aS.insertDelay, param:[1300], wait:true};
		as[as.length] = {func:this.resetFormContact};
		as[as.length] = {func:this.contactFormToForm};
			
		_aS.setStack(as);
		_aS.start();
	},	
	
	postAjaxContact: function(callnext){
		var tE = $('contactForm_form');
		var _self = this;
		var tQ = tE.toQueryString();
		var tUrl = this.themePath + "/include/postAjaxContact.php?"+ tQ;
		new Request({url: tUrl, method: 'get', 
			onSuccess: function(mResponse){
				if(callnext != null) callnext.next();
			}
		}).send();
	},
	
	contactFormToThanks: function(){
		var tHead = $('contactwrapper').getElement('.contactHeader');
		var tForm = $('contactwrapper').getElement('.contactForm');
		var tThanks = $('contactwrapper').getElement('.contactThanks');
		new Fx.Tween(tForm).start('opacity',0).chain(function(){
    		new Fx.Tween(tThanks).start('opacity', 1);
		});
		new Fx.Tween(tHead).start('opacity',0);
	},	
	
	contactFormToForm: function(){
		var tHead = $('contactwrapper').getElement('.contactHeader');
		var tForm = $('contactwrapper').getElement('.contactForm');
		var tThanks = $('contactwrapper').getElement('.contactThanks');
		new Fx.Tween(tThanks).start('opacity',0).chain(function(){
    		new Fx.Tween(tForm).start('opacity', 1);
				new Fx.Tween(tHead).start('opacity',1);
		});
	},
	
	initFieldContact: function(){	
		var ar = ['name','company','email','msg'];
		var lg = ar.length;
		for(var i=0; i<lg; i++){
			var defaultValue = dict.get('contact_'+ar[i]);
			var tE = this.getContactElement('.'+ar[i]);			
			tE.store('defaultValue',defaultValue);
			tE.addEvent('focus', function(e){
				e.stop();
				var tV = this.get('value');
				if(tV == this.retrieve('defaultValue')) this.set('value', '');
			});	
			tE.addEvent('blur', function(e){
				e.stop();
				var tV = this.get('value');
				if(tV == '') this.set('value', this.retrieve('defaultValue'));
			});	
		}
	},
	
	initValidationContact: function(mId){
		var tData = {};	
		//---
		var tE = this.getContactElement('.name');
		var tF = new LiveValidation(tE, { validMessage:" ", wait: 500, onlyOnBlur:true } );
		tF.add(Validate.Presence, {failureMessage:" "});
		tF.add( Validate.Format, { pattern:new RegExp("^"+dict.get('contact_name')+"$","i"), negate:true, failureMessage:" "} );
		tData.name = tF;
		//---
		var tE = this.getContactElement('.email');
		var tF = new LiveValidation(tE, { validMessage:" ", wait: 500 } );
		tF.add(Validate.Presence, {failureMessage:" "});
		tF.add(Validate.Email, {failureMessage:" "});
		tData.email = tF;
		//---
		var tE = this.getContactElement('.msg');
		var tF = new LiveValidation(tE, { validMessage:" ", wait: 500, onlyOnBlur:true } );
		tF.add(Validate.Presence, {failureMessage:" "});
		tF.add( Validate.Format, { pattern:new RegExp("^"+dict.get('contact_msg')+"$","i"),negate:true, failureMessage:" "} );
		tData.commment = tF;
		//---
		this['_lvRefContact_'] = tData
	},
	
	resetFormContact: function(){
		var ar = this['_lvRefContact_'];
		for(var i in ar){
			ar[i].destroy();	
		}		
		var ar = ['name','company','email','msg'];
		var lg = ar.length;
		for(var i=0; i<lg; i++){
			var tE = this.getContactElement('.'+ar[i]);
			tE.set('value', tE.retrieve('defaultValue'));
		}				
		this.initValidationContact();
	},
	
	getContactElement: function(mQ){
			return $('contactForm_form').getElement(mQ);
	},
	
	/* Mulitusage
	--------------------------------------------------------------*/
	empty: function(){},
	
	
	/* Main initiation function
	--------------------------------------------------------------*/
	init: function(){
		if(this._INIT == null){
			this._INIT = true;
			//---
			this.themePath = $pick(window.themePath, '');
			this._commentsToggle = [];
			
			this.initContactForm();
			this.initMaillingForm();
			//---
			//this.startUp();
		}
	},
	
	startUp: function(){
	
	},
	
	
	/* Window events handling
	--------------------------------------------------------------*/
	onWindowDomReady: function(){
		this.init();
	},
	
	onWindowLoad: function(){
		this.init();
	}
};


// Window Events ---------------------------------------------
window.addEvent('domready', function() {
	main.onWindowDomReady();
});
window.addEvent('load', function() {
	main.onWindowLoad();
});
