function sGetSelectedId() {
    return $("[data-webdev-selected]").attr("data-webdev-id");
}

function first_init() {
    $(document).bind("click", function() { return false; });

    $("img[data-webdev-id]").click(function(event) {
        event.stopPropagation();

        var jqImg = $(this);
        if (jqImg.attr("data-webdev-selected") == "true")
            return;

        $("[data-webdev-selected]").removeAttr("data-webdev-selected");
        jqImg.attr("data-webdev-selected", "true");
    });

    $(document).click(function(event) {
        $("[data-webdev-selected]").removeAttr("data-webdev-selected");
    });

}


function serializeSelection() {
    selection = window.getSelection();
    return selection.rangeCount == 0 ? '' : serializeRange(selection.getRangeAt(0));
}

function serializeRange(range) {
    rootNode = document.documentElement;

    return serializePosition(range.startContainer, range.startOffset, rootNode) + "," +
            serializePosition(range.endContainer, range.endOffset, rootNode);
}
function serializePosition(node, offset, rootNode) {
    var pathBits = [], n = node;
    while (n && n != rootNode) {
        pathBits.push(getNodeIndex(n, true));
        n = n.parentNode;
    }
    return pathBits.join("/") + ":" + offset;
}
function getNodeIndex(node) {
    var i = 0;
    while ((node = node.previousSibling)) {
        i++;
    }
    return i;
}

function deserializeSelection(serialized) {

    if (serialized == "") return;

    rootNode = document.documentElement;

    var sel = window.getSelection();

    range = deserializeRange(serialized, rootNode, window.document);

    sel.removeAllRanges();
    sel.addRange(range)

    return sel;
}

function deserializeRange(serialized, rootNode, doc) {

    var result = /^([^,]+),([^,\{]+)({([^}]+)})?$/.exec(serialized);

    var start = deserializePosition(result[1], rootNode, doc), end = deserializePosition(result[2], rootNode, doc);

    var range = doc.createRange();
    range.setStart(start.node, start.offset);
    range.setEnd(end.node, end.offset);
    return range;
}

function deserializePosition(serialized, rootNode, doc) {

    var bits = serialized.split(":");
    var node = rootNode;
    var nodeIndices = bits[0] ? bits[0].split("/") : [], i = nodeIndices.length, nodeIndex;

    while (i--) {
        nodeIndex = parseInt(nodeIndices[i], 10);
        if (nodeIndex < node.childNodes.length) {
            node = node.childNodes[parseInt(nodeIndices[i], 10)];
        } else {
            throw new Error("deserializePosition failed: node " + node.toString() +
                        " has no child with index " + nodeIndex + ", " + i);
        }
    }

    return new DomPosition(node, parseInt(bits[1], 10));
}

function DomPosition(node, offset) {
    this.node = node;
    this.offset = offset;
}



function sGetInfoPositionTaille(jqThis) {
    return jqThis.offset().top + "," + jqThis.offset().left + "," + jqThis.outerWidth() + "," + jqThis.outerHeight();
}

function first_enclosing_id(node) {
    return $(node).parents().filter("[data-webdev-id]").first().attr('data-webdev-id');
}

function enclosingControl() {
    var selObj = window.getSelection();
    if (selObj.type == 'Caret') {
        return first_enclosing_id(selObj.focusNode);
    } else if (selObj.type == 'Range') {
        var debut = first_enclosing_id(selObj.anchorNode);
        var end = first_enclosing_id(selObj.focusNode);
        if (debut == end) return debut;
    }
    return '';
}

function sListe_enclosing_ID(node) {
    return $(node).parents().filter("[data-webdev-id]").map(function() { return $(this).attr('data-webdev-id'); }).get().join(",");
}

function sEnclosingID_caret() {
    var selObj = window.getSelection();
    if ((selObj.type == 'Caret') || (selObj.type == 'Range')) {
        return sListe_enclosing_ID(selObj.focusNode);
    }
    return '';
}

function sEnclosingID_RangeAnchor() {
    var selObj = window.getSelection();
    if (selObj.type == 'Range') {
        return sListe_enclosing_ID(selObj.anchorNode);
    }
    return '';
}


function getParentBlock(node) {
    return $(node).parents().filter(function() { return $(this).css("display") == "block"; }).first()[0];
}

function bSelectionDansBlock() {
    var selObj = window.getSelection();
    if (selObj.type == 'Caret') {
        return 'true';
    } else if (selObj.type == 'Range') {
    //même noeud
        if (selObj.anchorNode == selObj.focusNode)
            return 'true';
        //même block parent
        var selParentA=getParentBlock(selObj.anchorNode);
        var selParentB=getParentBlock(selObj.focusNode);
        if (selParentA == selParentB)
            return 'true';
        //contenu dans le meme bloc
        if($(selParentA).has(selParentB).length>0)
            return 'true';
        if($(selParentB).has(selParentA).length>0)
            return 'true';
    }
    return 'false';
}

function eTypeSelection() {
    var selObj = window.getSelection();
    return selObj.type;
}

function sGetInnerTextSiBrut(node, level) {
    var tabTexte = [];
    for (var oFils = node.firstChild; oFils; oFils = oFils.nextSibling) {
        if (oFils.nodeName == "#text") {
            tabTexte.push(oFils.textContent);
        }
        else if (oFils.tagName && (oFils.tagName.toLowerCase() == "br")) {
            tabTexte.push("\r\n");
        }
        else if (oFils.tagName && (oFils.tagName.toLowerCase() == "p")) {
            //ignore les p sans atribut du premier niveau
            if (level > 0)
                return "";
            if (oFils.hasAttributes())
                return "";
            //récursion nécessaire ici!
            tabTexte.push(sGetInnerTextSiBrut(oFils, level + 1));
        }
        else {
            return "";
        }
    }
    return tabTexte.join("");
}



function GetInnerTextSiBrut() {
    return sGetInnerTextSiBrut(document.body, 0);
}


// function sGetChampIncluDansSelection() {
//     var sel = window.getSelection().getRangeAt(0);
//     return $(sel).find("[data-webdev-id]").map(function() {
//         return $(this).attr('data-webdev-id');
//     }).get().join(",");
// }

function sGetChampIncluDansSelection(sel) {
    return $(sel).find("[data-webdev-id]").filter(function(){ return $(this).attr('data-webdev-id')!='' }).map(function() {
        return $(this).attr('data-webdev-id');
    }).get().join(",");
}


/*function DropChampIncluDansSelection(sel) {

    return $("[data-webdev-id]").each(function() {
    if (false == sel.containsNode(this, true)) return; //hors selection?
        var jqElement = $(this);
        var sID = jqElement.attr('data-webdev-id');
        jqElement.attr("data-webdev-drop", sID).removeAttr("data-webdev-id");
    });
}*/


function getSelectedRange() {
    var sel = window.getSelection();
    if (sel.rangeCount) {
        var container = document.createElement("div");
        for (var i = 0, len = sel.rangeCount; i < len; ++i) {
            container.appendChild(sel.getRangeAt(i).cloneContents());
        }
        return container;
    }
    return null;
}


function sIncludedID_Range() {
    var sel = getSelectedRange();
    if (sel != null) {
        return sGetChampIncluDansSelection(sel);
    }
    return '';
}
/*function DropIncludedID_Range() {
    var sel = window.getSelection();
    if (sel != null)
        DropChampIncluDansSelection(sel);
}*/




function sGetSelectionHtml() {
    var html = "";
    if (typeof window.getSelection != "undefined") {
        var sel = getSelectedRange();
        if (sel != null) {
            html = sel.innerHTML;
        }
    } else if (typeof document.selection != "undefined") {
        if (document.selection.type == "Text") {
            html = document.selection.createRange().htmlText;
        }
    }
    return html;
}

function sGetSelectionInnerText() {
    var html = "";
    if (typeof window.getSelection != "undefined") {
        var sel = getSelectedRange();
        if (sel != null) {
            html = $(sel).text();
        }
    } else if (typeof document.selection != "undefined") {
        if (document.selection.type == "Text") {
            html = document.selection.createRange().htmlText;
        }
    }
    return html;
}

function sGetFontSize() {
    return $(window.getSelection().getRangeAt(0).startContainer.parentNode).css("font-size");

    /*note : on renvoie ma fontsize du début de la sélection, car on a le meme comportement pour la fonte
    si jamais on veut améliorer ça, GF avait commencer à regarder :
    pour info, pour trouver la 1ère taille commune d'une sélection :
    var sTaille = "";
    $("body *").each(function()
    {  
    if (
    window.getSelection().containsNode(this) 
    || (this==window.getSelection().getRangeAt(0).startContainer.parentNode)
    || (this==window.getSelection().getRangeAt(0).endContainer.parentNode)) 
    {	
    if (sTaille=="")
    {
    sTaille = $(this).css("font-size");
    }
    else
    {
    if (sTaille != $(this).css("font-size"))
    return false;
    }
    //console.log(($(this).css("font-size")));     		
    }	
    })
    //optimisable en utilisant jQuery.fn.commonAncestor plutôt que $("body *")   
    */
}


function DragAndMoveID(sID) {
    //source du drag
    var jqSource = $('[data-webdev-id="' + sID + '"]');
    //copie la source
    var jqCopie = jqSource.clone();
    //supprime la source du dom
    jqSource.remove();
    //place la copie de source dans sa destination
    $('[data-webdev-drop]').replaceWith(jqCopie);
}

function sPremierDataWebdevCp() {
    return $('[data-webdev-cp]').first().attr("data-webdev-cp");
}
function sCreeIDPremierDataWebdevCp(sID) {
    return $('[data-webdev-cp]').first().removeAttr("data-webdev-cp").attr("data-webdev-id", sID);
}


function sPremierA() {
    return $("a").filter(function() { return $(this).attr("data-webdev-id") == undefined && $(this).attr("href") !== undefined; }).first().attr("href");
}

function sCreeIDPremierA(sID) {
    return $("a").filter(function() { return $(this).attr("data-webdev-id") == undefined && $(this).attr("href") !== undefined; }).first().removeAttr("href").attr("data-webdev-id", sID);
}

function sRemoveDataWebDevSelection() {
    $(".data-webdev-selection").removeClass("data-webdev-selection");
    return '';
}

function jqPremierIMG() {
    return $("img").filter(function() { return $(this).attr("data-webdev-id") == undefined && $(this).attr("src") !== undefined; }).first();
}

function sPremierIMG() {
    return jqPremierIMG().attr("src");
}

function sPremierIMGInfoPositionTailleSrc() {
    var jqImg = jqPremierIMG();
    if (jqImg.length == 0) return '';
    return sGetInfoPositionTaille(jqImg) + "," + jqImg.attr("src");
}

function sCreeIDPremierIMG(sID) {
    return $("img").filter(function() { return $(this).attr("data-webdev-id") == undefined && $(this).attr("src") !== undefined; }).first().removeAttr("src").attr("data-webdev-id", sID);
}


function TraitementApresColler() {
    //qw237501-recuperation de la couleur des liens
    $("a").each(function() { if ($(this).children().length == 1 && $(this).text() == $(this).children().first().text()) { $(this).css("color", $(this).children().first().css("color")) } })
}

function nGetLargeurAdaptee() {
    //cible les balises html et body
    var jqHtmlBody = $("html,body");
    //mémorise la largeur adaptée
    var nRetour = jqHtmlBody.css("width", "auto").css("white-space", "nowrap").width();
    //rétablit le dom initial
    jqHtmlBody.css("width", "100%").css("white-space", "normal");
    return nRetour.toString();
}


function nGetHauteurAdaptee() {
    //cible les balises html et body
    var jqHtmlBody = $("html,body");
    //mémorise la hauteur adaptée
    var nRetour = jqHtmlBody.css("height", "auto").height();
    //rétablit le dom initial
    jqHtmlBody.css("height", "100%");
    return nRetour.toString();
}

function nGetHauteurAdapteePourLargeur(nLargeur) {
    //cible les balises html et body
    var jqHtmlBody = $("html,body");
    //mémorise la hauteur adaptée
    var nRetour = jqHtmlBody.css("width", nLargeur).css("height", "auto").height();
    //rétablit le dom initial
    jqHtmlBody.css("width", "100%").css("height", "100%");
    return nRetour.toString();

}

//retrouve les class d'un champ à partir de son data-webdev-id
function sGetClassChamp(id) {
    return $('[data-webdev-id="' + id + '"]').attr("class");
}

function ChangeClassChamp(id, enleve, ajoute) {
    $('[data-webdev-id="' + id + '"]').removeClass(enleve).addClass(ajoute);
}


function getName(obj) 
{ 
var t = /\[object (.{1,})Constructor\]/.exec(obj.constructor.toString());
if (t != null && t.length>0) return t[1];
return "type inconnu";
};


function sGetListeAnimations()
{

var sListeAnimation = "";

//parcours les feuilles
for(var i=0; i<document.styleSheets.length; i++)
{
//lit la Ième feuille
var clStyle = document.styleSheets[i];
//blindage
if (clStyle == undefined || clStyle.rules == undefined) continue;

//parcours  les règles de la Ième feuille
for(var j=0; j<clStyle.rules.length; j++)
{
//lit la Jème règle
var clRule = clStyle.rules[j];
//blindage
if (clRule == undefined) continue;

//ne traite que les déclaration d'animation WebKit
var sConstructor = getName(clRule);
if ( (sConstructor == "WebKitCSSKeyframesRule") && (clRule["name"] !== undefined) )
{
//concatène le nom de l'animation séparé par virgule
if (sListeAnimation != "") sListeAnimation += ",";
sListeAnimation += clRule["name"];
}

}

}

    return sListeAnimation;
}



$(function(){

$(".WDOT").each(function(){

//chaque trou de libellé de volet se recalcule

//calcule la largeur adaptée des libellés
var jqTrou = $(this);
var jqChampOnglet = jqTrou.closest("table");
var nLargeurChampOnglet = jqChampOnglet.width();

//les frères précédents
var jqFreresLibelle = jqTrou.parent().children().slice(0,-1)
var nLargeurTotaleLibelle = 0;
//calcule la largeur totale
jqFreresLibelle.each(function(){
	var jqLibelle = $(this).children(".WDVC").children().first();
	var nLargeurInit = jqLibelle.css("width");
    //mémorise la largeur adaptée
	var nLargeurAdaptee = jqLibelle.css("width", "auto").css("white-space", "nowrap").width();
    jqLibelle.data("width-adaptee", nLargeurAdaptee );
	//incrémente le total
	nLargeurTotaleLibelle+=nLargeurAdaptee;
    //rétablit le dom initial
    jqLibelle.css("width", nLargeurInit).css("white-space", "normal");
});

//si la largeur totale dépasse le champ, on répartie la largeur
var nLargeurTrou = nLargeurChampOnglet-nLargeurTotaleLibelle;
if (nLargeurTrou<0)
{
	//répartition de la largeur
	var nLargeurChacun = parseint(nLargeurTrou/jqFreresLibelle.length);
	jqFreresLibelle.css("width",nLargeurChacun);
	//et le trou à 0
	jqTrou.css("width",0).children().css("width",0);
}
else
{
	//attribut la largeur calculée
	jqFreresLibelle.each(function(){ var jqThis=$(this); jqThis.css("width",jqThis.data("width-adaptee")); });
	//et trou au reste
	jqTrou.css("width",nLargeurTrou).children().css("width",nLargeurTrou);
}


})

})




