
function getAlloPassLink(txt, style)
{
    if (! style) style = '';
    return '<a style="'+style+'" href="#" onClick="return kamaPopup(\'./?&pagename=allopass&isframe=true\', \'frame_allopass\', 750, 700, \'scrollbars=yes,resizable=yes\');">'+txt+'</a>';
}

function getStandardUserNameLink(userID, txt, style)
{
    if (! style) style = '';
    if (globalstxt.payment)
    {
        return '<a style="'+style+'" href="#" onClick="return kamaPopup(\'./?&pagename=userDescription&isframe=true&userDescriptionID='+userID+'\', \'frame_userDescription\', 640, 700, \'scrollbars=yes,resizable=yes\');">'+txt+'</a>';
    }
    else
    {
        return getAlloPassLink(txt, style);
    }
        
}
function getBeginChatLink(destuserID, txt, style)
{
    if (! style) style = '';
    if (globalstxt.payment)
    {
        var frameHtmlName = 'frame_chat_'+destuserID;
        return '<a href="#" style="'+style+'" onClick="return kamaPopup(\'?&pagename=chatPopup&isframe=true&beginChat=true&destuserID='+destuserID+'\', \''+frameHtmlName+'\', 700, 600, \'scrollbars=yes,resizable=yes\');">'+txt+'</a>';        
    }
    else
    {
        return getAlloPassLink(txt, style);
    }
}

function getUserImgLink(imageID, isThumb)
{
    var thumb = '';
    if (isThumb)
        thumb = '&isThumb=true';
    return './?&request=picture&pictureID='+imageID+thumb;
}

function getDefaultAvatarFileName(userDescription)
{
    if (userDescription.genre1 == 'm')
        return "./public/avatar-H-mini.jpg";
    else if (userDescription.genre1 == 'f')
        return "./public/avatar-FEM-mini.jpg";
    else if (userDescription.genre1 == 't')
        return "./public/avatar-TG-mini.jpg";
    else { /* error */ }
}

function getUserAvatarIMG(userDescription, isThumb)
{     
    if (userDescription.avatar == '')
        return '<IMG src="'+getDefaultAvatarFileName(userDescription)+'"/>';
    else
    {
        //        
        var htmlIMG = '<IMG src="'+getUserImgLink(userDescription.avatar, isThumb)+'"/>';
        // pas de lien sur l'image full s'il s'agit de l'image full:
        if (isThumb)
        {
            if (globalstxt.payment)
            {
                var link = '?&pagename=avatarPopup&isframe=true&userAvatarID='+userDescription.id_user;
                return '<a href="#" onClick="return kamaPopup(\''+link+'\', \'avatarPopup\', 600, 600, \'scrollbars=yes,resizable=yes\');">'+htmlIMG+'</a>';    
            }
            else
            {
                return getAlloPassLink(htmlIMG);
            }
        }
        else
            return htmlIMG;
    }
}

// renvoie l'ID du div créé
function WriteUserDescriptionContainer(params)
{
    var newID = generateUniqueID();
    var classCSS = 'userDescription';
    
    if (params.mode == 'compact')
    {
        classCSS += ' userDescriptionCompact';
    }
    // 
    document.write('<DIV id="'+newID+'" class="'+classCSS+'"></DIV>');
    return newID;
}


function getColoredName(userDescription)
{
    var out = '';
    var usernamecolor;
    if (userDescription.genre1 == 'm')
        usernamecolor = '#00ccff';
    else if (userDescription.genre1 == 'f')
        usernamecolor = 'green';
    else if (userDescription.genre1 == 't')
        usernamecolor = '#ff0000';

    // nom + genre + liking
    out += '<DIV style="display:inline;font-size:small;font-weight:bold;">';
    out += getStandardUserNameLink(userDescription.id_user, userDescription.login, 'color:'+usernamecolor+';');
    out += '</DIV>';    
    return out;
}

function getGenreDomLinking(userDescription)
{
    var out = '';
    var genreColor;
    if (userDescription.genre1 == 'm')
    {
        genreColor = '#66ff99';
    }
    else if (userDescription.genre1 == 'f')
    {
        genreColor = 'green';
    }
    else if (userDescription.genre1 == 't')
    {
        genreColor = 'rgb(100%, 40%, 80%)';
    }
    
    // nom + genre + liking
    out += '<DIV style="display:inline;font-size:small;font-weight:bold;">';
    //out += getStandardUserNameLink(userDescription.id_user, userDescription.login, 'color:'+usernamecolor+';')+'<BR/>';
    out += '<DIV style="display:inline;color:'+genreColor+'">'+globalstxt.genre[userDescription.genre1]+'</DIV> - ';
    out += globalstxt.liking[userDescription.liking1];
    out += '</DIV>';
    
    return out;
}

function writeEditProfilbutton(userDescription)
{
    return '<br/><a href="?&pagename=editprofil&validatingUserID='+userDescription.id_user+'&adminEditProfil=true" style="font-size:x-small">edition</a>';
}

function getUserDescription(userDescription, params)
{
    var out = '';
    
    if (params.mode == 'debug')
    {
        alert('getUserDescription: "debug" not implemented');

    } else if (params.mode == 'full-popup')
    {
        out += '<TABLE class="fullWidth popupUserDescription_main"><TR><TD>';
        out += '<BR/><BR/>';
        
        out += '<DIV class="popupUserDescription_username">'+userDescription.login+'</DIV>';
        out += '<BR/><BR/>';

        out += getUserAvatarIMG(userDescription, true);
        if (globalstxt.isAdmin) // Cher lecteur, ne revez pas, il y a un check des droits coté serveur :)
            out += writeEditProfilbutton(userDescription);
                
        out += '<BR/><DIV style="color:#ff0066;font-size:smaller">Cliquez pour agrandir</DIV>';
        
        out += '<BR/><DIV class="popupUserDescription_properties">';
        out += '<BR/>'+getGenreDomLinking(userDescription);
        out += '<BR/>'+EnumToTxt(userDescription.dom1, globalstxt.domtxt);
        
        if (userDescription.dateborn != 0)
            out += ' - '+userDescription.age+' ans';
        
        out += '<BR/>'+EnumToTxt(userDescription.categories, globalstxt.categoriestxt);
        out += '<BR/>'+userDescription.town+'<BR/>'+userDescription.location;
        out += '</DIV>';

        out += '<BR/><DIV class="popupUserDescription_description">'+userDescription.minititle+'</DIV>';
        out += '<BR/><DIV class="popupUserDescription_description">'+userDescription.description+'</DIV>';
        
        if (params.can_chat && userDescription.can_chat)
        {
            out += '<BR/><BR/>';
            out += getBeginChatLink(userDescription.id_user, '<IMG style="vertical-align:bottom" src="./public/flechG-fiche-profil.jpg"/>');
            out += getBeginChatLink(userDescription.id_user, 'Lui écrire', 'vertical-align:top');
            out += getBeginChatLink(userDescription.id_user, '<IMG style="vertical-align:bottom" src="./public/flechD-fiche-profil.jpg"/>');            
        }
        
        out += '</TD></TR></TABLE>';
        
    } else if (params.mode == 'compact' || params.mode == 'allfields' || params.mode == 'super-compact')
    {
        var isCompact = params.mode == 'compact';
        var supercompact = params.mode == 'super-compact';
        out += '<TABLE class="fullWidth"><TR><TD style="width:'+params.thumb_width+'px;height:'+params.thumb_height+'px">';
        
        // 1ère colonne: l'avatar:
        out += getUserAvatarIMG(userDescription, true);
        if (globalstxt.isAdmin) // Cher lecteur, ne revez pas, il y a un check des droits coté serveur :)
            out += writeEditProfilbutton(userDescription);
        
        if (supercompact)
        {
            out += '<DIV>'+getColoredName(userDescription)+'<br/>'+getGenreDomLinking(userDescription)+'</DIV>';
            if (params.can_chat && userDescription.can_chat)
            {
                out += getBeginChatLink(userDescription.id_user, 'lui écrire', 'display:inline;font-size:x-small;font-weight:bold;color:#33ff66;');
            }
        } else
        {
            // 2ème colonne: username + description:
            out += '</TD><TD style="width:auto">';
        
            out += getColoredName(userDescription)+'<BR/>'+getGenreDomLinking(userDescription);

            // dom1 + categories + town
            if (!isCompact)
            {
                out +=
                    '<DIV class="genrelikingdom">'+
                    EnumToTxt(userDescription.dom1, globalstxt.domtxt)+'<BR/>'+
                    EnumToTxt(userDescription.categories, globalstxt.categoriestxt)+'<BR/>'+
                    userDescription.town+'<BR/>'+
                    userDescription.location+'<BR/>'+
                    '</DIV>';

                    out += '<BR/><DIV style="">'+userDescription.minititle+'</DIV>';
                    out += '<BR/><DIV style="">'+userDescription.description+'</DIV>';
            }
            
            //                                     
            if (isCompact)
            {
                // minititre / description courte:
                // Si pas de descrition courte, affichage d'un extrait de la description longue:
                var minititle;
                if (userDescription.minititle.length == 0)
                {
                    minititle = userDescription.short_description; 
                    if (userDescription.description.length > userDescription.short_description.length)
                    //    minititle += ' '+getStandardUserNameLink(userDescription.id_user, '(lire)');
                        minititle += ' (...)';
                }
                else
                {
                    minititle = userDescription.minititle;
                }
                
                out += '<BR/><DIV style="font-size:x-small;color:white;">'+minititle+'</DIV>';

                // location:
                //out += '<DIV style="font-size:small">'+userDescription.location+'</DIV>';

            };
            
            
/*
            // description [partiel]:
            if (isCompact)
            {
                out += userDescription.short_description;
                if (userDescription.description.length > userDescription.short_description.length)
                    out += ' '+getStandardUserNameLink(userDescription.id_user, '(lire)');
            }
            else
                out += userDescription.description;
*/

            // Ecrire & SonProfil:
            out += '<DIV style="font-size:x-small;font-weight:bold">';
            
            if (params.can_chat && userDescription.can_chat)
            {
                out += 
                    getBeginChatLink(userDescription.id_user, 'LUI ECRIRE', 'color:#33ff66;')+
                    getBeginChatLink(userDescription.id_user, '<IMG align="absMiddle" src="./public/fleche-verte.gif"/>');
            }
            if (isCompact)
            {
                out +=
                    getStandardUserNameLink(userDescription.id_user, 'SON PROFIL', 'color:#cc99ff;')+
                    getStandardUserNameLink(userDescription.id_user, '<IMG align="absMiddle" src="./public/fleche-mauve.gif"/>');
            }
            out += '</DIV>';                        
        }
        
        out += '</TD></TR></TABLE>';

    } else alert('getUserDescription: "params.mode" invalid: '+params.mode);
    return out; 
}

function WriteUserDescription(userDescription, params)
{
    var containerID = WriteUserDescriptionContainer(params);
    $(containerID).innerHTML = getUserDescription(userDescription, params);
}

// --------- liste d'utilisateurs auto update:
function WriteUserListContainer()
{
    var newID = generateUniqueID();
    document.write('<DIV id="'+newID+'" class="userList"></DIV>');
    return newID;
}

function AutoUpdateUserList(containerID, JsonRequestURL, currentUserID, updateRate, params)
{
    var nextUpdateCode = "AutoUpdateUserList('"+containerID+"', '"+JsonRequestURL+"', "+currentUserID+", "+updateRate+", "+Object.toJSON(params)+");";
    
    new Ajax.Request(JsonRequestURL, {
        method: 'get',
        onSuccess: function(transport)
        {
            try
            {
                var userList = EvalJSon(transport.responseText);
            }
            catch(e)
            {
                catchJSonError(transport.responseText);
                return;
            }
            
            var output = '';
            if (userList.length > 0)
                output += '<TABLE class="fullWidth">';
            
            for (var i = 0; i < userList.length; ++i)
            {
                // l'utilisateur courant de doit pas apparaitre dans la liste des connectés:
                if (userList[i].id_user == currentUserID)
                    continue;

                // - état de l'utilisateur:
                var CssClass = '';
                var userStat = '';
                if (userList[i].isconnected)
                {
                    CssClass = 'blockUserConnected';
                    userStat = 'Connecté';
                }
                else
                {
                    CssClass = 'blockUserDisconnected';
                    userStat = 'Déconnecté';
                }
                output += '<TR><TD class="'+CssClass+'">'+userStat+'</TD></TR>'; 

                // description utlisateur:            
                output += '<TR><TD>'+getUserDescription(userList[i], params)+'</TD></TR>';
            }

            if (userList.length > 0)
                output += '</TABLE>';

            
            $(containerID).innerHTML = output;
            if (updateRate > 0)
            {
                setTimeout(nextUpdateCode, updateRate);
            }
        }
    } );
    
}

function WriteUserListDescriptionAutoUpdate(JsonRequestURL, currentUserID, updateRate, params)
{
    AutoUpdateUserList(WriteUserListContainer(), JsonRequestURL, currentUserID, updateRate, params);
} 

// optimisation: si l'ID du dernier post est connu. Inutile de mettre à jour.  
var lastknownPostID = 0;
var globalChannelID = 0; // crade, je sais...

function AutoUpdateChannelContent(containerID, JsonRequestURL, updateRate, formulaire)
{
    var nextUpdateCode = "AutoUpdateChannelContent('"+containerID+"', '"+JsonRequestURL+"', "+updateRate+", false);";

    // si quelchose à poster:
    var params = { };
    if (formulaire != false)
    {
        params = { 'chat_post' : 'true', 'chat_post_content' : formulaire.chat_post_content.value };
    }

    new Ajax.Request(JsonRequestURL+'&lastknownPostID='+lastknownPostID, {
        method: 'get',
        parameters: params,
        onSuccess: function(transport)
        {
            try
            {
                var postList = EvalJSon(transport.responseText);
            }
            catch(e)
            {
                catchJSonError(transport.responseText);
                return;
            }                            

            // optimisation: nonewpost
            if (postList.nonewpost == true)
            {
                //alert("rien de nouveau");
            }
            else
            {
                //alert("mise à jour");
                // mise à jour HTML:                            
                var output = '';
                for (var i = 0; i < postList.length; ++i)
                {
                    output += '<I>' + postList[i].post_date + '</I> <B>&lt;' + postList[i].login + '&gt;</B> ' + postList[i].postContent + '<BR/>';                                
                }
                
                // mise à jour lastknownPostID:
                if (postList.length == 0)
                    lastknownPostID = 0;
                else
                    lastknownPostID = postList[postList.length-1].IDpost;    
    
                $(containerID).innerHTML = output;
            }

            if (updateRate > 0)
            {
                setTimeout(nextUpdateCode, updateRate);
            }
        }
    } );        
}

function WriteChannelContentContainerAutoUpdate(JsonRequestURL, updateRate)
{
    var newID = generateUniqueID();
    globalChannelID = newID;
    document.write('<DIV id="'+newID+'" class="">Updating...</DIV>');
    AutoUpdateChannelContent(newID, JsonRequestURL, updateRate, 0);
}

function AutoUpdateNewMessages(containerID, JsonRequestURL, updateRate, currentChannelID, NoDetails)
{
    var nextUpdateCode = "AutoUpdateNewMessages('"+containerID+"', '"+JsonRequestURL+"', "+updateRate+", "+currentChannelID+", "+NoDetails+");";
    new Ajax.Request(JsonRequestURL, {
        method: 'get',
        onSuccess: function(transport, content)
        {
            try
            {
                var newMessagesList = EvalJSon(transport.responseText);
            }
            catch(e)
            {
                catchJSonError(transport.responseText);
                return;
            }
            
            var nbMsg = newMessagesList.length;
            
            // le channel courant ne compte pas:
            var entryIndexToIgnore = -1;
            for (var i = 0; i < newMessagesList.length; ++i) // recherche du channel courant
            {
                if (newMessagesList[i].channel_id == currentChannelID)
                {
                    entryIndexToIgnore = i;
                    --nbMsg;
                }
            }
            
            var output = LeastOne(nbMsg, '<B>')+nbMsg+' nouveau'+PlurielX(nbMsg, 'x')+' message'+Pluriel(nbMsg)+LeastOne(nbMsg, '</B>')+'<BR/>';
            
            if (! NoDetails)
            {
                for (var i = 0; i < newMessagesList.length; ++i)
                {
                    if (i != entryIndexToIgnore)
                        output += '<P>'+newMessagesList[i].userDescription.login+'<BR/>'+getBeginChatLink(newMessagesList[i].userDescription.id_user, 'Lire/Répondre')+'</P>';
                }
            }
            
            $(containerID).innerHTML = output;

            if (updateRate > 0)
                setTimeout(nextUpdateCode, updateRate);
                
        }
    } );
    
}

function WriteNewMessagesContainer(JsonRequestURL, updateRate, currentChannelID, NoDetails)
{
    var newID = generateUniqueID();
    document.write('<TABLE style="width:100%"><TR><TD id="'+newID+'" class="newmessages">Updating...</TD></TR></TABLE>');
    AutoUpdateNewMessages(newID, JsonRequestURL, updateRate, currentChannelID, NoDetails);
}

// était utilisé pour gérer la touche ENTER quand <INPUT type="text" remplacait TEXTAREA dans le post de channel
function ChatHandlerKeyPress(champ, evt)
{
    // blindage:
    evt = (evt) ? evt : ((event) ? event : null);
    if (!evt) return;

    // ignore auto validation:
    if (evt.keyCode == 13)
    {
        ValidChatPost(champ.form);
        return false;
    }
}

function ValiderDate(partie, suffix)
{
  var jourmax = 31;
  var formulaire = partie.form;
  
  eval('var champSaisie = formulaire.'+suffix+'_'+'saisie;');
  eval('var champMois = formulaire.'+suffix+'_'+'mois;');
  eval('var champAnnee = formulaire.'+suffix+'_'+'annee;');
  eval('var champJour = formulaire.'+suffix+'_'+'jour;');
  
  var saisie = champSaisie.value;
  var mois = champMois.value;
  var annee = champAnnee.value;
  var jour = champJour.value;
  
  // Sauvegarde du jour sélectionné
  if (partie.name == 'jour') {
    champSaisie.value = jour;
    saisie = jour;
  }
  if (!saisie) saisie = jour;
  // Sortie si les trois valeurs ne sont pas saisies
  if (!saisie || !mois || !annee) return;
  // Calcul du nombre de jours dans le mois sélectionné
  switch(mois) {
    case "2":
      if (annee % 4 == 0 && annee % 100 != 0 || annee % 400 == 0)
        jourmax = 29;
      else
        jourmax = 28;
      break
    case "4":
    case "6":
    case "9":
    case "11":
      jourmax = 30;
      break
    default:
      jourmax = 31;
  }
  // Si la saisie est différente du jour affiché, mise à jour de l'affichage
  if (saisie > jour) {
    jour = saisie;
    champJour.value = saisie;
  }
  // Si le jour sélectionné est supérieur au nombre de jours dans le mois
  if (jour > jourmax) champJour.value = jourmax;
}

