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

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

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

main = {
	
	init: function(){
		if(this._INIT == null){
			this._INIT = true;
			
			
			//-- Elements
			this.regionDd = 			$$('#cat')[0];
			this.entryImgAr = 				$$('.entry img');
			
			this.frm_search = 			$$('#searchform')[0];
			
			if(this.frm_search){
				this.b_go = 				$$('.b_go')[0];
				this.fld_search = 			$$('.fldSearch')[0];	
				this.fld_search.set('value', this.fld_search.get('alt') );
				this.fld_search.store('defaultValue', this.fld_search.get('value'));
			}
			
			this.frm_optin = 			$$('#frm_optin')[0];
			if(this.frm_optin){
				this.wrap_optin = $$('.wrap_optin')[0]; 
				this.tks_optin = $$('.tks_optin')[0];
				
				this.FC = new FormCheck(this.frm_optin, {
					errorClass : 'subscription_error error_msg'
				});
				
			}
			
			//-- Vars
			this.themePath = $pick(window.themePath, '');
			this.lang = window.lang;
			this._commentsToggle = [];

			//this.startUp();
			this.addEvents();
		}
	},
	
	startUp: function(){
		
		this.addBorders();
	},
	
	addEvents: function(){
		var self = this;
		this.regionDd.addEvent('change', function(e){
			if(this.value != -1) window.location = window.root +'?cat='+this.value;
		});
		
		if(this.frm_search){
			this.b_go.addEvent('click', function(e){
				e.stop();
				var tV = self.fld_search.get('value');
				if(tV != '' && tV != self.fld_search.retrieve('defaultValue')) self.frm_search.submit();
			});		
			this.fld_search.addEvent('focus', function(e){
				this.set('value', '');
			});
			this.fld_search.addEvent('blur', function(e){
				if(this.get('value') == '') this.set('value', this.retrieve('defaultValue'));
			});
		}
	},
	
	
	addBorders: function(){
		var self = this;
		var maxW = $('main').getSize()['x'] -16-18;
		this.entryImgAr.each(function(e,i){
			e.setStyles({'left':16,'position':'absolute', 'top':16});
			var w = e.getSize()['x'];
			var h = e.getSize()['y'];
			if(w > maxW) w = maxW;
			var wrap = new Element('div', {'styles':{
				'height':(h+16+20),
				'overflow':'hidden',
				'position':'relative',
				'width':(w+16+18)
			} });
			wrap.wraps(e);
			
			wrap.grab( new Element('div',{'class':'br_tl'}) , 'bottom');
			wrap.grab( new Element('div',{'class':'br_t', 'styles':{'width':w} }) , 'bottom');
			wrap.grab( new Element('div',{'class':'br_tr'}) , 'bottom');
			wrap.grab( new Element('div',{'class':'br_l', 'styles':{'height':h} }) , 'bottom');
			
			wrap.grab( new Element('div',{'class':'br_r', 'styles':{'height':h} }) , 'bottom');
			wrap.grab( new Element('div',{'class':'br_bl'}) , 'bottom');
			wrap.grab( new Element('div',{'class':'br_b', 'styles':{'width':w} }) , 'bottom');
			wrap.grab( new Element('div',{'class':'br_br'}) , 'bottom');
			
		});
	},
	
	submitOptin: function(){
		//this.FC.onSubmit();	
		//this.frm_optin.submit();
		this.frm_optin.fireEvent('submit');
	},
	
	doOptin: function(){
		var aS = [];
		//--
		aS[aS.length] = {func:this.doAjaxPost};
			
		aS[aS.length] = {asfunc:'doTween', param:[this.wrap_optin, {property:'opacity', to:0, transition:"quint:in:out", duration:333} ], wait:true};
		aS[aS.length] = {asfunc:'setStyles', param:[this.tks_optin, {'display':'block', 'opacity': 0} ] };
		aS[aS.length] = {asfunc:'doTween', param:[this.tks_optin, {property:'opacity', to:1, transition:"quint:in:out", duration:555} ], wait:true};
		aS[aS.length] = {asfunc:'doDelay', param:[1300], wait:true};
		aS[aS.length] = {func:this.resetOptin};
		aS[aS.length] = {asfunc:'doTween', param:[this.tks_optin, {property:'opacity', to:0, transition:"quint:in:out", duration:333} ], wait:true};
		aS[aS.length] = {asfunc:'doTween', param:[this.wrap_optin, {property:'opacity', to:1, transition:"quint:in:out", duration:555} ], wait:true};	
			
		var _aS = new ActionStack(this);
		_aS.start(aS);
	},
	
	doAjaxPost: function(callnext){
		this.frm_optin.set('send', {
			url: this.themePath+'common/db_action.php', 
			method: 'post', 
			onSuccess: function(response){
				//alert('success: '+response);
				if(callnext != null) callnext.next();
			}
		});
		this.frm_optin.send();
	},
	
	resetOptin: function(){
		this.frm_optin.getElements('input').each(function(el,i){
			var type = el.get('type');
			if(type == 'text') el.set('value','');						  
		});
	},
	
	//***********************************************************
	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.start(as);
		}
	},	
	
	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.start(as);
		}
	},
	
	//-- open/close AjaxComments functions
	//----------------------------------
	loadCommentsInto: function(mId, mDataId, callnext){
		var _self = this;
		var tQ = "id="+mId +"&lang="+ this.lang;		
		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.start(as);
	},
	
	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()+"&lang="+ this.lang;
		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) );
	},
	
	empty: function(){},
	
	
	
	/* Window events handling
	--------------------------------------------------------------*/
	onWindowDomReady: function(){this.init();},
	onWindowLoad: function(){this.init();this.startUp();}
};


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