jQuery.noConflict();

/**
 * Global object.
 */
var $jq = jQuery;
$jq.synchronous = new Object();

/**
 * Synchronous functions container.
 * @type Object
 */
var $jqs = $jq.synchronous;

$jq.toTranslate = new Array();
$jq.addTranslate = function(str)
{
    $jq.toTranslate.push(str);
}

$jq.addTranslate("GLOBAL_Collapse");
$jq.addTranslate("GLOBAL_Open");

$jq(document).ready(
	function()
	{
		$jqs.ajaxSyncObj = function (data)
		{
			var returnData;
			var returnFunc = function(data)	{
				returnData = data;
			};
			$jq.ajax({
				type : 'POST',
				async : false,
				url : urlbase+"inc/ajax.i.php",
				data : data,
				success : returnFunc
			});
			return returnData;
		}

		$jq.include = function(url)
		{
			var m = document.createElement('script');
			m.setAttribute('type', 'text/javascript');
			m.setAttribute('src', url);
			m.setAttribute('language', "javascript");
			document.getElementsByTagName('head')[0].appendChild(m);
		}



		 /** ------------------------------------------------------------------------
		 *                               GLOBAL
		 * ------------------------------------------------------------------------ */
        
		$jqs.getTranslations = function (stringArray)
		{
			var jsonStringArray = JSON.stringify(stringArray);
			returnData = $jqs.ajaxSyncObj({
				page: 'global',
				fonction : 'get-translations',
				stringArray :  jsonStringArray
			});
			translations = JSON.parse(returnData);
			for(t in translations)
			{
				$jq.setTranslation(t, translations[t]);
			}
			return translations;
		}
        
		$jq.getTranslations = function(stringArray)
		{
			var jsonStringArray = JSON.stringify(stringArray);
            $jq.post(
				urlbase+"inc/ajax.i.php",
				{
                    page: 'global',
                    fonction : 'get-translations',
                    stringArray :  jsonStringArray
				},
				function(data)
				{
                    if(typeof data == "undefined" || data == "")
                    {
                        data = "{}";
                    }
                    translations = JSON.parse(data);
                    for(t in translations)
                    {
                        $jq.setTranslation(t, translations[t]);
                    }
                    
                    $jq.translationInit();
				}
			);
		}
        $jq.getTranslations($jq.toTranslate);
        
		$jq.setTranslation = function(key, value)
		{
			if ($jq.jamespotTranslations == null)
			{
				$jq.jamespotTranslations = new Array();
			}
            $jq.jamespotTranslations[key] = value;
		}

		$jq.translate = function(str)
		{
			if ($jq.jamespotTranslations != null ) {
				return $jq.jamespotTranslations[str];
			}
			return null;
		}

		$jqs.getPublicProperties = function (file, key)
		{
			data = $jqs.ajaxSyncObj({
				page: 'global',
				fonction : 'public-properties',
				file :  file,
				key : key
			});
			return data;
		}

		$jq.updatePublicProperties = function (file, key, value)
		{
			returnData = $jqs.ajaxSyncObj({
				page: 'global',
				fonction : 'public-update-properties',
				file :  file,
				key : key,
				value : value
			});
		}

		$jq.spotActivity = function (idArticle, module, wording, act_resource, act_url, act_title, json_params)
		{
			$jqs.ajaxSyncObj({
				page: 'spot',
				fonction : 'activity',
				idArticle : idArticle,
				module : module,
				wording : wording,
				act_resource : act_resource,
				act_url : act_url,
				act_title : act_title,
				json_params : json_params
			});
		}

		/** ------------------------------------------------------------------------
		 *                   USER  ASYNCHRONOUS FUNCTIONS
		 * ------------------------------------------------------------------------ */

		$jq.getIdUser = function (callBack)
		{
			$jq.post(
				urlbase+"inc/ajax.i.php",
				{
					page: 'user',
					fonction : "getIdUser"
				},
				function(data)
				{
					callBack(data);
				}
			);
		}

		//name = custom field label
		$jq.getUserCustomField = function (name, callBack)
		{
			$jq.post(
				urlbase+"inc/ajax.i.php",
				{
					page: 'user',
					fonction : "getUserCustomField",
					name:name
				},
				function(data)
				{
					callBack(data, name);
				}
			);
		}

		$jq.setUserCustomField = function (name, value, callBack)
		{
			$jq.post(
				urlbase+"inc/ajax.i.php",
				{
					page: 'user',
					fonction : "setUserCustomField",
					name:name,
					value: value
				},
				function(data)
				{
					if(callBack != null)
                    {
						callBack(data, name);
					}
				}
			);
		}

		$jq.getUserProperties = function (name, callBack)
		{
			$jq.post(
				urlbase+"inc/ajax.i.php",
				{
					page: 'user',
					fonction : "getUserProperties",
					name:name
				},
				function(data)
				{
					callBack(data, name);
				}
			);
		}

		$jq.setUserProperties = function (name, value, callBack)
		{
			$jq.post(
				urlbase+"inc/ajax.i.php",
				{
					page: 'user',
					fonction : "setUserProperties",
					name: name,
					value:value
				},
				function(data)
				{
					if(callBack != null)
                    {
						callBack(data, name);
					}
				}
			);
		}



		$jq.addContact = function (idContact, callBack)
		{
			$jq.post(
				urlbase+"inc/ajax.i.php",
				{
					page: 'user',
					fonction : "addContact",
					idContact: idContact
				},
				function(data)
				{
					if(callBack != null)
                    {
						callBack(data, idContact);
					}
				}
			);
		}

		$jq.removeContact = function (idContact, callBack)
		{
			$jq.post(
				urlbase+"inc/ajax.i.php",
				{
					page: 'user',
					fonction : "removeContact",
					idContact: idContact
				},
				function(data)
				{
					if(callBack != null)
                    {
						callBack(data, idContact);
					}
				}
			);
		}




		$jq.getArticleAttribute = function (name, idArticle, callBack)
		{
			$jq.post(
				urlbase+"inc/ajax.i.php",
				{
					page: 'spot',
					fonction : "getArticleAttribute",
					name:name,
					idArticle: idArticle
				},
				function(data)
				{
					callBack(data, name, idArticle);
				}
			);
		}

		$jq.updateArticleAttribute = function (name, idArticle, val, callBack)
		{
			$jq.post(
				urlbase+'inc/ajax.i.php',
				{
					page: 'spot',
					fonction : "updateArticleAttribute",
					name:name,
					idArticle: idArticle,
					value:val
				},
				function (data)
				{
					callBack(data, name, idArticle, val);
				}
			);
		}

		$jq.addComment = function (token, idArticle, comment, form, callBack)
		{
			$jq.post(
				urlbase,
				{
					action: 'ajax',
					group: 'comment',
					'function': "addComment",
                    token:token,
                    idArticle:idArticle,
                    comment:comment
				},
				function(data)
				{
					if(callBack != null)
                    {
						callBack(data, idArticle, form);
					}
				}
			);
		}

        /* ------------------------------------------------------------------------
         *                          SPECIFIC ANIMATION
         * ------------------------------------------------------------------------ */

        $jq(".slideUpComment").live('click',
            function()
            {
                var div = $jq(this).parents(".slideUpCommentContainer:first").find(".slideUpCommentElement");

                if(jQuery(div).css('display') == 'block')
                {
                    jQuery(div).hide();
                    jQuery(this).parents(".slideUpCommentContainer:first").find(".hideAndSlideUpComment").show('slide', {direction: "up"}, 200);
                }else{
                    jQuery(this).parents(".slideUpCommentContainer:first").find(".hideAndSlideUpComment").hide();
                    jQuery(div).show('slide', {direction: "up"}, 200,
                        function()
                        {
                            jQuery(div).find(".slideUpCommentFocus").focus();
                        }
                    );
                }
            }
        );

        $jq(".hideAndSlideUpComment").live('click',
            function()
            {
                $jq(this).hide();
                var div = $jq(this).parents(".hideAndSlideUpCommentContainer:first").find(".hideAndSlideUpCommentElement");

                jQuery(div).show('slide', {direction: "up"}, 200,
                    function()
                    {
                        jQuery(div).find(".hideAndSlideUpCommentFocus").focus();
                    }
                );
            }
        );
            
        $jq(".hideAndFocusCategory").live("click",
            function()
            {
                if($jq(this).hasClass("open"))
                {
                    $jq(this).removeClass("open").parents(".home_category:first").find(".home_spots_category").hide();
                }else{
                    $jq(this).addClass("open");
                    $jq(this).parents(".home_category:first").find(".home_spots_category").show();
                }
            }
        );
         
        /* ------------------------------------------------------------------------
         *                          MULTI FILE
         * ------------------------------------------------------------------------ */
        
        /*
        $jq.fileMultiple = new Array();
        
        $jq.idUniqueFileMultiple = function(name)
        {
            if(typeof $jq.fileMultiple[name] != "undefined")
            {
                $jq.fileMultiple[name]++;
                return $jq.fileMultiple[name];
            }else{
                $jq.fileMultiple[name] = 0;
                return $jq.fileMultiple[name];
            }
        }

        $jq.bindHandlerFileMultiple = function()
        {
            jQuery("input[type='file'].input_file_multiple").unbind();
            jQuery("input[type='file'].input_file_multiple").change(
                function()
                {
                    var name = $jq(this).attr("name");
                    var id = $jq(this).parents(".file_multiple:first").find("input[type='file'].input_file_multiple:first").attr("id");
                    var i = $jq.idUniqueFileMultiple(name);

                    if( i == 0 || (i>0 && $jq(this).parents(".file_multiple:first").find("input[type='file'].input_file_multiple:last").val() != ""))
                    {
                        $jq(this).parents(".file_multiple:first").append("<div class='div_input_file_multiple'><input type='file' name='"+name+"' id='"+id+i+"' class='input_file_multiple'><a href='javascript:void(0);' class='file_multiple_remove'><img src='/img/icons/delete.png' /></a></div>");
                        $jq(this).parents(".file_multiple:first").find(".file_multiple_remove").show();
                        $jq(this).parents(".file_multiple:first").find(".file_multiple_remove:last").hide();
                        $jq.bindHandlerFileMultiple();
                    }
                }
            );

            jQuery(".file_multiple_remove").click(
                function()
                {
                    $jq(this).parents(".div_input_file_multiple:first").remove();
                }
            );

            jQuery(".file_multiple_reset").click(
                function()
                {
                    $jq(this).parents(".div_input_file_multiple:first").find("input[type='file'].input_file_multiple").val("");
                }
            );
        }

		/* ------------------------------------------------------------------------
		 *                               INSTANT MESSAGING
		 * ------------------------------------------------------------------------ */

		$jq.imCurrentChatIdUser = null;
		$jq.imConversationsArray = new Array();
		$jq.imInvitationsHtml = '';
		$jq.imUsers = new Array();
		$jq.imUse = false;
		$jq.imShow = false;
		$jq.imTitlePage = "";
		$jq.imBlinkTitlePage = "";
		$jq.imConversationsTimer = null;
        $jq.imConversationLock = false;
		$jq.imBuddiesTimer = null;
        $jq.imBuddiesLock = false;

		$jq.imChatWith = function (idUser)
		{
			if (idUser == null) return;

			var currentIdUser = -1;
			var needSep = false;
			var previousIdUser = $jq.imCurrentChatIdUser;
			if(previousIdUser != idUser)
            {
				$jq.imHideConversation();
				if ($jq.imUsers[idUser]!= null)
				{
					pseudo = $jq.imUsers[idUser]["pseudo"];
				} else {
					pseudo = $jq('#IMInvitation_pseudo_' + idUser).html();
				}
                var html = '<img width="20" height="20" border="0" src="/userImg.php?idUser='+idUser+'" class="img-user">'+pseudo+"";
				$jq("#IMConversationHeader .IMconversation_person").html(html);
				$jq("#IMMsgForm_idUserTo").val(idUser);
			}

			// Build conversation with idUser :
			var conversationHtml = '';

			for (i in $jq.imConversationsArray) 
            {
				var msg = $jq.imConversationsArray[i];
				if (msg.invitation == 1 || msg.invitation == 2 ) continue;

				if (msg.idUserTo == idUser)
				{
					if (currentIdUser != msg.idUserFrom)
                    {
						if (needSep)
                        {
								conversationHtml += '<div class="IMConversionSep">&nbsp;</div>';
						}else{
							needSep = true;
						}
						currentIdUser = msg.idUserFrom;
						conversationHtml += '<div class="IMConversionImgContainer"><img width="30" height="30" border="0" src="/userImg.php?idUser='+currentIdUser+'" class="IMConversionImg" /></div>';
					}
                    
                    
                    var date = new Date(msg.dateCreation);
                    var dateText = "";
                    dateText = $jq.utils.lpad(date.getDate(), 2, "0")+"/"+$jq.utils.lpad(date.getMonth()+1, 2, "0")+"/"+date.getFullYear()+" "+(date.getHours())+":"+(date.getMinutes());
                    conversationHtml += '<div class="IMConversation">'+ $jq.imProcessText(msg.msg) +'<div class="IM_date small_text">'+dateText+'</div></div>' ;
                    //conversationHtml += '<div class="IMConversation">' + $jq.imProcessText(msg.msg) +'<div class="IM_date small_text">'+dateText+'</div></div>';
				}
				if (msg.idUserFrom == idUser)
				{
					if (currentIdUser != idUser)
                    {
						if (needSep)
                        {
								conversationHtml += '<div class="IMConversionSep">&nbsp;</div>';
						}else{
							needSep = true;
						}
						currentIdUser = idUser;
						conversationHtml += '<div class="IMConversionImgContainer"><img width="30" height="30" border="0" src="/userImg.php?idUser='+currentIdUser+'" class="IMConversionImg"></div>';
					}
                    
                    var date = new Date(msg.dateCreation);
                    var dateText = "";
                    dateText = $jq.utils.lpad(date.getDate(), 2, "0")+"/"+$jq.utils.lpad(date.getMonth()+1, 2, "0")+"/"+date.getFullYear()+" "+(date.getHours())+":"+(date.getMinutes());
                    conversationHtml += '<div class="IMConversation">'+ $jq.imProcessText(msg.msg) +'<div class="IM_date small_text">'+dateText+'</div></div>' ;
				}
			}

            if($jq.windowFocus)
            {
                $jq("#IMBuddy_id_"+ idUser).removeClass("unread");
                $jq.imUpdateReadAjax(idUser, $jq.imConversationsArray.length);
            }
			$jq("#IMMsgTransmitted").html(conversationHtml);

			if (previousIdUser != idUser)
			{
				$jq.imShowConversation(idUser);
			}
			setTimeout("$jq('#IMMsgForm_msg').focus()", 500);
			$jq("#IMMsgTransmitted").animate({scrollTop : 10000},'fast');
		}

		$jq.imShowConversation = function (idUser)
		{
			if ($jq.imShow == false) return;

            $jq("#IMConversations #IMConversations_content").show();
			$jq.imCurrentChatIdUser = idUser;
		}

		$jq.imHideConversation = function ()
		{
            $jq("#IMConversations #IMConversations_content").hide();
			$jq.imCurrentChatIdUser = null;
		}

		$jq.imSubmitMsg = function ()
		{
			var msg= $jq("#IMMsgForm_msg").val();
			var idUserTo = $jq("#IMMsgForm_idUserTo").val();
			$jq.imSendMessage(idUserTo,msg);
			$jq("#IMMsgForm_msg").val('');
		}

		$jq.imShowBuddies = function ()
		{
			if ($jq.imShow == false) return;

			if ($jq("#IMBuddies").css('display') != 'block')
            {
				$jq("#IMBuddies").show('slide',{direction: "down"},200);
			}
		}

		$jq.imHideBuddies = function ()
		{
			if ($jq("#IMBuddies").css('display') == 'block')
            {
				$jq("#IMBuddies").hide('slide',{direction: "down"},200);
			}
		}

		$jq.imToggleBuddies = function ()
		{
			if($jq("#IMBuddies").css('display') == 'block')
			{
				$jq.imHideBuddies();
				$jq.imHideConversation();
			} else{
				$jq.imShowBuddies();
			}
		}

		$jq.imSwitchConfigUse = function ()
		{
			if($jq("#IMConfig-use").css('display') == 'block')
			{
				$jq("#IMConfig-use").hide('slide', {direction: "down"}, 200);
			}else{
				$jq("#IMConfig-use").show('slide',{direction: "down"}, 200);
			}
		}

		$jq.imSwitchConfigNotUse = function ()
		{
			if($jq("#IMConfig-notuse").css('display') == 'block')
			{
				$jq("#IMConfig-notuse").hide('slide', {direction: "down"}, 200);
			}else{
				$jq("#IMConfig-notuse").show('slide',{direction: "down"}, 200);
			}
		}

		$jq.imUpdateBuddyList = function()
		{

            if($jq.imBuddiesLock)
            {
                return;
            }
            $jq.imBuddiesLock = true;
			if ($jq.imBuddiesTimer != null)
			{
				clearTimeout($jq.imBuddiesTimer);
				$jq.imBuddiesTimer = null;
			}

			$jq.post(
				urlbase+'inc/ajax.i.php',
				{
					page: 'im',
					fonction : "buddy-list"
				},
				function (data)
				{
		            $jq.imBuddiesLock = false;
                    if($jq.imUse == false)
                    {
                        return;
                    }
					var buddies = JSON.parse(data);
                    
					var shouldOpen = false;
                    var buddyHtml = "";
                    for(i in $jq.imUsers)
                    {
                        if(typeof $jq.imUsers[i] != "function")
                        {
                            $jq.imUsers[i]["parse"] = false;
                        }
                    }

					for(y in buddies)
					{
                        if(typeof buddies[y] != "function")
                        {
                            var idUser = buddies[y]["idUser"];
                            var pseudo = buddies[y]["pseudo"];
                            var unread = buddies[y]["unread"];
                            
                            if($jq.imUsers[idUser] != null)
                            {
                                if($jq.imUsers[idUser]["unread"] != unread)
                                {
                                    if(unread)
                                    {
                                        $jq("#IMBuddy_id_"+idUser).addClass("unread");
                                        $jq("#IMBuddy_id_"+idUser).addClass("blink_on");
                                        shouldOpen = true;
                                    }else{
                                        $jq("#IMBuddy_id_"+idUser).removeClass("unread");
                                        $jq("#IMBuddy_id_"+idUser).removeClass("sound");
                                        $jq("#IMBuddy_id_"+idUser).removeClass("blink_on");
                                        $jq("#IMBuddy_id_"+idUser).removeClass("blink_off");
                                    }
                                    $jq.imUsers[idUser] = buddies[y];
                                }
                                $jq.imUsers[idUser]["parse"] = true;
                            }else{
                                var unreadClass = "";
                                if(unread)
                                {
                                    unreadClass = ' unread blink_on';
                                    shouldOpen = true;
                                }
                                buddyHtml += '<div class="IMBuddy'+unreadClass+'" id="IMBuddy_id_'+ idUser +'">'+
                                    '<img width="20" height="20" border="0" src="/userImg.php?idUser='+ idUser +'" class="img-user"><span class="buddy_list_pseudo">'+ pseudo +'</span>'+
                                    '<div class="clear"></div>'+
                                    '</div>';
                                
                                $jq.imUsers[idUser] = buddies[y];
                                $jq.imUsers[idUser]["parse"] = true;
                            }
                        }
                    }
                    
					var currentInvitations = new Array();
					var invitations = '';
					for (i in $jq.imConversationsArray) {
						var msg = $jq.imConversationsArray[i];
						if (msg.invitation != 1) continue;

						if (currentInvitations[msg.idUserFrom] == null)
						{
							currentInvitations[msg.idUserFrom] = msg;
							invitations += '<div class="IMInvitation unread blink_on" id="IMInvitation_id_'+ msg.idUserFrom +'">'+
                                    '<img width="20" height="20" border="0" src="/userImg.php?idUser='+ msg.idUserFrom +'" class="img-user"><span class="invitation_pseudo" id="IMInvitation_pseudo_'+ msg.idUserFrom +'">'+ msg.msg +'</span></div>'+
                                    '<div class="clear"></div>'+
									'<div class="IMInvitationAction" id="IMInvitation_accept_'+ msg.idUserFrom +'" >'+$jq.translate('IM_AcceptInvitation')+'</div>'+
									'<div class="IMInvitationAction" id="IMInvitation_ignore_'+ msg.idUserFrom +'">'+$jq.translate('IM_IgnoreInvitation')+'</div>'+
                                    '<div class="clear"></div>';
						}
					}
					if (invitations != $jq.imInvitationsHtml) {
						$jq.imInvitationsHtml = invitations;
						$jq('#IMInvitationsList').html(invitations);
						$jq('.IMInvitationAction').click($jq.imInvitationAction);
						if (invitations == '') $jq('#IMInvitations').hide();
						else $jq('#IMInvitations').show();
						shouldOpen = true;
					}


					var usersTemp = new Array();
                    for(x in $jq.imUsers)
                    {
                        if(typeof $jq.imUsers[x] != "function")
                        {
                            if(!$jq.imUsers[x]["parse"])
                            {
                                $jq("#IMBuddy_id_"+$jq.imUsers[x]["idUser"]).remove();
                            }else{
                                usersTemp[x] = $jq.imUsers[x];
                            }
                        }
                    }
                    $jq.imUsers = new Array();
                    $jq.imUsers = usersTemp;

                    $jq('#IMBuddyList').append(buddyHtml);
                    $jq('#IMMainCount').html("(" + buddies.length + ")");
                   
					if(shouldOpen == true)
					{
						 $jq.imShowBuddies();
					}
                    
                    $jq.imReloadTrigger();

                    $jq.imBuddiesTimer = setTimeout("$jq.imUpdateBuddyList()", 5000);
				}
			);
		}

		$jq.imInvitationAction = function()
		{
			var actionId = this.id;
			var actionArray = actionId.split('_');
			var idUserFrom = actionArray[2];
			if (actionArray[1] == 'accept')
			{
				$jq.imAcceptInvitation(idUserFrom);

			} else if (actionArray[1] == 'ignore')
			{
				$jq.imIgnoreInvitation(idUserFrom);
			}


		}

		$jq.imIgnoreInvitation = function(idUserFrom)
        {
			for (i in $jq.imConversationsArray) {
				var msg = $jq.imConversationsArray[i];
				if (msg.idUserFrom == idUserFrom  && msg.invitation == 1)
				{
					msg.invitation = 2;
				}
			}
            $jq.post(
				urlbase+'inc/ajax.i.php',
				{
					page: 'im',
					fonction : "ignore-invitation",
					idUserFrom: idUserFrom

				},
                function(data)
                {
                    $jq.imUpdateBuddyList();
                }
            );
        }

		$jq.imAcceptInvitation = function(idUserFrom)
        {
			for (i in $jq.imConversationsArray) {
				var msg = $jq.imConversationsArray[i];
				if (msg.idUserFrom == idUserFrom && msg.invitation == 1)
				{
					msg.invitation = 2;
				}
			}
            $jq.post(
				urlbase+'inc/ajax.i.php',
				{
					page: 'im',
					fonction : "accept-invitation",
					idUserFrom: idUserFrom

				},
                function(data)
                {
                    $jq.imUpdateBuddyList();
/*
					pseudo = $jq('#IMInvitation_pseudo_' + idUserFrom).html();
					$jq.imUsers[idUserFrom] = new Array();
					$jq.imUsers[idUserFrom]['pseudo'] = pseudo;
					$jq.imUsers[idUserFrom]['idUser'] = idUserFrom;
					$jq.imUsers[idUserFrom]['unread'] = true;
*/
					$jq.imChatWith(idUserFrom);
                }
            );
        }

		$jq.imSendMessage = function(idUserTo, msg)
        {
            $jq.post(
				urlbase+'inc/ajax.i.php',
				{
					page: 'im',
					fonction : "send-message",
					idUserTo: idUserTo,
					msg: msg

				},
                function(data)
                {
                    $jq.imUpdateConversations();
                }
            );
        }
        
		$jq.imUpdateConversations = function ()
		{
            if($jq.imConversationLock)
            {
                return;
            }
            $jq.imConversationLock = true;
			if ($jq.imConversationsTimer != null)
			{
				clearTimeout($jq.imConversationsTimer);
				$jq.imConversationsTimer = null;
			}

			var start = $jq.imConversationsArray.length;
			$jq.post(
				urlbase+'inc/ajax.i.php',
				{
					page: 'im',
					fonction : "update-conversations",
					start: start
				},
				function (data)
				{
                    $jq.imConversationLock = false;
                    if($jq.imUse == false)
                    {
                        return;
                    }
					var newMsgs = JSON.parse(data);
					if (newMsgs.length > 0)
                    {
						for (var i = 0; i <newMsgs.length; i++)
						{
							$jq.imConversationsArray.push(newMsgs[i]);
							var idUserFrom = newMsgs[i].idUserFrom;
							if (idUserFrom != $jq.idUser && newMsgs[i].read == false)
							{
								$jq('#IMBuddy_id'+ idUserFrom +'_unread').addClass('unread');
							}
						}
						// Reload conversation
						$jq.imChatWith($jq.imCurrentChatIdUser,'');
					}

                    $jq.imConversationsTimer = setTimeout("$jq.imUpdateConversations()", 2000);
				}
			);
		}



		$jq.imUpdateReadAjax= function(idUserTo, start)
		{
			$jq.post(
				urlbase+'inc/ajax.i.php',
				{
					page: 'im',
					fonction : "update-read",
					idUserTo: idUserTo,
					start: start

				}
			);
		}

        $jq.imEnable = function()
        {
            $jq.post(
                urlbase+'inc/ajax.i.php',
                {
                    page: 'im',
                    fonction : "manage",
                    imUse:1
                },
                function()
                {
                    $jq.imUse = true;

                    $jq("#IMMainTitle").unbind();
                    $jq("#IMConversationHeader").unbind();
                    $jq("#IMBuddiesHeaderContent").unbind();
                    $jq("#IMBuddiesHeader .IMBuddies-options").unbind();
                    
                    $jq("#IMConfig-notuse").hide();
                    
                    $jq.imConversationLock = false;
                    
                    $jq.imInit();
                }
            );
        }

        $jq.imDisable = function()
        {
            $jq.post(
                urlbase+'inc/ajax.i.php',
                {
                    page: 'im',
                    fonction : "manage",
                    imUse:0
                },
                function()
                {
                    $jq.imUse = false;

                    $jq("#IMMainTitle").unbind();
                    $jq("#IMConversationHeader").unbind();
                    $jq("#IMBuddiesHeaderContent").unbind();
                    $jq("#IMBuddiesHeader .IMBuddies-options").unbind();
                    
                    $jq("#IMConfig-use").hide();
                    
                    $jq("#IMMainCount").text("");
                    $jq.imHideConversation();

                    $jq.imConversationLock = false;
                    
                    $jq.imHideBuddies();
                    
                    $jq.imInit();
                }
            );
        }

		$jq.imInit = function()
        {
            $jq.imTitlePage = $jq("title").html();
            $jq.imReloadTrigger();
            $jq.imBlinkUnread();
            $jq.post(
                urlbase+'inc/ajax.i.php',
                {
                    page: 'im',
                    fonction : "manage"
                },
                function (data)
                {
                    if(data.length > 5)
                    {
                        manage = JSON.parse(data);
						if (manage.IM_Show == "1" || manage.IM_Show == "")
						{
							$jq.imShow = true;
						} else
						{
							$jq.imShow = false;
						}
						if (manage.IM_Use == "1" || manage.IM_Use == "")
						{
							$jq.imUse = true;
						} else
						{
							$jq.imUse = false;
						}
                        
                        if ($jq.imShow == true)
                        {
                            $jq("#IMMainTitle").show();
                        }

                        if ($jq.imUse == true)
                        {
                            $jq.imHideBuddies();
                            $jq.imHideConversation();
                            $jq("#IMMainTitle").click($jq.imToggleBuddies);
                            $jq("#IMConversationHeader").click($jq.imHideConversation);
                            $jq("#IMBuddiesHeaderContent").click($jq.imHideBuddies);
                            $jq("#IMBuddiesHeader .IMBuddies-options").click($jq.imSwitchConfigUse);
                            $jq.imUpdateBuddyList();
                            $jq.imUpdateConversations();
                        }

                        if($jq.imShow == true && $jq.imUse == false)
                        {
                            $jq("#IMMainTitle").click($jq.imSwitchConfigNotUse);
                        }

                        if (manage.translations != null)
                        {
                            for(t in manage.translations)
                            {
                                $jq.setTranslation(t, manage.translations[t]);
                            }
                        }
                        $jq("#IMMainTitleTxt").html($jq.translate('IM_MainTitleTxt'));
                        $jq("#IMEnableTxt").html($jq.translate('IM_EnableTxt'));
                        $jq("#IMDisableTxt").html($jq.translate('IM_DisableTxt'));
						$jq("#IMInvitationsHeader").html($jq.translate('IM_InvitationsHeaderTxt'));
                        $jq("#IMBuddiesHeaderTxt span").html($jq.translate('IM_ConfigurationTxt'));
                        $jq.imBlinkTitlePage  = $jq.translate('IM_BlinkTitle');
                    }
                }
            );
		}

        $jq.imReloadTrigger= function()
        {
            $jq(".IMBuddy").unbind();
            $jq(".IMBuddy").click(
                function()
                {
                    var idUser = this.id.replace('IMBuddy_id_', '');

                    if($jq.imCurrentChatIdUser == idUser)
                    {
                        $jq.imHideConversation();
                    }else{
                        $jq.imChatWith(idUser);
                    }
                }
            );
        }

        $jq.imBlinkUnread = function()
        {
            if(!$jq.windowFocus && ($jq(".IMBuddy.unread").length || $jq(".IMInvitation.unread").length) )
            {
                if($jq("title").html() == $jq.imTitlePage)
                {
                    document.title = $jq.imBlinkTitlePage;
                }else{
                    document.title = $jq.imTitlePage;
                }
            }else{
                document.title = $jq.imTitlePage;
            }
            
            if($jq(".IMBuddy.unread").length && !$jq(".IMBuddy.unread").hasClass("sound"))
            {
                $jq("#soundNewMsg").remove();
                
                $jq("body").append('<audio controls="controls" id="soundNewMsg" autoplay="autoplay"><source src="'+urlbase+'sound/notify.wav" type="audio/wav" /><source src="'+urlbase+'sound/notify.mp3" type="audio/mp3" /></audio>');
                //$jq("body").append('<embed id="soundNewMsg" src="'+urlbase+'sound/notify.wav" autostart="true" hidden="true" volume=100></embed>');
                $jq(".IMBuddy.unread").addClass("sound");
            }
            
            if($jq(".IMBuddy.unread").hasClass("blink_on"))
            {
                $jq(".IMBuddy.unread").removeClass("blink_on");
                $jq(".IMBuddy.unread").addClass("blink_off");

            }else if($jq(".IMBuddy.unread").hasClass("blink_off")){

                $jq(".IMBuddy.unread").removeClass("blink_off");
                $jq(".IMBuddy.unread").addClass("blink_on");
            }else if($jq(".IMInvitation.unread").hasClass("blink_off")){

                $jq(".IMInvitation.unread").removeClass("blink_off");
                $jq(".IMInvitation.unread").addClass("blink_on");
            }else if($jq(".IMInvitation.unread").hasClass("blink_on")){
                $jq(".IMInvitation.unread").removeClass("blink_on");
                $jq(".IMInvitation.unread").addClass("blink_off");
            }

            setTimeout("$jq.imBlinkUnread()", 500);
        }

        $jq.imProcessText = function(value)
        {
            value = $jq.imRemplaceLink(value);
            value = $jq.imRemplaceEmoticons(value);
            return value;
        };
        
        // :) ;) :( 8) :s :| :p :D xD ^^
        $jq.imEmoticons = new Array();
        $jq.imEmoticons[":)"] = "smile.png";
        $jq.imEmoticons[":-)"] = "smile.png";
        $jq.imEmoticons[";)"] = "wink.png";
        $jq.imEmoticons[";-)"] = "wink.png";
        $jq.imEmoticons[":("] = "sad.png";
        $jq.imEmoticons[":-("] = "sad.png";
        $jq.imEmoticons["8)"] = "cool.png";
        $jq.imEmoticons[":s"] = "hmm.png";
        $jq.imEmoticons[":|"] = "neutral.png";
        $jq.imEmoticons[":p"] = "tongue.png";
        $jq.imEmoticons[":D"] = "big_smile.png";
        $jq.imEmoticons[":D"] = "big_smile.png";
        $jq.imEmoticons["xD"] = "xD.png";
        $jq.imEmoticons["^^"] = "^^.png";

        $jq.imRemplaceEmoticons = function(value)
        {
            for(emote in $jq.imEmoticons)
            {
                if(typeof $jq.imEmoticons[emote] != "function")
                {
                    value = value.replace(emote, " <img src='"+urlbase+"img/emoticons/"+$jq.imEmoticons[emote]+"' alt='"+emote+"'/> ");
                }
            }
            return value;
        }

        $jq.imRemplaceLink = function(value)
        {
            //URLs starting with http://, https://, or ftp://
            exp1 = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/ig;
            value = value.replace(exp1, "<a href='$1' target='_blank'>$1</a>");

            //URLs starting with www. (without // before it, or it'd re-link the ones done above)
            exp2 = /(^|[^\/])(www\.[\S]+(\b|$))/gi;
            value = value.replace(exp2, '$1<a href="http://$2" target="_blank">$2</a>');
            
            //Change email addresses to mailto::links
            exp3 = /\b([A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4})\b/gi;
            value = value.replace(exp3, '<a href="mailto:$1">$1</a>');
            
            return value;
        }
        
		/** ------------------------------------------------------------------------
		 *                   USER SYNCHRONOUS FUNCTIONS
		 * ------------------------------------------------------------------------ */

		$jqs.getIdUser = function()
		{
			return $jqs.ajaxSyncObj({
				page: 'user',
				fonction : "getIdUser"
			});
		}

		$jqs.getUser = function()
		{
			var returnData = $jqs.ajaxSyncObj({
				page: 'user',
				fonction : "getUser"
			});
                        var user = JSON.parse(returnData);
                        return user;
		}

		$jqs.getUserCustomField = function (name)
		{
			return $jqs.ajaxSyncObj({
				page: 'user',
				fonction : "getUserCustomField",
				name:name
			});
		}

		$jqs.setUserCustomField = function (name, value)
		{
			return $jqs.ajaxSyncObj({
				page: 'user',
				fonction : "setUserCustomField",
				name:name,
				value: value
			});
		}

		$jqs.getUserProperties = function (name, idUser)
		{
                    if(typeof idUser == 'undefined')
                    {
                        return $jqs.ajaxSyncObj(
                            {
                                page: 'user',
                                fonction : "getUserProperties",
                                name:name
                            }
                        );
                    }else{
                        return $jqs.ajaxSyncObj(
                            {
                                page: 'user',
                                fonction : "getUserProperties",
                                idUser:idUser,
                                name:name
                            }
                        );
                    }
		}

		$jqs.setUserProperties = function (name, value)
		{
			return $jqs.ajaxSyncObj({
				page: 'user',
				fonction : "setUserProperties",
				name: name,
				value:value
			});
		}

		$jqs.addContact = function (idContact)
		{
			return $jqs.ajaxSyncObj({
				page: 'user',
				fonction : "addContact",
				idContact: idContact
			});
		}

		$jqs.removeContact = function (idContact)
		{
			return $jqs.ajaxSyncObj({
				page: 'user',
				fonction : "removeContact",
				idContact: idContact
			});
		}

		$jqs.getArticleAttribute = function (name, idArticle)
		{
			return $jqs.ajaxSyncObj({
				page: 'spot',
				fonction : "getArticleAttribute",
				name:name,
				idArticle: idArticle
			});
		}

		$jqs.updateArticleAttribute = function (name, idArticle, val)
		{
			return $jqs.ajaxSyncObj({
				page: 'spot',
				fonction : "updateArticleAttribute",
				name:name,
				idArticle: idArticle,
				value:val
			});
		}
        
        $jq.windowFocus = true;
        if($jq.browser.msie)
        {
            // IE EVENTS
            $jq(document).bind('focusout',
                function()
                {
                    $jq.windowFocus = false;
                }
            );

            $jq(document).bind('focusin',
                function()
                {
                    $jq.windowFocus = true;
                }
            );
        }else{
            $jq(window).blur(
                function()
                {
                    $jq.windowFocus = false;
                }
            );

            $jq(window).focus(
                function()
                {
                    $jq.windowFocus = true;
                }
            );
        }
        
        $jq.translationInit = function()
        {
            $jq.blockUser.init();
        }
        
        $jq.uploadAjaxFile.init();
        $jq.animation.init();
    }
);


/*
#############################################################################
#############################################################################
#############################################################################
#############################################################################
#############################################################################
#############################################################################
*/

$jq.utils = 
{
    lpad : function(str, length, padString)
    {
        if(typeof str != "string")
        {
            str = str.toString();
        }
        if(typeof str == "string")
        {
            while (str.length < length)
                str = padString + str;
        }
        return str;
    },
    
    rpad : function(str, length, padString) 
    {
        if(typeof str != "string")
        {
            str = str.toString();
        }
        if(typeof str == "string")
        {
            while (str.length < length)
                str = str + padString;
        }
        return str;
    }
}


/* ------------------------------------------------------------------------
 *                              DEFAULT ANIMATION
 * ------------------------------------------------------------------------ */
$jq.animation =
{
    init:function()
    {
        this.bindHandler();
    },

    getDirection:function(div)
    {
        var fUp = $jq(div).hasClass("up");
        var fDown = $jq(div).hasClass("down");
        var fRight = $jq(div).hasClass("right");
        var fLeft = $jq(div).hasClass("left");
        if(fUp)
        {
            return "up";
        }else if(fDown){
            return "down";
        }else if(fRight){
            return "right";
        }else if(fLeft){
            return "left";
        }
        return "";
    },

    bindHandler:function()
    {
        /*
        $jq(".jqSlide").unbind();
        $jq(".jqHideAndSlide").unbind();
        $jq(".jqShowHoverContainer").unbind();
        */

        $jq(".jqSlide").live('click',
            function()
            {
                var parent = $jq(this).parents(".jqSlideContainer:first");
                var div = $jq(parent).find(".jqSlideElement").not($jq(parent).find(".jqSlideContainer .jqSlideElement"));

                if(jQuery(div).css('display') == 'block')
                {
                    jQuery(div).hide();
                }else{
                    var movement = $jq.animation.getDirection(div);
                    jQuery(div).show('slide', {direction: movement}, 200,
                        function()
                        {
                            jQuery(div).find(".jqSlideFocus").focus();
                        }
                    );
                }
            }
        );

        $jq(".jqHideAndSlide").live('click',
            function()
            {
                $jq(this).hide();

                var parent = $jq(this).parents(".jqHideAndSlideContainer:first");
                var div = $jq(parent).find(".jqHideAndSlideElement").not($jq(parent).find(".jqHideAndSlideContainer .jqHideAndSlideElement"));
                var movement = $jq.animation.getDirection(div);
                jQuery(div).show('slide', {direction: movement}, 200,
                    function()
                    {
                        jQuery(div).find(".jqHideAndSlideFocus").focus();
                    }
                );
            }
        );

        $jq(".jqShowHoverContainer").live("mouseenter mouseleave", 
            function(event)
            {
                if(event.type == "mouseenter")
                {
                    $jq(this).find(".jqShowHover").show();
                }else if(event.type == "mouseleave"){
                    $jq(this).find(".jqShowHover").hide();
                    $jq(this).find(".jqShowHover").find(".jqShowHoverHideElement").hide();
                }
            }
        );
    }
}

/** ------------------------------------------------------------------------
 *                             FAVORITES
 * ------------------------------------------------------------------------ */

$jq.favorites = 
{
    favorites:[],
    hover:false,

    init:function()
    {
        $jq.getUserProperties('favorite_links', $jq.favorites.load);
    },

    load:function(data, name)
    {
        if(data != "")
        {
            $jq.favorites.favorites = JSON.parse(data);
        }
        $jq("#favorites_content table#favoriteSort").html("<tr></tr>");
        $jq("#favorites_list table#favorites").html("<tr></tr>");

        for(i in $jq.favorites.favorites)
        {
            if(typeof $jq.favorites.favorites[i] != "function")
            {
                $jq.favorites.attachFavorite($jq.favorites.favorites[i]);
            }
        }
        $jq.favorites.bindHandler();
    },

    attachFavorite:function(favorite)
    {
        var output = "<tr class='favorite'>\n\
                        <td class='draggable'><img src='"+urlbase+"/img/draggable.gif' alt='draggable' /><input type='hidden' name='favorite' value='"+JSON.stringify(favorite)+"'</td>\n\
                        <td class='jqShowHoverContainer'>\n\
                            <div class='favoriteActions jqShowHover'><a href='javascript:void(0)' class='editFavorite'><img src='"+urlbase+"/img/icons/link_edit.png' alt='"+$jq.translate("GLOBAL_Edit")+"' title='"+$jq.translate("GLOBAL_Edit")+"'/></a> <a href='javascript:void(0)' class='removeFavorite'><img src='"+urlbase+"/img/icons/delete.png' alt='"+$jq.translate("GLOBAL_delete")+"' title='"+$jq.translate("GLOBAL_Delete")+"'/></a></div>\n\
                            <a href='"+favorite["url"]+"' class='favoriteLink'>"+favorite["label"]+"</a>\n\
                        </td>\n\
                    </tr>";
        var outputList = "<tr>\n\
                        <td class='jqShowHoverContainer'>\n\
                            <a href='"+favorite["url"]+"' class='favoriteLink'>"+favorite["label"]+"</a>\n\
                        </td>\n\
                    </tr>";
        $jq("#favorites_content table#favoriteSort tbody tr:last").after(output);
        $jq("#favorites_list table#favorites tbody tr:last").after(outputList);
    },

    attachViewFavorite:function(favorite)
    {
        var outputList = "<tr>\n\
                        <td class='jqShowHoverContainer'>\n\
                            <a href='"+favorite["url"]+"' class='favoriteLink'>"+favorite["label"]+"</a>\n\
                        </td>\n\
                    </tr>";
        $jq("#favorites_list table#favorites tbody tr:last").after(outputList);
    },

    addFavorite:function(label, url)
    {
        var favorite = new Object();
        favorite["label"] = label;
        favorite["url"] = url;
        this.favorites.push(favorite);
        this.save();

        this.attachFavorite(favorite);

        $jq.favorites.bindHandler();
    },

    rebuildViewList:function()
    {
        $jq("#favorites_list table#favorites").html("<tr></tr>");

        for(i in $jq.favorites.favorites)
        {
            if(typeof $jq.favorites.favorites[i] != "function")
            {
                $jq.favorites.attachViewFavorite($jq.favorites.favorites[i]);
            }
        }
    },

    rebuildFavorite:function()
    {
        var tmpFavorites = new Array();
        $jq("#favoriteSort tbody .favorite").each(
            function()
            {
                var favorite = JSON.parse($jq(this).find("input[name='favorite']").val());
                tmpFavorites.push(favorite);
            }
        );
        $jq.favorites.favorites = tmpFavorites;
        $jq.favorites.rebuildViewList();
        $jq.favorites.save();
    },

    save:function()
    {
        $jq.setUserProperties('favorite_links', JSON.stringify(this.favorites));
    },

    hide:function()
    {
        if(!this.hover)
        {
            $jq("#favorites_content").hide();
            /*
            $jq("#favorites_config").hide();
            $jq("#formAddFavorite input[name='label']").val("");
            $jq("#formAddFavorite input[name='url']").val("");
            $jq("#formAddFavorite").hide();
            $jq("#formEditFavorite input[name='label']").val("");
            $jq("#formEditFavorite input[name='url']").val("");
            $jq("#formEditFavorite").hide();
            */
        }
    },

    bindHandler:function()
    {
        $jq("#settingsFavorites").unbind();
        $jq("#addFavorites").unbind();
        $jq("#linkAddFavorite").unbind();
        $jq("#linkSubmitAddFavorite").unbind();
        $jq("#favoriteSort tbody").unbind();
        $jq("#favorites_config").unbind();
        $jq("#favorites_content").unbind();

        $jq("#settingsFavorites").click(
            function()
            {
                if($jq("#favorites_config").css("display") != "block")
                {
                    $jq("#favorites_config").show('slide', {direction: "up"}, 200);
                }else{
                    $jq("#favorites_config").hide();
                    $jq("#formAddFavorite input[name='label']").val("");
                    $jq("#formAddFavorite input[name='url']").val("");
                    $jq("#formAddFavorite").hide();
                    $jq("#formEditFavorite input[name='label']").val("");
                    $jq("#formEditFavorite input[name='url']").val("");
                    $jq("#formEditFavorite").hide();
                }
            }
        );                    

        $jq("#addFavorites").click(
            function()
            {
                var label = "";
                if(label=prompt($jq.translate("FAVORITE_Title"), document.title))
                {
                    var url = window.location.href;
                    $jq.favorites.addFavorite(label, url);
                }
            }
        );

        $jq("#addFavorites").hover(
            function()
            {
                if($jq("#favorites_content").css("display")!="block")
                {
                    $jq("#favorites_content").show('slide', {direction: "up"}, 200);
                }
            }
        );

        $jq("#favorites_content").hover(
            function()
            {
                $jq.favorites.hover=true;
            },
            function()
            {
                $jq.favorites.hover=false;
                setTimeout("$jq.favorites.hide()",200);
            }
        );

        $jq("#linkAddFavorite").click(
            function()
            {
                if($jq("#formAddFavorite").css('display') == 'block')
                {
                    $jq("#formAddFavorite").hide();
                }else{
                    $jq("#formAddFavorite").show('slide', {direction: "up"}, 200);

                    jQuery("#formEditFavorite input[name='label']").val("");
                    jQuery("#formEditFavorite input[name='url']").val("");
                    jQuery("#formEditFavorite").hide();
                }
            }
        );
        $jq("#linkSubmitAddFavorite").click(
            function()
            {
                var label = jQuery("#formAddFavorite input[name='label']").val();
                var url = jQuery("#formAddFavorite input[name='url']").val();
                if(label == '' || url == '')
                {
                    alert($jq.translate("FAVORITE_Empty_Field"));
                }else{
                    jQuery("#formAddFavorite input[name='label']").val("");
                    jQuery("#formAddFavorite input[name='url']").val("");
                    jQuery("#formAddFavorite").hide();
                    if(url.substr(0,4) != "http")
                    {
                        url = "http://"+url;
                    }

                    $jq.favorites.addFavorite(label, url);
                }
            }
        );
        $jq(".editFavorite").click(
            function()
            {
                $jq(".favorite.edit").removeClass("edit");
                var favorite = JSON.parse($jq(this).parents(".favorite:first").find("input[name='favorite']").val());

                $jq(this).parents(".favorite:first").addClass("edit");

                $jq("#formEditFavorite input[name='label']").val(favorite["label"]);
                $jq("#formEditFavorite input[name='url']").val(favorite["url"]);
                $jq("#formEditFavorite").show('slide', {direction: "up"}, 200);

                jQuery("#formAddFavorite input[name='label']").val("");
                jQuery("#formAddFavorite input[name='url']").val("");
                jQuery("#formAddFavorite").hide();
            }
        );
        $jq("#linkSubmitEditFavorite").click(
            function()
            {
                var label = jQuery("#formEditFavorite input[name='label']").val();
                var url = jQuery("#formEditFavorite input[name='url']").val();
                if(label == '' || url == '')
                {
                    alert($jq.translate("FAVORITE_Empty_Field"));
                }else{
                    jQuery("#formEditFavorite input[name='label']").val("");
                    jQuery("#formEditFavorite input[name='url']").val("");
                    jQuery("#formEditFavorite").hide();
                    if(url.substr(0,4) != "http")
                    {
                        url = "http://"+url;
                    }

                    var favorite = new Object();
                    favorite["label"] = label;
                    favorite["url"] = url;

                    $jq(".favorite.edit input[name='favorite']").val(JSON.stringify(favorite));
                    $jq(".favorite.edit a.favoriteLink").attr("href", url);
                    $jq(".favorite.edit a.favoriteLink").html(label);
                    $jq(".favorite.edit").removeClass("edit");

                    $jq.favorites.rebuildFavorite();
                }
            }
        );
        $jq("#linkCancelEditFavorite").click(
            function()
            {
                jQuery("#formEditFavorite input[name='label']").val("");
                jQuery("#formEditFavorite input[name='url']").val("");
                jQuery("#formEditFavorite").hide();
            }
        );
        $jq(".removeFavorite").click(
            function()
            {
                $jq(this).parents(".favorite:first").remove();
                $jq.favorites.rebuildFavorite();
            }
        );

        $jq("#favoriteSort tbody").sortable(
            {
                axis:'y',
                update: function(event, ui)
                {
                    $jq.favorites.rebuildFavorite();
                }
            }
        ).disableSelection();
    }
}

/* ------------------------------------------------------------------------
 *                            UPLOAD AJAX FILE
 * ------------------------------------------------------------------------ */

$jq.asynchronousFile = null;
$jq.uploadAjaxFile =
{
    files:[],
    inputs:[],
    uniqueId:0,

    init: function()
    {
        $jq.asynchronousFile = this;
        $jq("body").append("<div id='asynchronousFiles'></div>");
        $jq("#asynchronousFiles").css("display","none");
        $jq(".asynchronousFiles").each(
            function(e)
            {
                $jq.asynchronousFile.createInput(this, false);
            }
        );
        this.bindHandler();
    },

    upload : function(input)
    {
        var idInput = $jq(input).attr("id");
        if(typeof this.inputs[idInput] == "undefined")
        {return;}
        var id = this.inputs[idInput]["id"];
        var token = this.inputs[idInput]["token"];

        var value = $jq(input).val();
        var filename = value.replace(/.*(\/|\\)/, "");

        this.files[id] = new Array();
        this.files[id]["name"] = filename;

        this.setOnProgress(id, idInput);

        var iframeName = "ajaxFileIframe_"+id;
        var formName = "ajaxFileForm_"+id;

        $jq("#asynchronousFiles").append("<iframe src='javascript:false;' name='"+iframeName+"' />");

        $jq("#asynchronousFiles").append("<form method='post' name='"+formName+"' action='' enctype='multipart/form-data' target='"+iframeName+"'></form>");

        $jq("form[name="+formName+"]").append("<input type='text' value='ajax' name='action' />");
        $jq("form[name="+formName+"]").append("<input type='text' value='asynchronousFile' name='group' />");
        $jq("form[name="+formName+"]").append("<input type='text' value='uploadAsynchronousFile' name='function' />");
        $jq("form[name="+formName+"]").append("<input type='text' value='"+id+"' name='idForm' />");
        $jq("form[name="+formName+"]").append("<input type='text' value='"+token+"' name='token' />");

        var parent = $jq(input).parents(".asynchronousFiles:first");
        this.createInput(parent,true);
        $jq("iframe[name="+iframeName+"]").bind("load",
            function()
            {
                var content = $jq(this).contents().find("body").html();
                try 
                {
                    response = eval("(" + content + ")");
                }catch(err){
                    response = {success:0};
                }
                var id = $jq("form[name="+formName+"] input[name='idForm']").val();
                if(response.success)
                {
                    $jq.asynchronousFile.files[id]["idFile"] = response.idFile;
                    $jq.asynchronousFile.uploadedFile(id);
                    $jq("iframe[name="+iframeName+"]").remove();
                    $jq("form[name="+formName+"]").remove();
                }else{
                    $jq.asynchronousFile.errorFile(id);
                }
            }
        );

        $jq("form[name="+formName+"]").append(input);
        $jq("form[name="+formName+"]").submit();
    },

    setOnProgress : function(id, idInput)
    {
       $jq("#"+idInput).parents(".asynchronousFiles:first").find("ul.asynchronousFilesUpload").append("<li id='asynchronousFileUpload_"+id+"'><input type='hidden' name='id' value='"+id+"' />"+this.files[id]["name"]+" <span class='status'><img src='img/icons/loading.gif' alt='loading'/></span> <a href='javascript:void(0)' class='asynchronous_file_delete'><img src='img/icons/delete.png' alt='delete'/></a></li>");
        this.bindHandler();
    },

    uploadedFile : function(id)
    {
        $jq("ul.asynchronousFilesUpload #asynchronousFileUpload_"+id+" .status").html("<img src='img/icons/accept.png' alt='upload'/>");
    },

    errorFile : function(id)
    {
        $jq("ul.asynchronousFilesUpload #asynchronousFileUpload_"+id+" .status").html("<img src='img/icons/error.png' alt='error'/>");
    },

    deleteFile : function(id, token)
    {
        if(typeof this.files[id]["idFile"] != "undefined")
        {

            var idFile = this.files[id]["idFile"];
            $jq.post(
                urlbase,
                { 
                    'action':'ajax',
                    'group':'asynchronousFile',
                    'function':'deleteAsynchronousFile',
                    'idFile':idFile,
                    'token':token
                },
                function(data)
                {
                    $jq("#asynchronousFileUpload_"+id).remove();
                }
            );
        }
    },

    getUniqueId : function()
    {
        this.uniqueId++;
        return this.uniqueId;
    },

    createInput : function(parent, hasToBind)
    {
        var nameInput = $jq(parent).find("input[name='nameInputFile']").val();
        var token =  $jq(parent).parents("form:first").find("input[name='token']").val();
        var id = this.getUniqueId();

        var idInput = nameInput+"_"+id;

        this.inputs[idInput] = new Array();
        this.inputs[idInput]["id"] = id;
        this.inputs[idInput]["token"] = token;

        $jq(parent).prepend("<input type='file' id='"+idInput+"' name='"+nameInput+"' class='input_asynchronousFile'/>");
        if(hasToBind) this.bindHandler();
    },

    bindHandler : function()
    {
        this.unBindHandler();
        $jq(".input_asynchronousFile").change(
            function()
            {
                $jq.uploadAjaxFile.upload(this);
            }
        );
        $jq(".asynchronous_file_delete").click(
            function()
            {
                var id = $jq(this).parents("li:first").find("input[name='id']").val();
                var token = $jq(this).parents("form:first").find("input[name='token']").val();
                $jq.asynchronousFile.deleteFile(id, token);
            }
        ); 
    },

    unBindHandler : function()
    {
        $jq(".input_asynchronousFile").unbind();
        $jq(".asynchronous_file_delete").unbind();
    }
}

/* ------------------------------------------------------------------------
 *                            ACTIVITIES
 * ------------------------------------------------------------------------ */

$jq.activities =
{
    min:0,
    max:0,
    limit:0,
    
    init : function(limit, min, max)
    {
        this.limit = limit;
        this.min = min;
        this.max = max;
        
        this.bindHandler();
    },
    
    load : function(limit, method, callback)
    {
        $jq.post(
            urlbase,
            {
                'action':'ajax',
                'group':'activities',
                'function':'load',
                'limit':limit,
                'method':method,
                'max':this.min
            },
            function(data)
            {
                callback(data);
            }
        );
    },
    
    insertActivities:function(data)
    {
        var activities = JSON.parse(data);
        if(activities["min"] == null)
        {
            $jq("#more_activities").hide();
        }else{
            $jq.activities.min = activities["min"];
            $jq("#wall_activities").append(activities["formattedActivities"]);
            $jq("#more_activities span").css("background", "url("+urlbase+"img/icons/bullet_arrow_down.png) no-repeat");
        }
    },
    
    remove : function()
    {
        if(confirm($jq.translate("ACTIVITY_Confirm_Delete")))
        {
            return true;
        }else{
            return false;
        }
    },
    
    bindHandler : function()
    {
        $jq(".deleteActivity").live("click",
            function()
            {
                return $jq.activities.remove();
            }
        );
            
        $jq("#more_activities").click(
            function()
            {
                $jq(this).find("span").css("background", "url("+urlbase+"img/icons/loading.gif) no-repeat");
                $jq.activities.load($jq.activities.limit, "html", $jq.activities.insertActivities);
            }
        )
    }
}


/* ------------------------------------------------------------------------
 *                            BOX USER
 * ------------------------------------------------------------------------ */

$jq.blockUser =
{
    blockSettings: new Object,
    
    init : function()
    {
        $jq.getUserProperties('block_settings', $jq.blockUser.start);
    },
    
    start : function(data, name)
    {
        if(typeof data == "undefined" || data == "")
        {
            data = "{}";
        }
        $jq.blockUser.blockSettings = JSON.parse(data);
        
        for(i in $jq.blockUser.blockSettings)
        {
            if(typeof $jq.blockUser.blockSettings[i] == "function" || typeof $jq.blockUser.blockSettings[i] == "undefined")
            {
                
            }else{
                var block = $jq.blockUser.blockSettings[i];
                if(typeof block["status"] != "undefined")
                {
                    switch(block["status"])
                    {
                        case 0: /* CLOSE not use */
                            $jq("#"+block["div"]).remove();
                          break;
                        case 1: /* OPEN */
                          break;
                        case 2: /* COLLAPSED */
                            var id = block["div"];
                            $jq("#"+id+" .content_generic_box").hide();
                            $jq("#"+id+" a.hideBlock").attr("href", "javascript:$jq.blockUser.open('"+id+"');");
                            $jq("#"+id+" a.hideBlock").html($jq.translate("GLOBAL_Open"));
                          break;
                        default:
                            //nothing
                    }
                }
            }
        }
    },
    
    update : function ()
    {
        $jq.setUserProperties("block_settings", JSON.stringify(this.blockSettings));
    },
    
    close : function(id)
    {
        $jq("#"+id).remove();
        
        var block = new Object();
        block["div"] = id;
        block["status"] = 0;
        
        $jq.blockUser.blockSettings[id] = new Object();
        $jq.blockUser.blockSettings[id] = block;
        
        this.update();
    },
    
    open : function(id)
    {
        $jq("#"+id+" .content_generic_box").show();
        $jq("#"+id+" a.hideBlock").attr("href", "javascript:$jq.blockUser.hide('"+id+"');");
        $jq("#"+id+" a.hideBlock").html($jq.translate("GLOBAL_Collapse"));
        var block = new Object();
        block["div"] = id;
        block["status"] = 1;
        
        $jq.blockUser.blockSettings[id] = new Object();
        $jq.blockUser.blockSettings[id] = block;
        
        this.update();
    },
    
    hide : function(id)
    {
        $jq("#"+id+" .content_generic_box").hide();
        $jq("#"+id+" a.hideBlock").attr("href", "javascript:$jq.blockUser.open('"+id+"');");
        $jq("#"+id+" a.hideBlock").html($jq.translate("GLOBAL_Open"));
        var block = new Object();
        block["div"] = id;
        block["status"] = 2;
        
        $jq.blockUser.blockSettings[id] = new Object();
        $jq.blockUser.blockSettings[id] = block;
        
        this.update();
    }
}
