/* CAM Javascript */
//modal popup
$(document).ready(function() {	
	$('.cleanfield').cleanfield();
	
	$("#dateStart, #dateEnd, #date-naissance, #date-naissance1").datepicker({
		showOn: 'button',
		buttonImage: heap.urlmap['static'] + '/images/calendar.gif',
		buttonImageOnly: true,
		dateFormat: 'dd/mm/yy'
	});
	
	var mapper = {
		email: 'user_email',
    lastname: 'user_lastname',
		firstname: 'user_firstname',
		password: 'user_password',
    'password-confirm': 'user_password_confirm',
		city: 'user_city',
		allow_newsletter: 'agree-newsletter1',
		meta_address: 'user_adress',
		meta_postal_code: 'user_postal_code',
		meta_phone: 'user_phone',
    meta_cell_phone: 'user_cellular',
		meta_birth_date: 'date-naissance1',
		meta_mode_region: 'region-meta-pref',
		meta_mode_alerts: '',
		meta_opt_in_2010: 'agree-diffusion1',
		meta_postal_code_alert: 'region-cp1-value',
		tags: []		
	};
	
	//Modification de user
	var updateForm = $('#vAccount form');
	if(updateForm.is('form')){
		var update_mapper = $.extend({}, mapper, {meta_mode_alerts: 'remember-sms'});
		updateForm.bind('submit', function(evt){
			CAM.tools.stopEvent(evt);
			var update_params = CAM.userInterface.buildParams(update_mapper, {}, updateForm);
			update_params['tags'] = CAM.userInterface.buildTagsParam(updateForm, update_params);
			update_params['slug'] = CAM.user._slug;
			update_params['username'] = CAM.user.username;
			if(update_params['meta_mode_region'] != 'postalcode') update_params['meta_postal_code_alert'] = '';
			CAM.userInterface.save('edit', update_params);
			return false;
		});		
	}
	
	//Ajout de user
	var registerForm = $('#vRegister form');
	if(registerForm.is('form')){
		registerForm.bind('submit', function(evt){
			CAM.tools.stopEvent(evt);
			var params = CAM.userInterface.buildParams(mapper, {}, registerForm);
			params['tags'] = CAM.userInterface.buildTagsParam(registerForm, params);
			if(params['meta_mode_region'] != 'postalcode') params['meta_postal_code_alert'] = '';
			CAM.userInterface.save('create', params);
			return false;
		});
	}
	
	$('.footer .personalized h1 img').bind('click', function(e){
		CAM.tools.stopEvent(e);
		
		//Get the A tag
		var id = $('a[name=modal]:eq(0)').attr('href');
		openOverlay(id);
		
		return false;
	});	
	
	//select all the a tag with name equal to modal
	$('a[name=modal]').click(function(e) {
		//Cancel the link behavior
		CAM.tools.stopEvent(e);
		
		//Get the A tag
		var id = $(this).attr('href');
		openOverlay(id);
				
		return false;
	});
	
	//if close button is clicked
	$('.window .close').click(function (e) {
		//Cancel the link behavior
		e.preventDefault();
		
		$('#mask').hide();
		$('.window').hide();
	});		
	
	//if mask is clicked
	$('#mask').click(function () {
		$(this).hide();
		$('.window').hide();
	});	
}); 


function openOverlay(id){
	window['overlayOpening'] = (!window['overlayOpening'])? 1 : window['overlayOpening'] + 1;
	var mapper = {_meta: {address: 'user_adress', birth_date: 'date-naissance1', cell_phone: 'user_cellular', mode_alerts: 'remember-sms', mode_region: 'region-meta-pref', opt_in_2010: 'agree-diffusion1', phone: 'user_phone', postal_code: 'user_postal_code', postal_code_alert: 'region-cp1-value'}, allow_newsletter: 'agree-newsletter1', city: 'user_city', email: 'user_email', firstname: 'user_lastname'};
	if(window['overlayOpening'] > 1) CAM.userInterface.refreshUpdateForm(mapper);
	
	//Get the screen height and width
	var maskHeight = $(document).height();
	var maskWidth = $(window).width();
	
	//Set heigth and width to mask to fill up the whole screen
	$('#mask').css({'width':maskWidth,'height':maskHeight});
		
	//transition effect
	$('#mask').fadeIn(1000);
	$('#mask').fadeTo("slow",0.8);
	
	//Get the window height and width
	var winH = $(window).height();
	var winW = $(window).width();
              
	//Set the popup window to center
	$(id).css('top',  winH/2-$(id).height()/2);
	$(id).css('left', winW/2-$(id).width()/2);
	
	//transition effect
	$(id).fadeIn(2000);	
};

// Tabs
function setActiveView(target) {
	var t = $(target);
	var p = t.parents('ul:eq(0)');
	if (p.eq(0))
	{
  	var c = $('li a', p);
		c.each(function(i, elt){
			var elt = $(elt);
			var r = '#' + elt.attr('id').replace('v', 'p');
			if(elt.attr('id') == t.attr('id'))
			{
				$(r).css({display: 'block'});
				elt.addClass('current');
			}
			else
			{
				$(r).css({display: 'none'});
				elt.removeClass('current');
			}	
		});  
  }
/*
var viewNameClicked = target.id;
    var viewList = document.getElementById('content-tabs');
    var myPanels = new Array();
     
    myPanels = viewList.getElementsByTagName('li');
   
    for (var i = 0; i < myPanels.length; i++) {    
        
				var myNode;
        if (myPanels[i].firstChild.nodeType != 1)
            myNode = myPanels[i].childNodes[1];
        else
            myNode = myPanels[i].firstChild;
        
        var divId = 'p'+myNode.id.replace('v','');
        var divDisplay = document.getElementById(divId); 
    		
				
	        if (myNode.id == viewNameClicked)
	        {
	            	myNode.className = 'current'; 
	            	if(divDisplay) divDisplay.style.display = 'block';
							
	        } else {
	            myNode.className = ''; 
	            if(divDisplay) divDisplay.style.display = 'none';  
	        }
				
    }*/
}

function setActiveView2(target) {
    var viewNameClicked = target.id;
    var viewList = document.getElementById('content-tabs2');
    var myPanels = new Array();
     
    myPanels = viewList.getElementsByTagName('li');
    
    for (var i = 0; i < myPanels.length; i++) {    
        var myNode;
        if (myPanels[i].firstChild.nodeType != 1)
            myNode = myPanels[i].childNodes[1];
        else
            myNode = myPanels[i].firstChild;
        
        var divId = 'p'+myNode.id.replace('v','');
        var divDisplay = document.getElementById(divId); 
    
        if (myNode.id == viewNameClicked)
        {
            myNode.className = 'current'; 
            divDisplay.style.display = 'block';  
        } else {
            myNode.className = ''; 
            divDisplay.style.display = 'none';  
        }
    }
}

function setActiveView3(target) {
    var viewNameClicked = target.id;
    var viewList = document.getElementById('content-tabs3');
    var myPanels = new Array();
     
    myPanels = viewList.getElementsByTagName('li');
    
    for (var i = 0; i < myPanels.length; i++) {    
        var myNode;
        if (myPanels[i].firstChild.nodeType != 1)
            myNode = myPanels[i].childNodes[1];
        else
            myNode = myPanels[i].firstChild;
        
        var divId = 'p'+myNode.id.replace('v','');
        var divDisplay = document.getElementById(divId); 
    
        if (myNode.id == viewNameClicked)
        {
            myNode.className = 'current'; 
            divDisplay.style.display = 'block';  
        } else {
            myNode.className = ''; 
            divDisplay.style.display = 'none';  
        }
    }
}

// Increase - decrease Font size
var min=9;
var max=13;
function increaseFontSize() {
   var p = document.getElementsByTagName('p');
   for(i=0;i<p.length;i++) {
      if(p[i].style.fontSize) {
         var s = parseInt(p[i].style.fontSize.replace("px",""));
      } else {
         var s = 12;
      }
      if(s!=max) {
         s += 1;
      }
      p[i].style.fontSize = s+"px"
   }
}
function decreaseFontSize() {
   var p = document.getElementsByTagName('p');
   for(i=0;i<p.length;i++) {
      if(p[i].style.fontSize) {
         var s = parseInt(p[i].style.fontSize.replace("px",""));
      } else {
         var s = 12;
      }
      if(s!=min) {
         s -= 1;
      }
      p[i].style.fontSize = s+"px"
   }   
}


// Show/hide layer
function toggle(obj) {
    var el = document.getElementById(obj);
    el.style.display = (el.style.display != 'none' ? 'none' : '');
    return false;
}

// select field
$.fn.customSelect = function() {
	// define defaults and override with options, if available by extending the default settings, we don't modify the argument
	return this.each(function() {  
		obj = $(this);  
		obj.after("<div id=\"selectoptions\"> </div>");
		obj.find('option').each(function(i){ 
			$("#selectoptions").append("<div id=\"" + $(this).attr("value") + "\" class=\"selectitems\"><img src=\"" + this.title + "\" /><span>" + $(this).html() + "</span></div>");
		});
		obj.before("<input type=\"hidden\" value =\"\" name=\"" + this.name + "\" class=\"customselect\"/><div id=\"requestselect\">" + this.title + "</div><div id=\"requestselectholder\"> </div>")
		.remove();
		$("#requestselect").click(function(){
			$("#requestselectholder").toggle();
		});
		$("#requestselectholder").append( $("#selectoptions")[0] );
		$(".selectitems").mouseover(function(){
			$(this).addClass("hoverclass");
		});
		$(".selectitems").mouseout(function(){
			$(this).removeClass("hoverclass");
		});
		$(".selectitems").click(function(){
			$(".selectedclass").removeClass("selectedclass");
			$(this).addClass("selectedclass");
			var thisselection = $(this).html();
			$(".customselect").val(this.id);
			$("#requestselect").html(thisselection);
			$("#requestselectholder").toggle()
		});
	});  
};

/* Plugins - Cleaning des fields INPUT */
(function($){
	$.fn.cleanfield = function(){
		return this.each(function(){
			if(jQuery.browser.msie && jQuery.browser.version.substr(0,1) < 7) return;
			var $field = $(this);
			if(!$field.is('input')) $field = $('textarea', $field);
			$field.data('val', $field.val());
			$field.data('rel', !$field.attr('rel')? 0 : $field.attr('rel'));
			$field.bind('focus', function(e){
				var that = $(this);
				if(that.val() == that.data('rel')){
					that.data('val', that.val());
					that.data('initialize', true);
					$(this).val('');
				}						
			});
			
			$field.bind('blur', function(e){
				var that = $(this);
				var rel = that.data('rel');
				var value = that.data('val');
				if($.trim(that.val()) == ''){
					that.val(rel);
				}
				if(value == that.val()){
					that.val(value);	
				}			
			});		
		});	
	};
})(jQuery);

/* NameSpace CAM ----*/
var CAM = {
	tools: {
		stopEvent: function(evt){
			if(window.event){ //IE
				evt = window.event;
				evt.returnValue = false;
			}
			
			try {
				evt.cancelBubble = true;
				if(evt.preventDefault) evt.preventDefault();
				if(evt.stopPropagation) evt.stopPropagation();
				if(evt.stopped) evt.stopped = true;
			} catch(e) {
				/* console.log(e.message); */
			}		
			return evt;
		},
		
		formatDate: function(value){
			var v = value.split('/');
			if(v.length > 1) value = v[2] + '-' + v[1] + '-' + v[0];
			return value;
		},
		
		enterKeyPress: function(e){
			var characterCode;
			if(e && e.which){
		  	e = e;
		   	characterCode = e.which;
		  } else if(arguments[0]){
			  e = event;
			  characterCode = e.keyCode;
			}
				
			if(characterCode == 13) return true;
			else return false;	
		}
	}, 
	
	validation: {
		empty: function(f){
			var field = $(f);
			var val = $.trim(field.val());
			var validated = (val.length)? true : false;
			if(field.hasClass('cleanfield') && validated){
				var base = field.attr('rel');
				if(base == val) validated = false;				
			}
			return validated
		},
		
		email: function(f){
			var ereg = new RegExp("^[a-zA-Z0-9._-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}$", "gi");
			var field = $(f);
			var val = $.trim(field.val());
			return (ereg.test(val))? true : false;	
		},
		
		date: function(f){
			var ereg = new RegExp("^[0-9]{2}\/[0-9]{2}\/[0-9]{4}$", "gi");
			var field = $(f);
			var val = $.trim(field.val());
			return (ereg.test(val))? true : false;		
		},
		
		cp: function(f){
			var ereg = new RegExp("^[A-Z\s]{1}[0-9\s]{1}[A-Z\s]{1}[0-9\s]{1}[A-Z\s]{1}[0-9\s]{1}$", "gi");
			var field = $(f);
			var val = $.trim(field.val().replace(' ', ''));
			return (ereg.test(val))? true : false;
		}
	}, 
	
	format: {
		dateToUrl: function(val){
			var d = val.split('/');
			return d[2] + '-' + d[1] + '-' + d[0];
		}		
	},
	
	lbox: function(container, options){
		this.defaultOptions = {};
		this.options = $.extend({}, this.defaultOptions, options);
		this.container = $(container);
		this.related = null;
		return this.initialize();
	}, 
	
	pager: function(container, options){
		this.defaultOptions = {pagerCssClass: 'paging_evenement', activeCssClass: 'current'};
		this.options = $.extend({}, this.defaultOptions, options);
		this.container = $(container);
		this.process = false;
		return this.initialize();
	}, 
	
	userInterface: {
		load: function(){
			var _return = {};
			if(CAM.user){
				try {
					heap.api.users.load(function(r){
						if(r.type == heap.SUCCESS){
							_return = r.data;
						}
					}, {slug: CAM.user._slug});				
				} catch(e) { console.log(e.message); }		
			}
			return _return;
		}, 
		
		loadAlerts: function(){
			var t, _return;
			t = CAM.userInterface.load();
			if(t._alerts){
				_return = t._alerts;
			}
			return _return;
		}, 
		
		deleteAlert: function(showtimeID){
			if(CAM.user){
				var alerts = CAM.user._alerts || [];
				for(var i = 0; i < CAM.user._alerts.length; i++){
					var alert = CAM.user._alerts[i];
					if(showtimeID == alert.showtime_id){
						alerts.splice(i, 1);
						break;
					}				
				}
				
				CAM.user._alerts = alerts;
				if(!arguments[1]) $(window).trigger('alertChange', [CAM.user._alerts, showtimeID, 'remove']);
			}			
		},
		
		addAlert: function(alertObj){
			if(CAM.user){
				CAM.userInterface.deleteAlert(alertObj.showtime_id, true);
				CAM.user._alerts.push(alertObj);
				$(window).trigger('alertChange', [CAM.user._alerts, alertObj.showtime_id], 'add');
			}			
		}, 
		
		buildParams: function(mapper, params, formulaire){
			for(var p in mapper){
				if((p != 'meta_mode_region' && p != 'meta_mode_alerts') && mapper[p].length){
					var c = $('#' + mapper[p], formulaire);
					if(c.attr('type') == 'checkbox'){
						if(c.attr('checked')){
							params[p] = 1;
						}
						else params[p] = 0;
					}
					else {
						var isEmpty = false;
						if(c.attr('rel') && c.hasClass('cleanfield')){
							if(c.val() == c.attr('rel')) isEmpty = true;
						}
						params[p] = (isEmpty)? '' : c.val();
						if(p == 'meta_birth_date'){
							params[p] = CAM.tools.formatDate(params[p]);
						}
					}
				}
				else if(p == 'meta_mode_region' || p == 'meta_mode_alerts'){
					var c = $('input[name=' + mapper[p] + ']', formulaire);
					c.each(function(i, t){
						if(t.checked){
							params[p] = $(t).val();
						}						
					});
				}
			}
			return params;
		},
		
		buildTagsParam: function(formulaire, params){
			var tags = [];
			$('.second.col input', formulaire).each(function(i, elt){
				var elt = $(elt);
				if(elt.attr('alt') && elt.attr('checked')){
					tags.push(elt.attr('alt'));
				}
			});
				
			if(params['meta_mode_region'] == 'boroughs'){
				$('.third.col select', formulaire).each(function(i, elt){
					var elt = $(elt);
					if(elt.val().length){
						var value = $('option[selected]', elt).attr('rel');
						try {
							if($.inArray(value, tags) < 0) tags.push(value);
						} catch(e) { console.log(e.message); }
					}
				});
			}
			return tags;	
		}, 
		
		save: function(fn, params){
			heap.api.cam.users[fn](function(r){
				if(r.type != heap.SUCCESS){
					if(r.code == 'ERR_VALIDATION_FAILED'){
						var msg = r.msg + '\n';
						for(var prop in r.data){
							msg += heap.labels['default'][r.data[prop]] + '\n';
						}
						alert(msg);					
					 }
					 else alert(r.msg);					
				}
				else {
					window.location.reload(true);
				}
			}, params);			
		},
		
		refreshUpdateForm: function(mapper){
			var formulaire = $('#vAccount form:eq(0)');
			if(CAM.user){
				for(var prop in mapper){
					if(prop == '_meta'){
						for(var j in mapper[prop]){
							var field = $('input[name=' + mapper._meta[j] + ']', formulaire);
							if(field.attr('type') == 'text'){
								var val = CAM.user._meta[j] || null;
								if(!val || $.trim(val) == ''){
									if(field.hasClass('cleanfield')) val = field.attr('rel');
									else val = '';
								}
								
								if(j == 'birth_date'){
									if(val != field.attr('rel')){
										var d = val.split('-');
										if(d.length > 1) val = d[2] + '/' + d[1] + '/' + d[0];
									}
								}
								field.val(val);								
							}	else {
								var key = j;
								switch(key){
									case 'opt_in_2010':
										$('#' + mapper[prop][key]).attr('checked', '');
										if(CAM.user._meta[key] && CAM.user._meta[key] == '1'){
											$('#' + mapper[prop][key]).attr('checked', 'checked');
										}
									break;
									case 'mode_region':
									case 'mode_alerts':
										if(key == 'mode_region'){
											if(CAM.user._meta[key] != 'boroughs'){ //reset selects
												$('.col.third select', formulaire).val('');												
											}
											
											if(CAM.user._meta[key] != 'postalcode'){ //reset postal code alerts
												$('#region-cp1-value', formulaire).val('');
											}											
										}
										
										if(CAM.user._meta[key]){
											field.each(function(i, elt){
												elt.checked = false;
												var el = $(elt);
												if(el.attr('value') == CAM.user._meta[key]){
													elt.checked = true;
												}											
											});
										}
									break;						
								}								
							}						
						}
					}
					else {
						var field = $('#' + mapper[prop], formulaire);
						if(field.attr('type') == 'text'){
							var val = CAM.user[prop] || null;
							if(!val || $.trim(val) == ''){
								if(field.hasClass('cleanfield')) val = field.attr('rel');
								else val = '';
							}
							field.val(val);
						} else {
							field.attr('checked', '');
							if(CAM.user[prop] == '1'){
								field.attr('checked', 'checked');
							}
						}
					}					
				}
				
				if(CAM.user.tags){
					var tags = (CAM.user.tags)? CAM.user.tags.split(', ') : [];
					if(CAM.user._meta['mode_region'] == 'boroughs'){
						var b_tags = [];
						for(var w = 0; w < tags.length; w++){
							var tag = tags[w].split('.');
							if(tag[0] == 'arrondissement'){
								b_tags.push(tags[w]);
							}
						}
						
						$('.col.third select', formulaire).each(function(i, elt){
							$(elt).val('');
							if(b_tags[i]){
								var options = $('option', $(elt));
								options.each(function(w, option){
									if($(option).attr('rel') == b_tags[i]){
										option.selected = true;
										return;
									}
								});
							}			
						});											
					}
					
					$('.col.second input[type=checkbox]', formulaire).each(function(i, elt){
						elt.checked = false;
						var el = $(elt);
						for(var w = 0; w < tags.length; w++){
							if(el.attr('alt') == tags[w]){
								elt.checked = true;
								break;
							}
						}						
					});					
				}				
			}
		}
	}
};

$.extend(CAM.lbox.prototype, {
	initialize: function(){
		$('a.forget-pwd', this.container).bind('click', function(e){
			CAM.tools.stopEvent(e);
			this.related.show();
			return false;
		}.bind(this));
		
		$('form', this.container).bind('submit', function(e){
			CAM.tools.stopEvent(e);
			this.submit();
			return false;
		}.bind(this));
		
		return this;
	}, 
	
	show: function(){
		this.container.css({display: 'block'});
		this.related.container.css({display: 'none'});
		return this.reset();
	},
	
	reset: function(){
		var fields = $('.cleanfield', this.container);
		fields.each(function(i, elt){
			var $elt = $(elt);
			$elt.removeClass('error').val($elt.attr('rel'));
		});
		return this;
	},
	
	setRelated: function(related){
		this.related = related;
		this.related.related = this;
		return this;
	}, 
	
	submit: function(){
		var fields = $('.cleanfield', this.container);
		if(fields.length < 2){
			var params = {
    		email : $('input.cleanfield:eq(0)', this.container).val()
  		};		
			try{
				heap.api.cam.users.recovery(function(r) {
			    if (r.type != heap.SUCCESS) {
			      alert(r.msg);
			      return;
			    }
					else alert('Un nouveau mot de passe vous a été envoyé.');
				}, params);				
			} catch(e) {}
		}
		else {
			var params = {
    		email : $('input.cleanfield:eq(0)', this.container).val(), 
    		password : $('input.cleanfield:eq(1)', this.container).val()
  		};
			this.login(params); 
		}
		return this;	
	}, 
	
	login: function(params){
		heap.api.users.login(function(r) { 
	    if (r.type != heap.SUCCESS) {
	      alert(r.msg);
	      return false;
	    }
	    else{
				window.location.reload(true);				
			}
	  }, params);
	}
});

$.extend(CAM.pager.prototype, {
	initialize: function(){
		var pContainer = $('.' + this.options.pagerCssClass, this.container);
		if(pContainer.is('ul')){
			var links = $('a', pContainer);
			links.each(function(i, elt){
				var l = $(elt);
				l.bind('click', function(e){
					CAM.tools.stopEvent(e);
					var l = $(e.currentTarget);
					if(l.is('a') && !l.hasClass(this.options.activeCssClass)){
						this.getPage(l.attr('href'));
					}					
					return false;
				}.bind(this));
			}.bind(this));			
		}		
		return this;
	},
	
	getPage: function(href){
		if(this.process) return this;
		var uri = href + '&ajax=true';
		var that = this;
		$.ajax({ 
			type: 'GET',
			url: uri,
			dataType: 'html',
			beforeSend: function(){
				that.process = true;
				$(that).trigger('onBeforeGet');
			},
			error: function(){
				$(that).trigger('onError');
			},
			success: function(r){
				$(that).trigger('onSuccess');
				that.refresh(r);
			}
		});		
		return this;
	}, 
	
	refresh: function(r){
		this.container.html(r);
		this.process = false;
		return this;
	}
});

