/**
 * Sfd JS Engine
 * Place all generic properties and functions here
 * 
 * @author mitchelle.pascual
 * $date 04/27/2010
 */
if (typeof sfd == 'undefined')
	var sfd = {};
if (typeof sfd.baseUrl == 'undefined')
	sfd.baseUrl = '';


sfd.version = 0.1;

// user module
sfd.user = {};
sfd.user.photo = {};

sfd.user.photo.path = sfd.baseUrl + '/uploads/profile/photos';
sfd.user.photo.none = sfd.baseUrl + '/images/photo01.jpg';

sfd.user.autocomplete = {};
sfd.user.autocomplete.aNames = [];
sfd.user.autocomplete.aIds = [];
sfd.user.autocomplete.aTokens = [];

sfd.user.autocomplete.friendsList = function(inputSelector, onSelect)
{
	var aNames = [];
	var aIds = [];
	var aTokens = [];
	var aPhotos = [];
	var aEmails = [];

	function jsonSuccessCallback(json)
	{
		aNames = [];
		aIds = [];
		aTokens = [];
		aPhotos = [];
		aEmails = [];
		
		//populate arrays
		for (var x = 0; x < json.friends.length; x++) 
		{
			//var name = json.friends[x].civilite + ' ' + json.friends[x].first_name + ' ' + json.friends[x].last_name;
			var name = json.friends[x].first_name + ' ' + json.friends[x].last_name;
			//var photo = json.friends[x].profile_photo != '' ? sfd.user.photo.path + '/' +json.friends[x].profile_photo :
			//	sfd.user.photo.none;
			var email = json.friends[x].email;
			
			//aNames.push($.trim(name) + "[" + $.trim(email) + "]");
			aNames.push($.trim(name));
			
			aIds.push(json.friends[x].id);
			aTokens.push(json.friends[x].token);
			//aPhotos.push(photo);
			
			aEmails.push(email);
		}
		// we might need these in the custom onSelect param
		sfd.user.autocomplete.aNames = aNames;
		sfd.user.autocomplete.aIds = aIds;
		sfd.user.autocomplete.aTokens = aTokens;
		
		
		return aNames;
	}


	/**
	 * @todo layout
	 *
	 * @hack
	 * @see sfd.user.autocomplete.formattedParser
	 * must have this attr index="' + index + '" so in the select event 
	 * 	$(inputSelector).autocomplete('result', function(event, data, formatted) 
	 * we'll parse the formatted arg and get the index value
	 * then we can now call sfd.user.autocomplete.aNames[index] in the custom select event
	 * 
	 */
	function customItem(data, i, max) {
		var index = i - 1;
		
		//The attributes userId and class="autocompleterLink" added by Alexis
		var userId = sfd.user.autocomplete.aIds[index];
		//alert(userId);
		
		//var html = '<div index="' + index + '" style="background: #fff;"><img src="' +  aPhotos[index] + '">';
		var html = '<div index="' + index + '" style="background: #fff;">';
		html += '<a href="javascript:;" class="autocompleterLink" userId="' + userId +  '">' +  data[0]; 
		html += '</a></div>';
		
		return html;
	}
	
	//customize data added to text field			
	function customResult(data, i, max) {
		//return just the data
		return data[0];
	}
	
	//create config object  
	var autocompOpts = {
		//data: aNames
		jsonurl: sfd.baseUrl + '/json/auto-complete-get-friends/'
		,jsonSuccess: jsonSuccessCallback
		//,matchContains: true
		,multiple: true
		,multipleSeparator: '; '
		,formatItem: customItem
		,formatResult: customResult
		,cacheLength: 0
	};
	$(inputSelector).bind('keyup', function() 
	{
		$(inputSelector).autocomplete('flushCache');
		//$('div.ui-autocomplete-results ul').empty();
	});
	//turn specified element into an auto complete
	$(inputSelector).autocomplete(autocompOpts);
	
	if (typeof onSelect == 'function')
	{
		onSelect();
	}
};
sfd.user.autocomplete.formattedParser = function(sFormatted)
{
	var aFormatted = new RegExp('index="([0-9]+)"').exec(sFormatted);
	return aFormatted != null && typeof aFormatted[1] != 'undefined' ? aFormatted[1] : -1;
};
	
/**
 * @author Alexis Azanza
 */
sfd.gAlert = {};
sfd.gAlert.gAlertDialogResponse = 0;
sfd.gAlert.initAlertWindow = function()
{
	$("#alertDialog").dialog({
		autoOpen: false,
		modal: true,
		hide : true,
		resizable : false
	});
			
	$("#alertDialogValider").click(function(){
		sfd.gAlert.gAlertDialogResponse = 1;
		$("#alertDialog").dialog('close');
	});
	
	$("#alertDialogAnnuler").click(function(){
		sfd.gAlert.gAlertDialogResponse = 0;
		$("#alertDialog").dialog('close');
	});
	
	
	
	//Ok only, close the dialog window
	$("#alertDialogOk").click(function(){
		sfd.gAlert.gAlertDialogResponse = 1;
		$("#alertDialog").dialog('close');
	});
	
};


sfd.gAlert.alert = function(msg)
{
	$('#alertDialog').dialog('open');
	//$('#alertDialogContent').text(msg);
	$('#alertDialogContent').html(msg);
	$('#alertDialog .okOnly').show();
	$('#alertDialog .yesNo').hide();
};

sfd.gAlert.confirm = function(msg)
{
	$('#alertDialog').dialog('open');
	//$('#alertDialogContent').text(msg);
	$('#alertDialogContent').html(msg);
	$('#alertDialog .okOnly').hide();
	$('#alertDialog .yesNo').show();
};



sfd.headerNav =  {
	initNav : function()
	{
		$("#headerSearchSubmit").click(function(){
			
			
		});
	},
	searchFriendSubmitFunc : function() {
		return false;
	}
};


sfd.ajaxLoader = {
	img : sfd.baseUrl + '/images/ajax-loader.gif',
	imgSelector : 'loaderImage',
	
	show : function()
	{
		var loader = $('<img id="' + this.imgSelector + '" src="' + this.img +  '">');
		return loader.clone();
	},
	
	hide : function()
	{
		$('#' + this.imgSelector).remove();
	}
};






sfd.initSmallCalendar = function() {
	$(".smallCalendarPrev, .smallCalendarNext").bind('click.smallCalendar', sfd.smallCalendarNextPrevFunc);
};
sfd.smallCalendarNextPrevFunc = function()
{
	
	var dateToUse = $(this).attr('date');
	
	
	var url = sfd.baseUrl + "/calendrier/smallcalendar/" + dateToUse;
	//alert(url);
	
	var loader = sfd.ajaxLoader.show();
	$(".smallCalendarOnRightSidebar").children().hide();
	$(".smallCalendarOnRightSidebar").append(loader);
	
	
	$.ajax( 
		{ 
		  url:url, 
		  success : function( data )
		  { 
			//alert(data);
			$(".smallCalendarOnRightSidebar").html(data);
			sfd.initSmallCalendar();
		  },
		  error: function( XMLHttpRequest, textStatus, errorThrown )
		  {
			alert('Erreur ' + textStatus + ' ' + errorThrown);
		  },
		  complete: function()
		  {
			sfd.ajaxLoader.hide();
		  }
		} 
	  ); //End of $.ajax
	
	
	
};


/**
 * Utilities
 *  
 */

sfd.utility = {
	//extract messages from zend form
	extractMessages : function(msg, delim)
	{
		if (typeof delim == 'undefined')
			delim = '<br />';

		
		if (typeof msg == 'object')
		{
			var errors = [];
			var lastVal = '';
			for (var i in msg)
			{
				if (typeof msg[i] == 'object')
				{
					errors.push(sfd.utility.extractMessages(msg[i]));
				}
				else
				{
					if (lastVal != msg[i])
						errors.push(msg[i]);
					lastVal = msg[i];
				}
			}
			return errors.join(delim);
		}
		else
		{
			return msg;
		}
	}
};



		
$(function(){
	sfd.headerNav.initNav();
	window.sfd.gAlert.initAlertWindow();
	window.sfd.initSmallCalendar();
	
});


/**
 * Periodical Updater
 *
 */
$(document).ready(function(){
	//alert(window.currentControllerName);
	if(window.currentControllerName!='index')
	{
		$.periodic({period: 5000, decay: 2, max_period: 30000},
		function() {
			$.ajax({
				url: '/' + window.currentControllerName + '/revalidate-user',
				success: function(data) {
					if(data == "true") {
						window.location = '/';
					}
				},
				complete: this.ajax_complete,
				dataType: 'text'
			});
		});	
	}
	
})


