﻿// JScript File
// fonctions globales
// à tout le projet

var IS_UNLOAD_WINDOW = false;
var isIE = (navigator.appName == 'Microsoft Internet Explorer');
var VK_RETURN  = 13;
var CurrentHash = document.location.hash;
var IsCurrentProgramaticChangingHash = false; //en cours de changement de cache
var IsCurrentProgramaticChangingFilter = false; //en cours de changement de cache
var NB_MS_TO_VERIFY_CHANGING_HISTORY = 100;
var bShouldSendAllAjaxRequest = false; //doit on éxécuter les requetes ajax de l'historique
var CACHE_TITLE_PAGE = document.title;

var AJAX_ERROR_OK = 0;
var AJAX_ERROR_NOT_LOGGED = -1;
var AJAX_ERROR_FAIL = 1;
var AJAX_ERROR_UNAUTHORIZED = -2;
var AJAX_ERROR_QUOTA_MAX = -3;

var IsOpera = false;


var MUST_CANCEL_PERIODIQUE_CALL_CAUSE_CHATSEND = false;

var OldValidatorUpdateDisplay = null;    

/*
function LaunchIE(fn) {

    var args = Array.prototype.slice.call(arguments); //transforme un objet en tableau !
    //var args = arguments;
    //alert(args);
    args = args.slice(1, args.length);
    window.setTimeout(function() { fn(args) }, 0);
}*/



function DRAW_ERROR(str) {

    if(!IS_UNLOAD_WINDOW)//on affiche l'erreur tant que y'a pas de demande de nouvelle page
        $("#Error").text(str).show().fadeOut(7000);

}


function bookmarksite(title, url)
{
    if (document.all)
        window.external.AddFavorite(url, title);
    else if (window.sidebar)
        window.sidebar.addPanel(title, url, "");
        
}



function CopyText(TextACopier)
{
    
   if (window.clipboardData) //accete copier coller ?
   {
        var chaine = TextACopier + ""; //on rajoute une chaine vide pour recréer une instance...sinon
        window.clipboardData.setData("Text", chaine);      
   }
   else
   { 
      alert("Votre navigateur ne dispose pas de cette fonctionnalit&eacute;.");
   }   
}



function trim(str)
{
   return str.replace(/^\s*|\s*$/g,"");
}



// Renvoi un objet Type
function GetType(strType)
{
    return eval(strType);
}

/*
function ScrollToElement(theElement)
{

  var selectedPosX = 0;
  var selectedPosY = 0;
              
  while(theElement != null){
    selectedPosX += theElement.offsetLeft;
    selectedPosY += theElement.offsetTop;
    theElement = theElement.offsetParent;
  }

 window.scrollTo(selectedPosX,selectedPosY);
 
}*/

///
/// Gestion de la galerie photos
///
function InitGallerie()
{

    $("DIV.AjaxRepeater.AjaxRepeaterGalerie DIV.Contenu DIV.OneItem")
        .live("mouseover", function() {

            var $ImgPreview = $("DIV.AjaxRepeater.AjaxRepeaterGalerie DIV.Contenu IMG.ImagePreview");
            var NewUrlImg = $(this).find("IMG").attr("src");
            var CurrentImg = $ImgPreview.attr("src");



            if (CurrentImg == null || CurrentImg.indexOf(NewUrlImg) != 0) {

                var vNewImage = new Image();

                //il faut d'abord enregistrer l'enevemnt onload
                //avant d'attribuer le src ^^
                vNewImage.onload = function() {

                    //centre verticalement
                    $ImgPreview.attr("src", NewUrlImg);
                    var CompleteURLEscaped = "http://" + window.location.host + NewUrlImg;
                    $("DIV.AjaxRepeater.AjaxRepeaterGalerie DIV.Contenu INPUT.URL").val(CompleteURLEscaped);

                    vMaxHeight = parseInt($ImgPreview.css("max-height").replace("px", ""), 10);
                    var vheight = vNewImage.height;

                    if (vheight < vMaxHeight)
                        $ImgPreview.css("padding-top", (vMaxHeight - vheight) / 2 + "px");
                    else
                        $ImgPreview.css("padding-top", "0px");

                };

                vNewImage.src = NewUrlImg;


            }


        });
}

function InsertImageInsideTinyMceFromGallery(sUrlImage)
{
    if(typeof(tinyMCEPopup) == "undefined")
        return;

    var ed = tinyMCEPopup.editor, f = document.forms[0], nl = f.elements, v, args = {}, el;

    //ca bug que sur localhost, en prod ca roule a cause de la valeur document.domain : http://tinymce.moxiecode.com/forum/viewtopic.php?pid=90535
        el = ed.selection.getNode();

		if (el && el.nodeName == 'IMG') {
			ed.dom.setAttribs(el, args);
		} else {
		
			ed.execCommand('mceInsertContent', false, '<img alt="" src="'+sUrlImage+'" />', {skip_undo : 1});
			ed.undoManager.add();
		}

		tinyMCEPopup.close();
		
}		

///
/// exemple d'objet json {"dede":2,"salut":"ok"}
///
/// renvoie une seule valeur ou null
/// En général :
/////////////////////////
///   -1:not_logged
///   0:ok
///   1:error
function SimpleAjaxScalar(JSonObject, IsAsync, AsynchMethod, IsNotDeclencheErrorOnError, ErrorMethod,IsPost)
{
    var RetValue = null;
    
    if ($("#presence").length) //que si on est loggé
    {
        JSonObject["HashFriends"] = $("#presence").data("hashfriends") != null ? $("#presence").data("hashfriends") : "0";
        JSonObject["LastIdMessageMessenger"] = typeof (MESSENGER_LAST_ID_MESSAGE) != "undefined" ? MESSENGER_LAST_ID_MESSAGE : 0;
    }
    //construit le cacheName
    var sCacheName = URLAJAX + "?";
    for (key in JSonObject)
        sCacheName += "&" + key + "=" + JSonObject[key];

    if (!(RetValue = CACHE_AJAX[sCacheName]))  //si rien à récup du cache...(si cache il y a lieu !)
    {
        var IsAsync = typeof (IsAsync) != "undefined" ? IsAsync : false;

        $.ajax({
            url: URLAJAX,
            async: IsAsync, // Synchrone ! ou asycnhrone si option
            cache: true, //si false, rajoute une clé ?_=timestamp
            data: JSonObject,
            type: IsPost?"POST":"GET",
            timeout: CONST_TIMEOUT_AJAX_QUERY, //ms
            dataType: "json",
            error: function(xmlHttpRequest, status, e) {
                var strError = "(SimpleAjaxScalar)TIMEOUT OR ERROR, ANYWAY ! [" + status + "]";
                TRACE(strError);

                if (!IsNotDeclencheErrorOnError)
                    DRAW_ERROR("Erreur : réessayez plus tard, contactez le webmaster si l'erreur persiste...");

                //appel methode asynchrone si spécifiée !
                if (typeof (ErrorMethod) != "undefined" && ErrorMethod)
                    ErrorMethod(RetValue);
            },
            success: function(pJSonData) {
                RetValue = (typeof pJSonData.value != "undefined") ? pJSonData.value : pJSonData;

                if (pJSonData.TimeCachingSeconds && pJSonData.TimeCachingSeconds > 0) //mise en cache géré par le serveur qui le renvoie dans le JSON ! pas con !
                {
                    CACHE_AJAX[sCacheName] = RetValue;

                    window.setTimeout(function() {
                        //TRACE("delete cache " + sCacheName)
                        if (typeof CACHE_AJAX[sCacheName] != "undefined" && CACHE_AJAX[sCacheName])//on vérifie que le cache est pas déjà bousillé avant de le bousiller ;o)
                        {
                            delete CACHE_AJAX[sCacheName];
                        }
                    }, pJSonData.TimeCachingSeconds * 1000);

                }

                //Mails à jour uniquement pasque c pas une requete du cache (bein oui avec le cache c pas à jour banane !)
                if (typeof pJSonData.CptMails != "undefined") {
                    UpdateCptMails(pJSonData.CptMails);
                }

                //Mails à jour uniquement pasque c pas une requete du cache (bein oui avec le cache c pas à jour banane !)
                if (typeof pJSonData.CptNotify != "undefined") {
                    UpdateCptNotify(pJSonData.CptNotify);

                }

                //Changement global de ChatState ? ahah !
                if (typeof pJSonData.ChatState != "undefined") {
                    var vChatState = pJSonData.ChatState;

                    if ($("#presence .online.active").length && vChatState != 2)//ah on est passé absent ?
                        ShowChat(false);
                    else if ($("#presence .offline.active").length && vChatState == 2)//il faut passer online
                        ShowChat(true);

                }




                //il y a un nouveau hash? le mettre à jour !
                if (typeof (pJSonData.friendshash) != "undefined")
                    $("#presence").data("hashfriends", pJSonData.friendshash);

                //AH y'a un IdKill qui est passé? (message a ne pas afficher a t'il prendre le dessus ?
                if (typeof (pJSonData.IdToKill) != "undefined") //
                {
                    //on change le dernier message a avoir été lu
                    if (typeof (MESSENGER_LAST_ID_MESSAGE) == "undefined")
                        MESSENGER_LAST_ID_MESSAGE = 0;

                    MESSENGER_LAST_ID_MESSAGE = Math.max(MESSENGER_LAST_ID_MESSAGE, pJSonData.IdToKill);
                }

                //il y a des gens qui sont entrain de m'écrire?
                if (typeof (pJSonData.discussionswritten) != "undefined") {

                    //pJSonData.discussionswritten is an array !
                    $("#presence .chatbar .user").each(function() {

                        var $This = $(this);
                        var vUID = $This.find(".UID").val();
                        for (var i = 0; i < pJSonData.discussionswritten.length; i++) {

                            $WritingConv = $This.find(".tool .writing");
                            if (pJSonData.discussionswritten[i] == vUID)
                                $WritingConv.show();
                            else
                                $WritingConv.hide();
                        }
                    });
                }
                else {
                    $("#presence .chatbar .user .tool .writing").hide(); 
                }



                //Friends OU/ET Discussions
                //attention on ne fait pas la MAJ si on est entrain d'envoyer un message
                //pour éviter les messages intercroisés !
                if (!MUST_CANCEL_PERIODIQUE_CALL_CAUSE_CHATSEND) //
                {
                    if ((typeof pJSonData.friends != "undefined" && typeof pJSonData.friendshash != "undefined")
                        || (typeof pJSonData.discussions != "undefined" && typeof pJSonData.discussions != "undefined")) //
                    {
                        UpdateChat(pJSonData);
                    }
                }

                //appel methode asynchrone si spécifiée !
                if (typeof (AsynchMethod) != "undefined" && AsynchMethod)
                    AsynchMethod(RetValue, pJSonData);
            }
        });
    }   
      
    return RetValue;
}



function AJAX_ChangeNotify(/*int*/ id_sujet, /*int*/ id_categorie, /*bool*/ IsAdding)
{
    var vRes = SimpleAjaxScalar(
            {
            "Action":"ChangeNotify",
            "id_sujet":id_sujet,
            "id_categorie":id_categorie,
            "IsAdding":IsAdding,
            "url": document.location.href         
            }
    );
    
    switch(parseInt(vRes))
    {
        case AJAX_ERROR_NOT_LOGGED://not logged
            alert("Vous devez vous authentifier pour effectuer cette action");
            break;
        case AJAX_ERROR_UNAUTHORIZED:
            alert("Vous n'avez pas le droit de faire ça !");
            break;
        case AJAX_ERROR_FAIL:
            alert("Une erreur est survenue...retentez plus tard !");
        break;
        case AJAX_ERROR_OK:
        
            alert("Notification par email " + (IsAdding?"activée!":"désactivée. Vous ne serez plus prévenus des nouveaux messages par email.") );
        break;
    }

    return vRes;
}
function AJAX_AccepterRessource(/*int*/ id_message, /*bool*/ IsAccepter)
{
    var vRes = SimpleAjaxScalar(
            {
            "Action":"AccepterRessource",
            "id_message":id_message,
            "IsAccepter":IsAccepter,
            "url": document.location.href         
            }
    );
    
    switch(parseInt(vRes))
    {
        case AJAX_ERROR_NOT_LOGGED://not logged
            alert("Vous devez vous authentifier pour effectuer cette action");
            break;
        case AJAX_ERROR_UNAUTHORIZED:
            alert("Vous n'avez pas le droit de faire ça !");
            break;
        case AJAX_ERROR_FAIL:
            alert("Une erreur est survenue...retentez plus tard !");
        break;
        case AJAX_ERROR_OK:
            //ne rien afficher (effet visuel)
        break;
    }
    
    return vRes;
}

function AJAX_SupprimerMessage(/*int*/ id_message, /*bool*/ IsSupprimer)
{
    var vRes = SimpleAjaxScalar(
            {
            "Action":"SupprimerMessage",
            "id_message":id_message,
            "IsSupprimer":IsSupprimer,
            "url": document.location.href         
            }
    );
    
    switch(parseInt(vRes))
    {
        case AJAX_ERROR_NOT_LOGGED://not logged
            alert("Vous devez vous authentifier pour effectuer cette action");
        break;
        case AJAX_ERROR_FAIL:
            alert("Une erreur est survenue...retentez plus tard ! Note : Il est impossible de supprimer un message si c'est le seul d'un topic. Dans ce cas là, supprimer le topic !");
            break;
        case AJAX_ERROR_UNAUTHORIZED:
            alert("Vous n'avez pas le droit de faire ça !");
            break;
        case AJAX_ERROR_OK:
            //ne rien afficher (effet visuel)
            break;
        
    }
    
    return vRes;
}

function AJAX_SupprimerMail(/*int*/id_mail, /*bool*/IsSupprimer) {
    var vRes = SimpleAjaxScalar(
            {
                "Action": "SupprimerMail",
                "id_mail": id_mail,
                "IsSupprimer": IsSupprimer,
                "url": document.location.href
            }
    );

    switch (parseInt(vRes)) {
        case AJAX_ERROR_NOT_LOGGED: //not logged
            alert("Vous devez vous authentifier pour effectuer cette action");
            break;
        case AJAX_ERROR_FAIL:
            alert("Une erreur est survenue...retentez plus tard !");
            break;
        case AJAX_ERROR_UNAUTHORIZED:
            alert("Vous n'avez pas le droit de faire ça !");
            break;
        case AJAX_ERROR_OK:
            //ne rien afficher (effet visuel)
            break;

    }

    return vRes;
}
function AJAX_KillMail(/*int*/id_mail) {
    var vRes = SimpleAjaxScalar(
            {
                "Action": "KillMail",
                "id_mail": id_mail,                
                "url": document.location.href
            }
    );

    switch (parseInt(vRes)) {
        case AJAX_ERROR_NOT_LOGGED: //not logged
            alert("Vous devez vous authentifier pour effectuer cette action");
            break;
        case AJAX_ERROR_FAIL:
            alert("Une erreur est survenue...retentez plus tard !");
            break;
        case AJAX_ERROR_UNAUTHORIZED:
            alert("Vous n'avez pas le droit de faire ça !");
            break;
        case AJAX_ERROR_OK:
            //ne rien afficher (effet visuel)
            break;

    }

    return vRes;
}
function AJAX_ChangeForumFavoris(/*int*/ id_sujet, /*int*/ id_categorie, /*bool*/ IsAdding)
{
    var vRes = SimpleAjaxScalar(
            {
            "Action":"ChangeForumFavoris",
            "id_sujet":id_sujet,
            "id_categorie":id_categorie,
            "IsAdding":IsAdding,
            "url": document.location.href         
            }
    );
    
    switch(parseInt(vRes))
    {
        case AJAX_ERROR_NOT_LOGGED://not logged
            alert("Vous devez vous authentifier pour effectuer cette action");
            break;
        case AJAX_ERROR_UNAUTHORIZED:
            alert("Vous n'avez pas le droit de faire ça !");
            break;
        case AJAX_ERROR_FAIL:
            alert("Une erreur est survenue...retentez plus tard !");
        break;
        case AJAX_ERROR_OK:
                 alert(  (IsAdding ?
                     "Le topic a bien été ajouté de vos topics favoris." 
                     :
                     "Le topic a bien été supprimé de vos topics favoris.") 
                  );
        break;
    }
    
    return vRes;
}
function AJAX_GetMySpaceFlashPlayer(/*string*/ sUrlMySpace,/*bool*/ isForTinyMce)
{
   var vRes = SimpleAjaxScalar(
            {
            "Action":"GetMySpaceFlashPlayer",
            "UrlMySpace":sUrlMySpace,
            "isForTinyMce":isForTinyMce
            }
    );
        
    return vRes;
}
function AJAX_AddEmoticones(/*string*/ TexteEmoticone, /*string*/ UrlEmoticone)
{
    var vRes = SimpleAjaxScalar(
            {
            "Action":"AddEmoticone",
            "txtEmoticone":TexteEmoticone,
            "urlEmoticone":UrlEmoticone
            }
    );
    
    switch(parseInt(vRes))
    {
        case AJAX_ERROR_NOT_LOGGED://not logged
            alert("Vous devez vous authentifier pour effectuer cette action");
            break;
        case AJAX_ERROR_UNAUTHORIZED:
            alert("Vous n'avez pas le droit de faire ça !");
            break;
        case AJAX_ERROR_FAIL:
            alert("Une erreur est survenue...retentez plus tard !");
            break;
        case AJAX_ERROR_QUOTA_MAX:
            alert("Vous avez dépassez le nombre maximum d'émoticônes : allez dans votre Profil pour en supprimer.");
            break;
        case AJAX_ERROR_OK:
            alert("L'émotîcone a bien été ajoutée."); 
        break;
    }
    
    return vRes;
}

function AJAX_AddTestToWishList(/*int*/IdTest) {
    var vRes = SimpleAjaxScalar(
            {
                "Action": "AddTestWishlist",
                "id_test": IdTest
            }
    );

    switch (parseInt(vRes)) {
        case AJAX_ERROR_NOT_LOGGED: //not logged
            alert("Vous devez vous authentifier pour effectuer cette action");
            break;
        case AJAX_ERROR_UNAUTHORIZED:
            alert("Vous n'avez pas le droit de faire ça !");
            break;
        case AJAX_ERROR_FAIL:
            alert("Une erreur est survenue...retentez plus tard !");
            break;
        case AJAX_ERROR_OK:
            alert("Le test a bien été ajouté à vos alertes. Vous receverez directement un mail lorsqu'une petite annonce sera déposée sur ce matériel.");
            break;
    }

    return vRes;
}

function AJAX_VoterMessage(/*int*/ id_message, CategorieName, IsVoterPour/*bool*/)
{
    var vRes = SimpleAjaxScalar(
            {
            "Action":"VoterMessage",
            "id_message":id_message,
            "CategorieName": CategorieName,
            "IsVoterPour":IsVoterPour?1:-1,
            "url": document.location.href         
             }
    );

            if (typeof (vRes) != "undefined")
             {
                switch (parseInt(vRes.value)) {
                    case AJAX_ERROR_NOT_LOGGED: //not logged
                        alert("Vous devez vous authentifier pour effectuer cette action");
                        break;
                    case AJAX_ERROR_FAIL:
                        alert("Une erreur est survenue...retentez plus tard !");
                        break;
                    case AJAX_ERROR_UNAUTHORIZED:
                        alert("Vous n'avez pas le droit de faire ça !");
                        break;
                    case AJAX_ERROR_OK:
                        {    //ne rien afficher (effet visuel)
                            //renvoi un objet avec les 3 valeurs
                            vResumeNote = {
                                "notemin": vRes.NoteMin,
                                "notemax": vRes.NoteMax,
                                "noteglobale": vRes.NoteGlobale
                            };

                            return vResumeNote;

                        }

                        break;

                }
            }
    
    return vRes;
}


function AJAX_SendMessageWall(/*int*/pUID, /*int*/pMessage) {
    var vRes = SimpleAjaxScalar(
            {
                "Action": "SendMessageWall",
                "UID": pUID,
                "Message": pMessage,                
                "url": document.location.href
            }
    );

    switch (parseInt(vRes)) {
        case AJAX_ERROR_NOT_LOGGED: //not logged
            alert("Vous devez vous authentifier pour effectuer cette action");
            break;
        case AJAX_ERROR_UNAUTHORIZED:
            alert("Vous n'avez pas le droit de faire ça !");
            break;
        case AJAX_ERROR_FAIL:
            alert("Une erreur est survenue...retentez plus tard !");
            break;
        case AJAX_ERROR_OK:
            alert("Message envoyé sur le profil !");
            break;
    }

    return vRes;
}

function AJAX_SendMessengerMessage(/*int*/pUID, /*int*/pMessage) {

    MUST_CANCEL_PERIODIQUE_CALL_CAUSE_CHATSEND = true;

    var vRes = SimpleAjaxScalar(
            {
                "Action": "SendMessengerMessage",
                "UID": pUID,
                "Message": pMessage,
                "url": document.location.href
            },
            true, //async
            function (pRetVal,pJSonObject) {
                MUST_CANCEL_PERIODIQUE_CALL_CAUSE_CHATSEND = false;
                
                 if ((typeof pJSonObject.friends != "undefined" && typeof pJSonObject.friendshash != "undefined")
                || (typeof pJSonObject.discussions != "undefined" && typeof pJSonObject.discussions != "undefined")) {
                    UpdateChat(pJSonObject);
                }
                
            },
            false,
            function (pJSonObjectError) {
                MUST_CANCEL_PERIODIQUE_CALL_CAUSE_CHATSEND = false;
            }
    );
/*
    switch (parseInt(vRes.chatvalue)) {
        case AJAX_ERROR_NOT_LOGGED: //not logged
            alert("Vous devez vous authentifier pour effectuer cette action");
            break;
        case AJAX_ERROR_UNAUTHORIZED:
            alert("Vous n'avez pas le droit de faire ça !");
            break;
        case AJAX_ERROR_FAIL:
            alert("Une erreur est survenue...retentez plus tard !");
            break;
        case AJAX_ERROR_OK:
                //UpdateChat(vRes);            
            break;
    }*/

    return vRes;
}

function AJAX_UpdateActiveConversations(/*int*/pUID, /*int*/pAction) {
    var vRes = SimpleAjaxScalar(
            {
                "Action": "UpdateActiveConversations",
                "UID": pUID,
                "ConvAction": pAction,
                "url": document.location.href
            }
            ,true //asynchrone, pas besoin de bloquer l'appli !
    );

    switch (parseInt(vRes)) {
        case AJAX_ERROR_NOT_LOGGED: //not logged
            alert("Vous devez vous authentifier pour effectuer cette action");
            break;
        case AJAX_ERROR_UNAUTHORIZED:
            alert("Vous n'avez pas le droit de faire ça !");
            break;
        case AJAX_ERROR_FAIL:
            alert("Une erreur est survenue...retentez plus tard !");
            break;
        case AJAX_ERROR_OK:
            //alert("Message chat envoyé ! ici on doit avoir une redescente des autres conv !");
            break;
    }

    return vRes;
}



function AJAX_UpdateChatState(pChatState) {
    var vRes = SimpleAjaxScalar(
            {
                "Action": "UpdateChatState",
                "ChatState": pChatState,                
                "url": document.location.href
            }
            , true //asynchrone, pas besoin de bloquer l'appli !
    );

 /*   switch (parseInt(vRes)) {
        case AJAX_ERROR_NOT_LOGGED: //not logged
            alert("Vous devez vous authentifier pour effectuer cette action");
            break;
        case AJAX_ERROR_UNAUTHORIZED:
            alert("Vous n'avez pas le droit de faire ça !");
            break;
        case AJAX_ERROR_FAIL:
            alert("Une erreur est survenue...retentez plus tard !");
            break;
        case AJAX_ERROR_OK:
            //alert("Message chat envoyé ! ici on doit avoir une redescente des autres conv !");
            break;
    }

    return vRes;*/
}


function AJAX_SubscribeNewsletter() {
    var vRes = SimpleAjaxScalar(
            {
                "Action": "SubscribeNewsletter",                
                "url": document.location.href
            }
    );


    switch (parseInt(vRes)) {
    case AJAX_ERROR_NOT_LOGGED: //not logged
    alert("Vous devez vous authentifier pour effectuer cette action");
    break;
    case AJAX_ERROR_UNAUTHORIZED:
    alert("Vous n'avez pas le droit de faire ça !");
    break;
    case AJAX_ERROR_FAIL:
    alert("Une erreur est survenue...retentez plus tard !");
    break;
    case AJAX_ERROR_OK:
    alert("Merci, vous recevrez les prochaines Newsletters !");
    $('.newsletter').fadeOut(2300);
    break;
    }

    return vRes;
}




function ValidateRichTextBox(val,args)
{
    var ed = tinyMCE.get(val.customcontroltovalidate);
    if(ed) {
        var vHtml = ed.getContent().replace(/&nbsp;/gi," ");
        args.IsValid = (stripHTML(vHtml).trim().length > 0) || (new RegExp("<((img)|(object)|(embed))\\s", "gi").exec(vHtml) != null);
        
    }
   //_ifrPhoto<%=ClientID%> = document.getElementById('<%=ClientID%>ifrPhoto');
   // var IsValid = (_ifrPhoto<%=ClientID%>.contentWindow.document.getElementById("divUploadOk")!=null);//Déclenche validator asp.net
   // args.IsValid = IsValid;
}

// Il faut au moins checker un style
function ValidateCheckBoxListStyles(val,args)
{
    args.IsValid = $("#" + val.customcontroltovalidate).find("input:checked").length>0;
}

function ValidateDate(val,args)
{
    try
    {
        $DateBox = $("#"+val.customcontroltovalidate);        
        var aDate = new Date($DateBox.find(".Year").val(),
                 parseInt($DateBox.find(".Month").val(),10)-1,// 0:janvier 11:Decembre
                 $DateBox.find("SELECT.Day").val(),
                 $DateBox.find("SELECT.Hour").val(),
                 $DateBox.find("SELECT.Minute").val()
                 );

        args.IsValid = (aDate.getFullYear() == parseInt($DateBox.find("SELECT.Year").val()))
                       && (aDate.getMonth() == (parseInt($DateBox.find("SELECT.Month").val(), 10) - 1))
                       && (aDate.getDate() == parseInt($DateBox.find("SELECT.Day").val()))
                       && (aDate.getHours() == parseInt($DateBox.find("SELECT.Hour").val()))
                       && (aDate.getMinutes() == parseInt($DateBox.find("SELECT.Minute").val()))
                       ;
                 
       
    }
    catch(ex)
    {
        args.IsValid = false;
    }    
}



///
/// Recherche dans tout le site
///
function DoGlobalSearch(node) {
    
  //  if (IS_FIRST_LOAD)
  //      node.OldValue = node.value;



    $("A.SupprimeFilterMainSearch").css("display", node.value.length > 0 ? "inline" : "none");


        if (node.OldValue != node.value )
        { 
                if(node.value.trim().length==0 && !node.OldValue)
                    return;
                    
                if(node.ajaxTimer)     
                    clearTimeout(node.ajaxTimer);          
                
                if(node.value.trim() == 0)
                {
                    MakeAnchorUrl(node.id+"=");
                    $("#SearchResults").css("display", "none");                    
                    node.OldValue = "";
                    return;
                }


                node.ajaxTimer = setTimeout(function() {

                    var strSearchWord = node.value.trim();
                    //MakeAnchorUrl(node.id + "=" + escape(strSearchWord));

                    // if (document.location.search.indexOf(node.id + "=" + encodeURIComponent(strSearchWord)) == -1) {


                    MakeAnchorUrl(node.id + "=" + encodeURIComponent(strSearchWord));

                    $("#SearchResults").css("display", "block").html("<i>Recherche en cours...</i>");
                    var vRes = SimpleAjaxScalar({
                        "Action": "Search",
                        "q": strSearchWord
                    },
                    true, //asynchrone sinon ca fait bugger
                    function(vRes) {

                        //Highlight le texte filtré
                        if (strSearchWord && strSearchWord.length > 0)
                            vRes = HighLightHtml(vRes, strSearchWord);


                        $("#SearchResults").html(vRes);
                    
                    }
                    );

                }, //funfunction
                                            500
                                            );
                
                node.OldValue=node.value;
            }

                                                                                                 

}

function DrawCarteDeVisite(pUID)
{
var vRes = SimpleAjaxScalar(
            {
            "Action":"DrawCarteDeVisite",
            "UID":pUID
            }
    );
        
    return vRes;

}

function GetHtmlUrl(pURL) {
    var vRes = SimpleAjaxScalar(
            {
                "Action": "GetHtmlUrl",
                "geturl": pURL
            }
    );

    return vRes;

}





function DrawStatsVotes(pRessourceId,pRessourceCategorie,pIsCommentaire) {
    var vRes = SimpleAjaxScalar(
            {
                "Action": "DrawStatsVotes",
                "RessourceId": pRessourceId,
                "RessourceCategorie": pRessourceCategorie,
                "IsCommentaire" : pIsCommentaire?"1":"0"
            }
    );

    return vRes;

}

function AJAX_GetUsers(pPseudo)
{
var vRes = SimpleAjaxScalar(
            {
            "Action":"GetUsers",
            "ps":pPseudo
            }
    );
        
    return vRes;

}

function AJAX_GetSalles(pAdresse) {
    var vRes = SimpleAjaxScalar(
            {
                "Action": "GetSalles",
                "ad": pAdresse
            }
    );

    return vRes;

}

function AJAX_GetNbNotifyPAMatos(id,text_matos)
{
var vRes = SimpleAjaxScalar(
            {
            "Action":"GetNbNotifyPAMatos",
            "idmatos":id,
            "text_matos":text_matos
            }
    );
        
    return vRes;

}

function AJAX_GetNbNotifyPAZik(FiltrePAZIK)
{
var vRes = SimpleAjaxScalar(
            {
            "Action":"GetNbNotifyPAZik",
            "FiltrePAZIK":FiltrePAZIK
            }
    );
        
    return vRes;

}


function AccepterRefuserReponse(id_message,BoxOneItem,BtnAccepterClientID,BtnRefuserClientID,IsAccepte)
{
      if(AJAX_ERROR_OK == AJAX_AccepterRessource(id_message,IsAccepte))
      {
            $(BoxOneItem).toggleClass("ReponseAcceptee");
            $(BtnAccepterClientID).css("display",IsAccepte?"none":"inline");
            $(BtnRefuserClientID).css("display",IsAccepte?"inline":"none");            
      }              
 
    return false;
}


function SupprimerRemettrerReponse(id_message, BoxOneItem, BtnSupprimer, BtnRemettre, IsSupprimer)
{
      if(AJAX_ERROR_OK == AJAX_SupprimerMessage(id_message,IsSupprimer))
      {
            $(BoxOneItem).toggleClass("ReponseSupprimee");
            $(BtnSupprimer).css("display", IsSupprimer ? "none" : "inline");
            $(BtnRemettre).css("display", IsSupprimer ? "inline" : "none");            
      }              
 
    return false;
}

function SupprimerRemettrerMail(id_mail, BoxOneItem, BtnSupprimer, BtnRemettre, IsSupprimer) {
    if (AJAX_ERROR_OK == AJAX_SupprimerMail(id_mail, IsSupprimer)) {
        $(BoxOneItem).toggleClass("ReponseSupprimee");
        $(BtnSupprimer).css("display", IsSupprimer ? "none" : "inline");
        $(BtnRemettre).css("display", IsSupprimer ? "inline" : "none");
    }

    return false;
}

function KillMail(id_mail, BoxOneItem, BtnSupprimer) {
    if(confirm("Attention, suppression DEFINITIVE, Êtes-vous certains ?"))
    {
        if (AJAX_ERROR_OK == AJAX_KillMail(id_mail)) {
            $(BoxOneItem).toggleClass("ReponseSupprimee");
            $(BtnSupprimer).css("display", "none");           
        }
    }

    return false;
}



function AJAX_GetMedia(pUrl) {
    var vRes = SimpleAjaxScalar(
            {
                "Action": "GetMedia",
                "Url": pUrl
            }
    );

    return vRes;

}              


function formatAutoCompleteRow(pUrlAvatar,pUID,pPseudo)
{
    return "<img src='{0}{1}'/>{2}".format(pUrlAvatar,pUID,pPseudo);
}

function formatAutoCompleteRowSalle(pIDSalle, pSalle) {
    return "<b>{0}</b>:{1}".format(pIDSalle, pSalle);
}

function AddStats(vUrl) {

    if (typeof(AddGAStats) != "undefined")//stats activées?
        setTimeout(function() { AddGAStats(vUrl); }, 100); //envoie en async meme si gg deja async...
}

//ACCORDEUR

function PlayAccordeur(file) {
    $("DIV.Accordeur DIV.AccordeurEmbed").html("<embed src='" + HTTP_HOST + "Commun/Flash/Slappyto Player2.swf' flashvars='AutoStart=1&myAudio=" + HTTP_HOST + "Commun/Accordeur/" + file + "' />");
}
function StopAccordeur() {
    $("DIV.Accordeur DIV.AccordeurEmbed").html("");
}
function UpdateFiltreZik(el) {

    var $SurPlusBloc = $(el).closest("DIV.Surplus");

    var sFiltre = ChangeFiltrePAZik($SurPlusBloc);
    var GetKeyName = $SurPlusBloc.find("INPUT.FilterValue").attr("name");

    MakeAnchorUrl(GetKeyName + "=" + sFiltre);

    $AjaxRepeater = $SurPlusBloc.closest("DIV.AjaxRepeater");
    UpdateAjaxBox($AjaxRepeater.get(0), true);


    return true;

}

//PAZIK

function ChangeFiltrePAZik($ZoneFiltresZik) {
    $mjq = $ZoneFiltresZik.find("SELECT");

    ddlType = $($mjq[0]);
    ddlSearch = $($mjq[1]);
    ddlDpt = $($mjq[2]);

    //                    styleFiltre = $ZoneFiltresZik.find("INPUT[type=checkbox][checked]");
    //                    var sValeur = 0;
    //                    for(i=0;i<styleFiltre.length;i++)
    //                        sValeur |= 1<<parseInt(new RegExp("_([0-9]+)$","gi").exec(styleFiltre[i].id)[1]);

    var sValeur = 0;
    $ZoneFiltresZik.find("INPUT[type=checkbox]:checked").each(function(i, domElement) {
        sValeur |= 1 << parseInt(new RegExp("_([0-9]+)$", "gi").exec(domElement.id)[1]);
    });

    var sFiltre = ddlSearch.val() + ddlType.val() + $.strPad(ddlDpt.val(), 3, '0') + $.strPad(sValeur.toString(16), 4, '0');
    $ZoneFiltresZik.find("INPUT.FilterValue.PAZikInput").val(sFiltre); //recharge la valeur input
    return sFiltre.toUpperCase();
}

// PLAY SOUND FOR MAIL

var SOUNDNOTIFY = HTTP_HOST + "App_Themes/Default/sound/notify.mp3";
    
    function PlaySound(file) {
            $("#PlaySound").html("<embed src='"+HTTP_HOST+"Commun/Flash/Slappyto Player2.swf' flashvars='AutoStart=1&myAudio="+ file +"' />");    
            setTimeout(function(){$("#PlaySound").html("")},350); //TODO trouver mieux qd meme hein ! genre virer l'autobouclage ;o)
        }


        function TinyMCECaretGoToEnd(ed) {
        
            //pas besoin de déplacer si y'a pas de texte ;)
            if (tinyMCE.activeEditor.getContent() && tinyMCE.activeEditor.getContent().length > 0) {
                //trouvé ici : http://tinymce.moxiecode.com/punbb/viewtopic.php?id=6140
                var root = ed.dom.getRoot();  // This gets the root node of the editor window
                var lastnode = root.childNodes[root.childNodes.length - 1]; // And this gets the last node inside of it, so the last <p>...</p> tag
                if (tinymce.isGecko) {
                    // But firefox places the selection outside of that tag, so we need to go one level deeper:
                    if (lastnode.childNodes.length > 0)
                        lastnode = lastnode.childNodes[lastnode.childNodes.length - 1];
                }
                // Now, we select the node
                ed.selection.select(lastnode);
                // And collapse the selection to the end to put the caret there:
                ed.selection.collapse(false);
            }
 
                
        }

//GRAPHIC DETAIL

        $("DIV.GraphicLevel A.graphic").click(function() {
    
            $Body = $("BODY");
            var GraphicLevel = 3;

            $("A.graphic").removeClass("selected");
            $(this).addClass("selected");

            if ($(this).is(".n1")) {
                $Body.removeClass("GraphicN2").addClass("GraphicN1");
                GraphicLevel = 1;
            }
            else if ($(this).is(".n2")) {
                $Body.removeClass("GraphicN1").addClass("GraphicN2");
                GraphicLevel = 2;
            }
            else if ($(this).is(".n3")) {
                $Body.removeClass("GraphicN1 GraphicN2");
                GraphicLevel = 3;
            }


            var dateExpire = new Date();
            dateExpire.setFullYear(9999, 11, 31); //N'expire jamais...        
            EcrireCookie("GraphicLevel", GraphicLevel, dateExpire, "/");
            //EcrireCookie("GraphicLevel", GraphicLevel, new Date());

            var vIEVersion = parseInt($.browser.version);
            if (isIE && vIEVersion < 9)
                alert("Le changement du niveau de détails sur Internet Explorer " + vIEVersion + " n'est pas bien supporté -vous ne verrez pas vraiment de différence-. Optez pour un navigateur web récent (FireFox,Chrome,Opéra,Safari,IE9 etc...)");

    
        });


    $("DIV.GraphicLevel A.nuit").click(function() {


        var dateExpire = new Date();
        dateExpire.setFullYear(9999, 11, 31); //N'expire jamais...
        if (LireCookie("Nuit") == "1")
            DeleteCookie("Nuit");
        else
            EcrireCookie("Nuit", 1, dateExpire, "/"/*racine du site*/);

        window.location.reload();

    });


/// Fais apparaitre les nouveaux points
    function ShowPoints(vValue) //
    {
        $AddPoints = $(".AddPoints");

        if (vValue)
            $AddPoints.find(".nb").text(vValue > 0 ? "+" + vValue : vValue);
            
        $(".AddPoints").fadeIn(500).fadeOut(4000);
    
    }
    

  /*  function UpdateScroll(event) {
        var y = window.scrollY + window.innerHeight - 48;
        $ScrollFixed = $("BODY.mobile .GlobalPaging .GlobalPrecedent");
        $ScrollFixed.css("position", "absolute")
                    .css("bottom", "auto")
                    .css("top", y + "px");
        
    }
*/


    // Charge API FACEBOOK
    (function() {
        var e = document.createElement('script'); e.async = true;
        e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js';
        document.getElementById('fb-root').appendChild(e);
    } ());
    
    

    $(window).unload(function() {
        IS_UNLOAD_WINDOW = true;
    });

    $(document).ready(function() {
        //disable clicks on A if middle click (open new window, hehe!)
        $("A").click(function(a) {
            
            if (a.which == 2)//middle click
            {
                //$(this).unbind("click");
                event.cancelBubble = true; //IE
                event.stopPropagation();
                e.preventDefault();
                event.returnValue = true;//IE
                return true;
              
            }
        });
        IsOpera = $("BODY.opera").length ? true : false;
        /*
        //patch position fixed!    
    
    if (typeof (document.ontouchstart) != "undefined") {
        document.ontouchstart = UpdateScroll;
        document.ontouchmove = UpdateScroll;
        document.ontouchend = UpdateScroll;
        document.onscroll = UpdateScroll;

            setInterval(function() { UpdateScroll(null); }, 100);
        }
        */




        //highlight pour ceux qui viennent de google ou bing yahoo etc...
        //http://www.google.com/search?hl=fr&safe=active&q=cours+de+basse&btnG=Rechercher&lr=&aq=f&oq=
        //http://fr.search.yahoo.com/search?rd=r1&p=cours+de+basse&toggle=1&cop=mss&ei=UTF-8&fr=yfp-t-703
        //http://www.bing.com/search?q=cours+de+basse&go=&form=QBLH&filt=all

        var HTTP_REFERER = document.referrer;
        if (HTTP_REFERER && HTTP_REFERER.length > 0) {
            var RegexpReferer = new RegExp("(https?://www\\.google\\..*)|(https?://.*search\\.yahoo.*)|(https?://www\\.bing\\..*)", "gi");
            if (RegexpReferer.exec(HTTP_REFERER)) {
                var phraseAHighliter = HTTP_REFERER.replace(RegexpReferer,
                function(m) {
                    TRACE("find:" + m);
                    var _GET = m.QueryString();
                    if (_GET != null && _GET["q"])
                        return _GET["q"];
                    if (_GET != null && _GET["p"])
                        return _GET["p"];
                    else
                        return null;
                }
                );

                if (phraseAHighliter != null && phraseAHighliter.length > 0) {
                    //alert("REFERER VU !");
                    $("DIV.AjaxRepeater").find("DIV.ContenuHTML").each(function(i) {
                        $(this).html(HighLightHtml($(this).html(), phraseAHighliter));
                    });
                }
            }
        }


        $("BODY.mobile #Logo").click(function() {

            if ($(".homepage.mobile").length == 0) {
                $(".HPMobile").toggle();

                return false;
            }

        })



        $("#q").keypress(function(event) {

            if (event.keyCode == 13 /*VK_RETURN*/)
                return false;

        });

        /*
        if ($(".MyInfos .fb_connect").length) {


            //Facebook Connect        
        $(".MyInfos .fb_connect").click(function() {

                FB.login(function(response) {

                    if (response.authResponse) {
        var accessToken = response.authResponse.accessToken;
        var userID = userID.authResponse.accessToken;
        ////                        alert("access token is " + accessToken);

                        //FB.api('/me', function(info) {
        //    login(response, info);
        //});
        } else {
        //user cancelled login or did not grant authorization
        //showLoader(false);

                        ////                        alert("access not allowed");
        }
        },
        { scope: 'email,user_birthday,status_update,publish_stream,user_about_me' });

                return false;
        });

            $(".MyInfos fb_deconnect").click(function() {

                ////                alert("Logout ask");
        FB.logout(function(response) {
        ////                alert("Logout OK");

                });

            });




        }
        */


        $("DIV.Avatar.AvatarAjax > ADDRESS").live("click", function() {

            if ($("BODY.mobile").length)
                return true;

            $AvatarAjax = $(this).closest("DIV.AvatarAjax");
            $CarteVisite = $AvatarAjax.find("DIV.CarteVisite");


            //on cache toute les carte de visite (sauf l'actuelle cliquée)
            $("DIV.CarteVisite").not($CarteVisite).hide();


            if ($CarteVisite.length > 0) {
                $CarteVisite.toggle(); //.slideToggle("slow");//
            }
            else {

                var UID = $AvatarAjax.find("INPUT:hidden").val();
                var CACHE_KEY_NAME = "card" + UID;
                var HtmlCard;
                if (!(HtmlCard = $(document).data(CACHE_KEY_NAME)))//vérifie le cache de page ^^
                {
                    HtmlCard = DrawCarteDeVisite(UID);
                    $(document).data(CACHE_KEY_NAME, HtmlCard);
                }



                var pPixelUp = "-126px";


                if (($(this).offset().top + 322) > document.height) //faut dessiner plus haut?
                    pPixelUp = document.height - 322;

                var Width = document.body.clientWidth;

                if ($(this).offset().left < (Width / 2)) //faut dessiner a droite?
                {

                    var sLeft = IsOpera ? "105px" : "105px";
                    $HtmlCard = $(HtmlCard).css("position", "absolute").css("z-index", "1").css("margin", pPixelUp + " 0 0 " + sLeft);
                }
                else//faut dessiner a gauche
                {

                    //si ya pas de photo pas la meme taille
                    var isPhoto = $(HtmlCard).find(".Photo").length > 0;
                    $HtmlCard = $(HtmlCard).css("position", "absolute").css("z-index", "1").css("margin", pPixelUp + " 0 0 " + (isPhoto ? "-745px" : "-285px"));
                }

                $AvatarAjax.append($HtmlCard);
            }

            return false;

        });

        //btn Ajouter aux favoris

        $("DIV.AddFavorite").live("click", function() {

            var hrefLink = $(this).next("A:first").attr("href");
            var Match = new RegExp("\\?id=(\\d+)", "gi").exec(hrefLink);
            if (Match) {
                var idTopic = Match[1];
                if (0 == AJAX_ChangeForumFavoris(idTopic, 1, true)) {
                    $(this).removeClass("AddFavorite addfavorites").addClass("RemFavorite remfavorites")
                       .attr("title", "Retirer des favoris");

                }
            }
        });

        //btn Retirer des favoris

        $("DIV.RemFavorite").live("click", function() {

            var hrefLink = $(this).next("A:first").attr("href");
            var Match = new RegExp("\\?id=(\\d+)", "gi").exec(hrefLink);
            if (Match) {
                var idTopic = Match[1];
                if (0 == AJAX_ChangeForumFavoris(idTopic, 1, false)) {
                    $(this).removeClass("RemFavorite remfavorites").addClass("AddFavorite addfavorites")
                       .attr("title", "Ajouter aux favoris");
                }
            }
        });

        //btn Ajouter notification mail
        $("DIV.AddNotify").live("click", function() {

            var hrefLink = $(this).next("A:first").attr("href");
            var Match = new RegExp("\\?id=(\\d+)", "gi").exec(hrefLink);
            if (Match) {
                var idTopic = Match[1];
                if (0 == AJAX_ChangeNotify(idTopic, 1, true)) {
                    $(this).removeClass("AddNotify addnotifies").addClass("RemNotify remnotifies")
                       .attr("title", "Retirer des notifiés");
                }

            }
        });

        //btn Ajouter notification favoris
        $("DIV.RemNotify").live("click", function() {

            var hrefLink = $(this).next("A:first").attr("href");
            var Match = new RegExp("\\?id=(\\d+)", "gi").exec(hrefLink);
            if (Match) {
                var idTopic = Match[1];
                if (0 == AJAX_ChangeNotify(idTopic, 1, false)) {
                    $(this).removeClass("RemNotify remnotifies").addClass("AddNotify addnotifies")
                       .attr("title", "Ajouter aux notifiés");
                }
            }
        });

        //add citation, remove,suppr etc...
        $("DIV.OneItem DIV.Toolbar A").live("click", function() {



            var $This = $(this);

            if (typeof (tinyMCE) == "undefined" && $This.is("A.citer"))
                return false;

            var $ToolBar = $This.parent("DIV.Toolbar");
            var idpkmsg = $ToolBar.find("DIV.IdPkMsg").attr("title");
            var boxOneitem = $ToolBar.closest("DIV.OneItem")[0];
            var btnAccepter = $ToolBar.find("A.accepter")[0];
            var btnRefuser = $ToolBar.find("A.refuser")[0];
            var btnSupprimer = $ToolBar.find("A.supprimer")[0];
            var btnRemettre = $ToolBar.find("A.remettre")[0];

            if ($This.is("A.citer")) //Citer
            {

                //
                var $OneItemProche = $This.closest("DIV.OneItem");
                var pseudo = $OneItemProche.find("DIV.Avatar ADDRESS A").text();
                //var vHtml = $OneItemProche.find("DIV.OneForumMessage > DIV.Description").html();
                var vHtml = $OneItemProche.find("DIV.Description:first").html();

                //Vire les embedded medias ;o) et les retransforme en liens normaux !
                //vHtml = vHtml.replace(new RegExp("<div class=\"HyperLinkMedia\">\\s*?<div class=\"MsgMediaVideo\">.*?<a.*?href\\s*?=\\s*?[\"'](.*?)[\"'].*?</div></div>", "gi"),
                //                  " $1 ");

                $vHtml = $("<div>" + vHtml + "</div>"); //pour pouvoir bosser avec le flux (et un noeud racine sinon ca fait X elements jquery ;) )
                $vHtml.find("DIV.HyperLinkMedia").each(function(e) {

                    var $ThisEl = $(this);
                    //remplace .HyperLinkMedia par cette nouvelle ancre texte
                    if ($ThisEl.find("A").length > 0) {
                        $ThisEl.replaceWith(
                        //créer un hyper lien texte (pas de <a>) + espace
                            $ThisEl.find("A").attr("href").replace(/ /gi, "%20") + " "//ajoute un espace apres le lien ! sinon ca se chevauche avec le potentiel suivant !                            
                           );
                    }
                }
                );

                var ed = tinyMCE.activeEditor;
                if (ed) //TINY MCE activated!
                {
                    var sMsg = "<div class='Citation'><a class='delete' title='Retirer la citation' >Retirer</a><div class='pseudocite'>" + pseudo + "</div>" + $vHtml.html() + "</div>&nbsp;";


                    //déplacer le caret a la fin pour Firefox tssss !
                    TinyMCECaretGoToEnd(ed);

                    ed.execCommand('mceInsertContent', false, sMsg.trim());
                    //déplacer le caret a la fin pour Firefox tssss !
                    TinyMCECaretGoToEnd(ed);

                    //activer le slappytomagiccode Filter !
                    var spmc = ed.plugins.slappytomagiccode;
                    if (spmc)
                        spmc._FilterTiny(tinyMCE.activeEditor, null);

                    $This.blur();
                }
                else //NO TINY MCE !
                {
                    $RichText = $("TEXTAREA.RichEditor");
                    var vOldValueTxt = $RichText.val();
                    vOldValueTxt += "\r\n\r\n" + ">> " + pseudo + "\r\n" + "-----------------------" + "\r\n" + $vHtml.text().replace(/.{0,115}/gm, function(m) { return m.trim().length > 0 ? ">> " + m + "\r\n" : ""; }) + "\r\n";
                    $RichText.val(vOldValueTxt);

                }
            }
            else if ($This.is(".accepter")) //Accepter
                AccepterRefuserReponse(idpkmsg, boxOneitem, btnAccepter, btnRefuser, true);
            else if ($This.is(".refuser")) //Refuser
                AccepterRefuserReponse(idpkmsg, boxOneitem, btnAccepter, btnRefuser, false);
            else if ($This.is(".supprimer")) //Supprimer
                if ($This.is(".mail")) //Supprimer    
                if ($This.is(".deleted")) //Supprimer    
                KillMail(idpkmsg, boxOneitem, btnSupprimer);
            else
                SupprimerRemettrerMail(idpkmsg, boxOneitem, btnSupprimer, btnRemettre, true);
            else
                SupprimerRemettrerReponse(idpkmsg, boxOneitem, btnSupprimer, btnRemettre, true);
            else if ($This.is(".remettre")) //Remettre
                if ($This.is(".mail")) //Supprimer
                SupprimerRemettrerMail(idpkmsg, boxOneitem, btnSupprimer, btnRemettre, false);
            else
                SupprimerRemettrerReponse(idpkmsg, boxOneitem, btnSupprimer, btnRemettre, false);

            else
                return true; //c'est un lien normal donc TRUE !


            return false;

        });

        //Medias dans topic (transforme photo/div en objet multimedia)
        //$(".OneItem .HyperLinkMedia IMG.youtube,.OneItem .HyperLinkMedia IMG.dailymotion,.OneItem .HyperLinkMedia DIV.deezer,.OneItem .HyperLinkMedia DIV.myspace,.OneItem .HyperLinkMedia DIV.quicktime,.OneItem .HyperLinkMedia DIV.windowsmedia")
        $("DIV.HyperLinkMedia").find("IMG.youtube,IMG.vimeo,IMG.dailymotion,DIV.flash,DIV.deezer,DIV.soundcloud,DIV.myspace,DIV.quicktime,DIV.windowsmedia")
        .live("click", function() {
            var $This = $(this);
            if ($This.closest(".HPAjaxRepeater.xVideos").length != 0)
                return;

            var urlMedia = $This.closest(".HyperLinkMedia").find("A").attr("href");

            var sHtmlMedia = AJAX_GetMedia(urlMedia);
            if (sHtmlMedia != null && sHtmlMedia.length > 0) {
                $This.parent().prepend($(sHtmlMedia).find("EMBED,OBJECT"));
                $This.remove();

            }

        });




        $("A.AlertModo").click(function(e) {
            var $This = $(this);
            var urlHref = $This.attr("href");
            $This.attr("href", urlHref.replace(new RegExp("prevent=[^$&]+", "gi"), "prevent=" + escape(document.location.href)));

        }
    );


        //J'aime j'aime pas 
        $(".likeness .like,.likeness .dontlike").live("click", function(e) {
            var $This = $(this);
            var isJaime = $This.is(".like");
            var $likeness = $This.closest(".likeness");

            var InputVal = $likeness.find("INPUT").val();
            var RessourceId = InputVal.split(';')[0];
            var RessourceCategorieName = InputVal.split(';')[1];

            var vResumeNotes = AJAX_VoterMessage(RessourceId, RessourceCategorieName, isJaime);
            if (typeof (vResumeNotes.noteglobale) != "undefined") //
            {
                $likeness.find(".who").text((vResumeNotes.noteglobale > 0 ? "+" : "") + vResumeNotes.noteglobale);
                $likeness.find(".like").text(vResumeNotes.notemax);
                $likeness.find(".dontlike").text(vResumeNotes.notemin);
            }

        });

        //qui aime ? aime pas  ?
        $(".likeness .who").live("click", function(e) {
            //alert("todo");

            var $This = $(this);
            var $likeness = $This.closest(".likeness");
            var vScoreTotal = $likeness.find(".who").text();

            var vScorePlus = parseInt($likeness.find(".like").text());
            var vScoreMoins = parseInt($likeness.find(".dontlike").text());

            if (vScorePlus == 0 && vScoreMoins == 0) //pas de stats
                alert("Aucune statistique à afficher");
            else {

                var InputVal = $likeness.find("INPUT").val();
                var RessourceId = InputVal.split(';')[0];
                var RessourceCategorieName = InputVal.split(';')[1];

                var $OneForumMessage = $likeness.closest(".OneItem");

                if ($OneForumMessage.find(".likeStats").length)
                    $OneForumMessage.find(".likeStats").toggle();
                else {

                    var HtmlStats = DrawStatsVotes(RessourceId, RessourceCategorieName, true);
                    $DivStats = $("<div class='likeStats' />").append(HtmlStats);

                    $OneForumMessage.append($DivStats);
                }


            }


            return false;




        });


        // L'attribut target n'est pas validable...donc on va gruger avec JS sur tous les lien de type TargetBlank
        $("A.TargetBlank").live("click", function() {
            window.open(this.href);
            return false;
        });

        //Click sur les tags doit replir le filtre texte + keyup !
        $("DIV.AjaxRepeater DIV.Tags A").live("click", function() {

            //on recherche le texte du lien
            sTag = $(this).text().trim();

            //si le lien est de type cleartext=>Tag à Empty
            if ($(this).is(".clearText"))
                sTag = "";
            else if (sTag.indexOf(" ") != -1) //si y'a des espaces ds le tag on rajoute des guillemets
                sTag = "\"" + sTag + "\"";

            IsCurrentProgramaticChangingFilter = true;
            $FitlreText = $(this).closest("DIV.AjaxRepeater").find("INPUT.FiltreText").val(sTag).keyup();
            IsCurrentProgramaticChangingFilter = false;


            return false;
        });

        /*
        $("DIV.AjaxRepeater.xNews .OneItem").live("mouseover", function() {

            var $This = $(this);
        var $Contenu = $This.closest(".Contenu");
        var $HPEncart = $Contenu.find(".HPEncart");
        //que si les liens ssont différents !
        if ($HPEncart.find("A").attr("href") != $This.find("A").attr("href")) {
        $HPEncart.html($This.html());
        $Contenu.find(".OneItem.active").removeClass("active");
        $This.addClass("active");
        }

        });
        */

        $(".HPAjaxRepeater.xLists.xCours .Contenu .imgVideoPreview").click(function() {
            document.location.href = $(this).nextAll("A").attr("href");

        });


        //Video automatique quand on passe sur une image vids !
        /*
        plsu tard !

        $("IMG.imgVideo").live("mouseover", function() {

            $(".LiveVideo").remove();
        $LiveVideo = $("<div class='LiveVideo'></div>").html("<embed src='" + HTTP_HOST
        + "Commun/Flash/Slappyto Player2.swf' allowfullscreen='true' flashvars='AutoStart=1&myAudio="
        + HTTP_HOST + "Commun/Accordeur/' />");
        $(this).before($LiveVideo);



        }).live("mouseout", function() {



        });
        */


        $("INPUT.FiltreText,#q").attr("title", "Options de recherche : \n\n>Recherche standard : Fender Jazz Bass\n\n>Expression exacte (guillemets) : \"Fender Jazz Bass\"\n\n>Recherche sauf expression : Fender -Squier Jazz Bass\n\n>Recherche sauf expression exacte: Fender -\"Jazz Bass\"\n\n>Ex: 'Fender JB' sauf Squier : \"Fender JB\" -Squier");

        //ACCORDEUR

        $("DIV.Accordeur A").mouseover(function() { PlayAccordeur($(this).attr("class") + NUM_SITE + ".mp3"); }).mouseout(function() { StopAccordeur(); });


        //pas d'animation si la souris est dans le cadre complet !
        $(".HPAjaxRepeater.xNews").hover(
            function() { $(this).data("hover", 1); },
            function() { $(this).data("hover", 0); }
        );

        //on passe sur un item de news
        $(".HPAjaxRepeater.xNews .OneItem").hover(function() {

            var $xNews = $(".HPAjaxRepeater.xNews");

            $xNews.find(".OneItem.highlighted").removeClass("highlighted");
            $(this).addClass("highlighted");
            $xNews.find("A.BigPreviewLink").attr("href", $(this).find("A").attr("href")); //on change l'image

            $xNews.find("IMG.BigPreview").attr("src", $(this).find("IMG").attr("src") + "b"); //on change l'image
            $xNews.find("SPAN.BigTitre").text($(this).find(".Titre").text()); //on change le texte
            $xNews.find("SPAN.BigDate").text($(this).find(".Date").text()); //on change la date
            var vComs = $(this).find(".Coms").text();
            if (vComs == null || vComs.length == 0)
                $xNews.find("SPAN.BigComs").hide();
            else
                $xNews.find("SPAN.BigComs").text(vComs).show(); //on change la date

        }
        );

        //pour les messages "bad", rajoute un lien pour les montrer
        setInterval(function() { if ($(".AjaxRepeater.xForums .Contenu .OneItem A.voir-bad").length == 0) $(".AjaxRepeater.xForums .Contenu .OneItem .Description.bad").before($("<a class='voir-bad'>( Ce message a reçu trop de votes négatifs, cliquez ici pour le voir )</a>")); }, 1500);

        $(".AjaxRepeater.xForums .Contenu .OneItem .voir-bad").live("click", function() { $(this).closest(".OneItem").find(".Description").removeClass("bad"); $(this).remove(); });



        //SCROLLING NEWS
        setInterval(
        function() {

            var $HPAjaxRepeater = $(".HPAjaxRepeater.xNews");

            if ($(".HPAjaxRepeater").data("hover") == 1)
                return;

            //1.qui est l'item highlighted?.
            var $OneItemHighlighted = $HPAjaxRepeater.find(".Contenu .OneItem.highlighted");

            //2.on vire le highlight
            $OneItemHighlighted.removeClass("highlighted");
            //3.on va highliter le suivant..ou le premier si y'en a plus !
            var $Next = $OneItemHighlighted.next(".OneItem");
            $Next = $Next.length == 0 ? $HPAjaxRepeater.find(".Contenu .OneItem:eq(0)") : $Next;


            $Next.addClass("highlighted"); //on higlight
            $HPAjaxRepeater.find("A.BigPreviewLink").attr("href", $Next.find("A").attr("href")); //on change le lien de l'image
            $HPAjaxRepeater.find("IMG.BigPreview").attr("src", $Next.find("IMG").attr("src") + "b"); //on change l'image
            $HPAjaxRepeater.find("SPAN.BigTitre").text($Next.find(".Titre").text()); //on change le texte
            $HPAjaxRepeater.find("SPAN.BigDate").text($Next.find(".Date").text()); //on change la date

            var vComs = $Next.find(".Coms").text();

            if (vComs == null || vComs.length == 0)
                $HPAjaxRepeater.find("SPAN.BigComs").hide();
            else
                $HPAjaxRepeater.find("SPAN.BigComs").text(vComs).show(); //on change la date


        }, 3200);



        /*  $(".HPAjaxRepeater.xNews .MiniScroll").click(function() {
        var $HPAjaxRepeater = $(this).closest(".HPAjaxRepeater");
        var $Contenu = $HPAjaxRepeater.find(".Contenu");
        if ($Contenu.is(":animated"))//en cours d'animation?
        return; //on ne fait rien !

            var Contenu = $Contenu[0];
        var Items = $Contenu.find(".Items")[0];


            var Increment = $(this).is(".Right") ? Contenu.offsetWidth : (-Contenu.offsetWidth);
        var vNewScrollValue = Contenu.scrollLeft + Increment;


            if (vNewScrollValue <= 0)
        vNewScrollValue = 0;


            if (vNewScrollValue <= Items.offsetWidth) {
        $Contenu.animate({ scrollLeft: vNewScrollValue }, 250);
        var bIsLeft = true;
        var bIsRight = true;

                if ((vNewScrollValue + Increment) >= Items.offsetWidth)
        bIsRight = false;
        else if (vNewScrollValue <= 0)
        bIsLeft = false;

                if (bIsLeft) $HPAjaxRepeater.find(".MiniScroll.Left").show();
        if (!bIsLeft) $HPAjaxRepeater.find(".MiniScroll.Left").hide();
        if (bIsRight) $HPAjaxRepeater.find(".MiniScroll.Right").show();
        if (!bIsRight) $HPAjaxRepeater.find(".MiniScroll.Right").hide();

            }


        });
        */


        //PAZIK
        //Associe les clicks sur checkbox
        $("DIV.Surplus.PAZik INPUT[type=checkbox]").click(function() {

            return UpdateFiltreZik(this);
        });


        // lien de confirmation
        $("A.confirm").live("click", function() {
            return confirm("Etes vous sûr de vouloir effectuer cette action ?");
        });

        // ON-OFF RichTextBox
        $("A.FlipRTB").click(function(ev) {
            var $This = $(this);
            var vUrl = document.location.href;
            vUrl = vUrl.replace(new RegExp("(\\?&|&|\\?)RichTextBox=[^&#]*", "gi"), "")
            var vIndexAncre = vUrl.indexOf("#");
            var vIndexQuery = vUrl.indexOf("?");


            if ($This.is(".On")) {
                if (vIndexAncre != -1)//ancre?
                {
                    if (vIndexQuery != -1) //query ?                
                        vUrl = vUrl.replace("#", "&RichTextBox=1#");
                    else
                        vUrl = vUrl.replace("#", "?RichTextBox=1#");
                }
                else if (vIndexQuery != -1) //query ?                
                    vUrl = vUrl += "&RichTextBox=1";
                else
                    vUrl = vUrl += "?RichTextBox=1";

            }
            else if ($This.is(".Off")) {
                if (vIndexAncre != -1)//ancre?
                {
                    if (vIndexQuery != -1) //query ?                
                        vUrl = vUrl.replace("#", "&RichTextBox=0#");
                    else
                        vUrl = vUrl.replace("#", "?RichTextBox=0#");
                }
                else if (vIndexQuery != -1) //query ?                
                    vUrl = vUrl += "&RichTextBox=0";
                else
                    vUrl = vUrl += "?RichTextBox=0";
            }

            document.location.href = vUrl;

        });


        $(".NotificationsBox .Son INPUT").click(function() {

            var dateExpire = new Date();
            dateExpire.setFullYear(9999, 11, 31); //N'expire jamais...
            EcrireCookie("SoundNotification", ($(this).is(":checked")), dateExpire, "/"/*racine du site*/);


        });



        // if (CurrentHash.indexOf("idmsg_") != -1)

        //HIGHLIGHT le message si y'en a un dans l'ancre avec idmsg !
        var matchHighlight = new RegExp("idmsg_[0-9]+").exec(GET_ANCRE());
        if (matchHighlight) {
            var $Ancre = $("A[name={0}]".format(matchHighlight));
            if ($Ancre.length) {
                var $OneItem = $Ancre.closest(".OneItem");
                var CurrentColor = $OneItem.css("background-color");

                setIntervalTimeout(function() { $OneItem.toggleClass("Flashing"); },
                               function() { $OneItem.removeClass("Flashing"); },
                               300,
                               2500);
            }
        }

        //LIGHTBOX
        $(".ImagesDiapo A,.OneRessource.OneTest .Images A,TABLE.eZine:not(.eTV) TBODY A.couv,.magazine .article > IMG").lightBox();

        //messages sur wall via carte de visite
        $(".CarteVisite .OneInfo.msg INPUT").live("click", function() {
            $MsgBox = $(this).closest(".OneInfo");
            //textbox
            $Texte = $MsgBox.find("TEXTAREA");
            $UID = $MsgBox.find("INPUT.UID");

            var vTexte = $Texte.val();

            if (vTexte.trim().length > 0) {

                //envoie du message
                if (AJAX_ERROR_OK == AJAX_SendMessageWall($UID.val(), $Texte.val()))
                    $Texte.val(""); //on raz le champ texte
            }

            return true;
        });


        //Propose automatiquement une conversion Translate by google apis
        //https: //www.googleapis.com/language/translate/v2/detect?key=AIzaSyBrp-h-H3EPjFgoxR6uEjW1dflOowK_ebg&q=hello+how+are+you&source=en&target=fr

        //$(".DescriptionContenu,TABLE.eZine,DIV.OneProfil DIV.Interview").each(function(i)//
        /*$(".DescriptionContenu,DIV.OneProfil DIV.Interview").each(function(i)//
        
        {
        $(this).before("<div class='translate_bar'><a class='{0} selected' href='javascript:;' title='Français'>FR</a>".format("fr") +
        "<a class='{0}' href='javascript:;' title='English'>EN</a>".format("en") +
        "<a class='{0}' href='javascript:;' title='Deutsch'>DE</a>".format("de") +
        "<a class='{0}' href='javascript:;' title='Español'>ES</a>".format("es") +
        "<a class='{0}' href='javascript:;' title='Italiano'>IT</a>".format("it") +
        "<a class='{0}' href='javascript:;' title='Nederlands'>NL</a>".format("nl") +
        "<a class='{0}' href='javascript:;' title='Português'>PT</a>".format("pt") +
        "</div>");


        });

        $("DIV.translate_bar A").live("click", function(i) {

            //d'abord on backup si c'est pas déjà fait
        $This = $(this);
        $TranslateBar = $This.closest("DIV.translate_bar");
        $DestinationBloc = $TranslateBar.next(); //juste le tag d'après

            //on présauvegarde le FR si pas déjà fait            
        if ($DestinationBloc.data("fr") == null)
        $DestinationBloc.data("fr", $DestinationBloc.html());

            //ok on a le texte d'origine en FR
        //on peut faire les conversions ou remettre celui d'origine !
        var CodeLanguage = new RegExp("\\w+").exec($This.attr("class"))[0];

            var vPotentialTraductionCache = $DestinationBloc.data(CodeLanguage);

            if (vPotentialTraductionCache != null) //trad en cache
        {
        $DestinationBloc.html(vPotentialTraductionCache);

                //on vire tous les sélectionnés
        $TranslateBar.find("A").removeClass("selected");
        //on sélectionne celui qu'on vient de cliquer
        $This.addClass("selected");
        }
        else  //op on fait une translation car autre language
        {
        //est ce qu'on l'a déjà en cache ?
        var JSonObject = {};
        JSonObject["Action"] = "TranslateGoogle";
        JSonObject["source"] = "fr";
        JSonObject["target"] = CodeLanguage;
        JSonObject["q"] = $DestinationBloc.data("fr");
        JSonObject["url"] = document.location.href;

                SimpleAjaxScalar(JSonObject
        , true //asynchrone, pas besoin de bloquer l'appli !
        , function(pJSonData) {

                            //on affiche la valeur et on la met en cache
        var vTranslationGoogle = pJSonData.valueAlreadyJSON.data.translations[0].translatedText;

                            if (vTranslationGoogle != null) //
        {
        $DestinationBloc.html(vTranslationGoogle);
        $DestinationBloc.data(CodeLanguage, vTranslationGoogle);


                                //on vire tous les sélectionnés
        $TranslateBar.find("A").removeClass("selected");
        //on sélectionne celui qu'on vient de cliquer
        $This.addClass("selected");
        }

                        }
        , null, null, true
        );

            }


            return false;
        });
        */

        $(".spzine_addtemplate").click(function(e) {
            if (confirm("Etes-vous certain d'appliquer le modèle ? La zone de texte riche va être remise à zéro et formatée")) //
            {
                var ed = tinyMCE.activeEditor;

                ed.undoManager.add(); //on garde dans l'historique
                ed.setContent("<div class='magazine'><h3>Introduction ici 3/4 lignes maximum.</h3><div class='article'>Paragraphe ici<h4>Sous-Titre</h4>Paragraphe<h4>Sous-Titre</h4>Paragraphe<h4>Sous-Titre</h4>Paragraphe<h4>Conclusion</h4>Paragraphe</div></div>");

                $("#ctl00_cph_ctl01_txtTags").val("SlappytoZine");
                $("#ctl00_cph_ctl01_rbListeCategories_4").click();


            }

        });

        $(".newsletter").click(function() {

            AJAX_SubscribeNewsletter();

        });

        //ShowPoints();


        //adblock ?

        setTimeout(function() {
            var $vAdsense = $(".Adsense:not(.justbloc):visible");
            var dateExpire = new Date();
            dateExpire.setFullYear(9999, 11, 31); //N'expire jamais...        

            if ($vAdsense.length && !($vAdsense.find("IFRAME,IMG,OBJECT").length)) {
                $vAdsense.find(".removeAB")
                .html("Si vous aimez {0}, <a href=\"{1}\">soutenez-le en le désactivant de votre <b>AdBlock</b></a>".format(DOMAINE_NAME, HTTP_HOST + "FAQ#ads"))
                .show();
                EcrireCookie("ADB", 1, dateExpire, "/");
            }
            else
                EcrireCookie("ADB", 0, dateExpire, "/");

        }, 3000);



        /// SURCHARGE DE ValidatorUpdateDisplay ! Pour mettre en rouge les champs qui foirent !

        if (OldValidatorUpdateDisplay == null && typeof (ValidatorUpdateDisplay) != "undefined") {



            OldValidatorUpdateDisplay = ValidatorUpdateDisplay;

            ValidatorUpdateDisplay = function ValidatorUpdateDisplay(val) {
                OldValidatorUpdateDisplay(val); //on appelle l'ancien code
                //là on ajoute la classe qui foire directement sur le contrôle !
                $ControlToValidate = $("#" + val.controltovalidate);
                if (val.isvalid)
                    $ControlToValidate.removeClass("ValidateError").addClass("ValidateOk");
                else
                    $ControlToValidate.removeClass("ValidateOk").addClass("ValidateError");


            };

        }
    });

   
