﻿function $(item) {
    return document.getElementById(item);
}

function showDiv(item) {
    $(item).style.display = "";

    // Décalage à gauche si on sort à droite
    if (getOffset($(item))[0] + getSize($(item))[0] > getWindowWidth() - 40) {
        $(item).style.left = (getWindowWidth() - getSize($(item))[0] - 40) + "px";
    }
    // Décalage à droite si on sort à gauche
    if (getOffset($(item))[0] <= 0) {
        $(item).style.left = "5px";
    }
    // Décalage en haut si on sort en bas
    var yScroll = document.body.scrollTop || document.documentElement.scrollTop;
    if (getOffset($(item))[1] + getSize($(item))[1] > getWindowHeight() + yScroll - 10) {
        $(item).style.top = (getWindowHeight() + yScroll - getSize($(item))[1] - 10) + "px";
    }
    // Décalage en bas si on sort en haut
    if (getOffset($(item))[1] <= yScroll) {
        $(item).style.top = (yScroll + 5) + "px";
    }
}


function getWindowHeight() {
    var h = 0;
    if (typeof (window.innerHeight) == 'number') { // Netscape
        h = window.innerHeight;
    } else if (document.documentElement && document.documentElement.clientHeight) {
        h = document.documentElement.clientHeight;
    } else if (document.body && document.body.offsetHeight) { //client
        h = document.body.offsetHeight;
    }
    return h;
}

function getDocumentHeight() {
    if (document.all)
        return document.body.offsetHeight;
    else if (document.layers)
        return document.body.document.height;
}

function getWindowWidth() {
    var w = 0;
    if (typeof (window.innerWidth) == 'number') { // Netscape
        w = window.innerWidth;
    } else if (document.documentElement && document.documentElement.clientWidth) {
        w = document.documentElement.clientWidth;
    } else if (document.body && document.body.offsetWidth) { //client
        w = document.body.offsetWidth;
    }
    return w;
}

function delHTMLTags(text, keepbill) {
    return stringWithoutEntitiesNumber(stringWithoutEntitiesNames(stringWithoutHtml(text, keepbill)));
}

function stringWithoutHtml(texte, keepbill) {
    var text = texte;
    var traitee = '';
    var textAvantBalise = ''; 
    var textApresBalise = '';

    // Suppression des balises <style>...</style>
    while (text != '' && text.indexOf('<style>') >= 0 && text.indexOf('</style>') > text.indexOf('<style>')) {
        textAvantBalise = text.substr(0,text.indexOf('<style>')) ; 
        textApresBalise = text.substr(text.indexOf('</style>', text.indexOf('<style>')) + 8 , text.length - text.indexOf('</style>', text.indexOf('<style>'))) ; 
        text = textAvantBalise.concat(textApresBalise) ; 
        textAvantBalise = '' ; 
        textApresBalise = '' ; 
    }

    // Suppression des balises <xml>...</xml>
    while (text != '' && text.indexOf('<xml>') >= 0 && text.indexOf('</xml>') > text.indexOf('<xml>')) {
        textAvantBalise = text.substr(0,text.indexOf('<xml>')) ; 
        textApresBalise = text.substr(text.indexOf('</xml>', text.indexOf('<xml>')) + 6 , text.length - text.indexOf('</xml>', text.indexOf('<xml>'))) ; 
        text = textAvantBalise.concat(textApresBalise) ; 
        textAvantBalise = '' ; 
        textApresBalise = '' ; 
    }

    if (keepbill == 0) {
        // Suppression des balises <...>
        while (text.indexOf('<') >= 0 && text.indexOf('>', text.indexOf('<')) > text.indexOf('<')) {
            text = text.substr(0, text.indexOf('<')) + text.substr(text.indexOf('>', text.indexOf('<')) + 1, text.length);
        }
    } else {
        // Suppression des balises <...> sauf quelques unes
        // !!! Attention : mêmes tests que dans la fonction SQL delHTMLTags !!!
        while (text != '' && text.indexOf('<') >= 0 && text.indexOf('>') > text.indexOf('<')) {
            if (text.indexOf('<') != text.indexOf('<b>') && text.indexOf('<') != text.indexOf('<B>')
                    && text.indexOf('<') != text.indexOf('</b>') && text.indexOf('<') != text.indexOf('</B>')
                    && text.indexOf('<') != text.indexOf('<i>') && text.indexOf('<') != text.indexOf('<I>')
                    && text.indexOf('<') != text.indexOf('</i>') && text.indexOf('<') != text.indexOf('</I>')
                    && text.indexOf('<') != text.indexOf('<ul>') && text.indexOf('<') != text.indexOf('<UL>')
                    && text.indexOf('<') != text.indexOf('</ul>') && text.indexOf('<') != text.indexOf('</UL>')
                    && text.indexOf('<') != text.indexOf('<li>') && text.indexOf('<') != text.indexOf('<LI>')
                    && text.indexOf('<') != text.indexOf('</li>') && text.indexOf('<') != text.indexOf('</LI>')
                    && text.indexOf('<') != text.indexOf('<em>') && text.indexOf('<') != text.indexOf('<EM>')
                    && text.indexOf('<') != text.indexOf('</em>') && text.indexOf('<') != text.indexOf('</EM>')
                    && text.indexOf('<') != text.indexOf('<strong>') && text.indexOf('<') != text.indexOf('<STRONG>')
                    && text.indexOf('<') != text.indexOf('</strong>') && text.indexOf('<') != text.indexOf('</STRONG>')
                    && text.indexOf('<') != text.indexOf('<br>') && text.indexOf('<') != text.indexOf('<BR>')
                    && text.indexOf('<') != text.indexOf('<br/>') && text.indexOf('<') != text.indexOf('<BR/>')
                    && text.indexOf('<') != text.indexOf('<div>') && text.indexOf('<') != text.indexOf('<DIV>')
                    && text.indexOf('<') != text.indexOf('</div>') && text.indexOf('<') != text.indexOf('</DIV>')
            ) {
                text = text.substr(0, text.indexOf('<')) + text.substr(text.indexOf('>', text.indexOf('<')) + 1, text.length);
            } else {
                traitee = traitee + text.substr(0, text.indexOf('>', text.indexOf('<')) + 1, text.length);
                text = text.substr(text.indexOf('>') + 1, text.length);
            }
        }
    }
    text = traitee + text;
    return text;      
}
    
function stringWithoutEntitiesNames(texte) {
    // minuscules
    var text = texte;
    text = text.replace(/&agrave;/g,'à') ; 
    text = text.replace(/&aacute;/g,'á') ; 
    text = text.replace(/&acirc;/g,'â') ;
    text = text.replace(/&atilde;/g,'ã') ;
    text = text.replace(/&auml;/g,'ä') ; 
    text = text.replace(/&aring;/g,'å') ; 
    text = text.replace(/&aelig;/g,'æ') ; 
    text = text.replace(/&ccedil;/g,'ç') ; 
    text = text.replace(/&egrave;/g,'è') ; 
    text = text.replace(/&eacute;/g,'é') ; 
    text = text.replace(/&ecirc;/g,'ê') ; 
    text = text.replace(/&euml;/g,'ë') ; 
    text = text.replace(/&igrave;/g,'ì') ; 
    text = text.replace(/&iacute;/g,'í') ; 
    text = text.replace(/&icirc;/g,'î') ; 
    text = text.replace(/&iuml;/g,'ï') ; 
    text = text.replace(/&eth;/g,'ð') ; 
    text = text.replace(/&ntilde;/g,'ñ') ; 
    text = text.replace(/&ograve;/g,'ò') ; 
    text = text.replace(/&oacute;/g,'ó') ; 
    text = text.replace(/&ocirc;/g,'ô') ; 
    text = text.replace(/&otilde;/g,'õ') ; 
    text = text.replace(/&ouml;/g,'ö') ; 
    text = text.replace(/&oslash;/g,'ø') ; 
    text = text.replace(/&ugrave;/g,'ù') ; 
    text = text.replace(/&uacute;/g,'ú') ; 
    text = text.replace(/&ucirc;/g,'û') ; 
    text = text.replace(/&uuml;/g,'ü') ; 
    text = text.replace(/&yacute;/g,'ý') ; 
    text = text.replace(/&thorn;/g,'þ') ; 
    text = text.replace(/&yuml;/g,'ÿ') ; 
    // majuscules 
    text = text.replace(/&Agrave;/g,'À') ; 
    text = text.replace(/&Aacute;/g,'Á') ; 
    text = text.replace(/&Acirc;/g,'Â') ; 
    text = text.replace(/&Atilde;/g,'Ã') ; 
    text = text.replace(/&Auml;/g,'Ä') ; 
    text = text.replace(/&Aring;/g,'Å') ;
    text = text.replace(/&AElig;/g,'Æ') ; 
    text = text.replace(/&Ccedil;/g,'Ç') ; 
    text = text.replace(/&Egrave;/g,'È') ; 
    text = text.replace(/&Eacute;/g,'É') ; 
    text = text.replace(/&Ecirc;/g,'Ê') ; 
    text = text.replace(/&Euml;/g,'Ë') ; 
    text = text.replace(/&Igrave;/g,'Ì') ; 
    text = text.replace(/&Iacute;/g,'Í') ; 
    text = text.replace(/&Icirc;/g,'Î') ; 
    text = text.replace(/&Iuml;/g,'Ï') ; 
    text = text.replace(/&ETH;/g,'Ð') ; 
    text = text.replace(/&Ntilde;/g,'Ñ') ; 
    text = text.replace(/&Ograve;/g,'Ò') ; 
    text = text.replace(/&Oacute;/g,'Ó') ; 
    text = text.replace(/&Ocirc;/g,'Ô') ; 
    text = text.replace(/&Otilde;/g,'Õ') ; 
    text = text.replace(/&Ouml;/g,'Ö') ; 
    text = text.replace(/&Oslash;/g,'Ø') ; 
    text = text.replace(/&Ugrave;/g,'Ù') ; 
    text = text.replace(/&Uacute;/g,'Ú') ; 
    text = text.replace(/&Ucirc;/g,'Û') ; 
    text = text.replace(/&Uuml;/g,'Ü') ; 
    text = text.replace(/&Yacute;/g,'Ý') ; 
    // autres
    text = text.replace(/&quot;/g,'"') ; 
    text = text.replace(/&apos;/g,"'") ; 
    text = text.replace(/&hellip;/g,'…') ; 
    text = text.replace(/&sbquo;/g,'‚') ; 
    text = text.replace(/&rsquo;/g,'’') ; 
    text = text.replace(/&lsquo;/g,'‘') ; 
    text = text.replace(/&bdquo;/g,'„') ;
    text = text.replace(/&rdquo;/g,'”') ; 
    text = text.replace(/&ldquo;/g,'“') ; 
    text = text.replace(/&rsaquo;/g,'›') ; 
    text = text.replace(/&lsaquo;/g,'‹') ;
    text = text.replace(/&raquo;/g,'»') ; 
    text = text.replace(/&laquo;/g,'«') ;
    text = text.replace(/&amp;/g,'&') ;  
    text = text.replace(/&lt;/g,'<') ; 
    text = text.replace(/&gt;/g,'>') ; 
    text = text.replace(/&nbsp;/g,' ') ;
    // symboles
    text = text.replace(/&iexcl;/g,'¡') ; 
    text = text.replace(/&cent;/g,'¢') ; 
    text = text.replace(/&pound;/g,'£') ;
    text = text.replace(/&curren;/g,'¤') ; 
    text = text.replace(/&yen;/g,'¥') ; 
    text = text.replace(/&brvbar;/g,'¦') ; 
    text = text.replace(/&sect;/g,'§') ; 
    text = text.replace(/&uml;/g,'¨') ; 
    text = text.replace(/&copy;/g,'©') ; 
    text = text.replace(/&ordf;/g,'ª') ; 
    text = text.replace(/&not;/g,'¬') ; 
    text = text.replace(/&reg;/g,'®') ; 
    text = text.replace(/&macr;/g,'¯') ;
    text = text.replace(/&deg;/g,'°') ; 
    text = text.replace(/&plusmn;/g,'±') ; 
    text = text.replace(/&sup2;/g,'²') ; 
    text = text.replace(/&sup3;/g,'³') ; 
    text = text.replace(/&acute;/g,'´') ; 
    text = text.replace(/&micro;/g,'µ') ;
    text = text.replace(/&para;/g,'¶') ; 
    text = text.replace(/&middot;/g,'·') ;
    text = text.replace(/&cedil;/g,'¸') ; 
    text = text.replace(/&sup1;/g,'¹') ;
    text = text.replace(/&ordm;/g,'º') ;
    text = text.replace(/&frac14;/g,'¼') ;
    text = text.replace(/&frac12;/g,'½') ; 
    text = text.replace(/&frac34;/g,'¾') ; 
    text = text.replace(/&iquest;/g,'¿') ;
    text = text.replace(/&times;/g,'×') ;
    text = text.replace(/&divide;/g,'÷') ; 
    return text ;
}
    
function stringWithoutEntitiesNumber(texte) {
    var text = texte;
    var n = 0;
    while (n < 256) {
        text = text.replace(/'#&' + n + ';'/g,String.fromCharCode(n)) ; 
        n++ ; 
    }
    text = text.replace(/#&338;/g,String.fromCharCode(338)) ; 
    text = text.replace(/#&339;/g,String.fromCharCode(339)) ; 
    text = text.replace(/#&8209;/g,String.fromCharCode(8209)) ; 
    text = text.replace(/#&8211;/g,String.fromCharCode(8211)) ; 
    text = text.replace(/#&8212;/g,String.fromCharCode(8212)) ; 
    text = text.replace(/#&8216;/g,String.fromCharCode(8216)) ; 
    text = text.replace(/#&8217;/g,String.fromCharCode(8217)) ; 
    text = text.replace(/#&8220;/g,String.fromCharCode(8220)) ; 
    text = text.replace(/#&8221;/g,String.fromCharCode(8221)) ; 
    text = text.replace(/#&8230;/g,String.fromCharCode(8230)) ; 
    text = text.replace(/#&9658;/g,String.fromCharCode(9658)) ; 
    text = text.replace(/#&64257;/g,String.fromCharCode(64257)) ; 
    return text ; 
}

function trunc(text, maxlength) {
    var tmpText = delHTMLTags(text, 1);
    while (delHTMLTags(tmpText, 0).length > maxlength) {
        tmpText = tmpText.substr(0, tmpText.length - 1);
    }
    return tmpText;
}

/*************************************************************************************************************
* tout selectionner - tout déselectionner générique
*************************************************************************************************************/
/* Tout Sélectionner générique */
function ToutSelectionnerGenerique(name)
{
  for( i = 0 ; i < window.document.getElementsByTagName("input").length ; i++)
  {
    if(window.document.getElementsByTagName("input")[i].id.indexOf(name) >= 0)
    {
      if(!window.document.getElementsByTagName("input")[i].disabled)
      {
        window.document.getElementsByTagName("input")[i].checked = true;
      }
    }
  }
}

/* Tout Désélectionner générique */
function ToutDeselectionnerGenerique(name)
{
  for( i = 0 ; i < window.document.getElementsByTagName("input").length ; i++)
  {
    if(window.document.getElementsByTagName("input")[i].id.indexOf(name) >= 0)
    {
      if(!window.document.getElementsByTagName("input")[i].disabled)
      {
        window.document.getElementsByTagName("input")[i].checked = false;
      }
    }
  }
}


/*************************************************************************************************************
* complement de la sélection des case à cocher générique 
*************************************************************************************************************/
function ComplementSelection(name)
{
  for( i = 0 ; i < window.document.getElementsByTagName("input").length ; i++)
  {
    if(window.document.getElementsByTagName("input")[i].id.indexOf(name) >= 0)
    {
      if(!window.document.getElementsByTagName("input")[i].disabled)
      {
        window.document.getElementsByTagName("input")[i].checked = !window.document.getElementsByTagName("input")[i].checked;
      }
    }
  }
}

function CKCount(evt, maxlimit, itemNbCar, errorMessage) {
    //maxlimit = evt.editor.config.MaxLength;
    //alert(maxlimit);
    var charCount = getCurrentCount(evt.editor);
    //if (charCount >= maxlimit) { // Affichage du message
    if (charCount > maxlimit) { // Pas d'affichage du message
        // Si texte trop long, on substring
        alert(errorMessage + " (" + maxlimit + ")");
        //field.value = field.value.substring(0, maxlimit);
    }

    //On met ï¿½ jour le champ de comptage
    $(itemNbCar).innerHTML = maxlimit - charCount;
}

function getCurrentCount(editor) {
    var text = editor.getData()
		.replace(/<[^>]*>/g, '')
		.replace(/\s+/g, ' ')
		.replace(/&\w+;/g, 'X')
		.replace(/^\s*/g, '')
		.replace(/\s*$/g, '')
        .replace(/\u00a0/g, '')
        .replace(/ /g, '');
    //alert(text);
    var currentLength = text.length;

		
    return currentLength;
}

function checkLength(evt, errorMessage) {
    var stopHandler = false;
    var currentLength = getCurrentCount(evt.editor);
    var maximumLength = 350;

    if (evt.editor.config.MaxLength) {
        maximumLength = evt.editor.config.MaxLength;
    }

    if (!evt.editor.config.LockedInitialized) {
        evt.editor.config.LockedInitialized = 1;
        evt.editor.config.Locked = 0;
    }

    if (evt.data) {
        if (evt.data.html) {
            currentLength += evt.data.html.length;
        }
        else if (evt.data.text) {
            currentLength += evt.data.text.length;
        }
    }

    if (!stopHandler && currentLength >= maximumLength) {
        if (!evt.editor.config.Locked) {
            // Record the last legal content.
            evt.editor.fire('saveSnapshot');
            evt.editor.config.Locked = 1;
            // Cancel the keystroke.
            evt.cancel();
            alert(errorMessage + " (" + maximumLength + ")");
        }
        else
        // Check after this key has effected.
            setTimeout(function() {
                // Rollback the illegal one.
                if (getCurrentCount(evt.editor) > maximumLength) {
                    evt.editor.execCommand('undo');
                    alert(errorMessage + " (" + maximumLength + ")");
                }  else
                    evt.editor.config.Locked = 0;
            }, 0);
    }
}

