﻿// *******
// OBJECTS
// *******

var dmEditor;

function dmObject(language){

	this.active = false;
	this.color = "forecolor";
	this.document = (document.getElementById("dmIframe") && document.getElementById("dmIframe").contentDocument)?document.getElementById("dmIframe").contentDocument:window.frames["dmIframe"].document;
	this.form = document.getElementById("dmForm");
	this.iframe = document.getElementById("dmIframe");
	this.input = document.getElementById("dmInput");
	this.language = (language)?parseInt(language):1;
	this.simple = document.getElementById("dmSimple");
	this.status = "wysiwyg";
	this.subject = document.getElementById("dmSubject");
	this.toolsColors = document.getElementById("dmTColors");
	this.toolsFonts = document.getElementById("dmTFonts");
	this.toolsWysiwyg = document.getElementById("dmTWysiwyg");
	this.toolsHtml = document.getElementById("dmTHtml");
	this.toolsSmileys = document.getElementById("dmTSmileys");

}

function dmRange(asked){

    this.content = null;
    this.range = null;
    this.selection = null;
    this.type = "none";
    
    if(dmEditor.iframe.contentWindow.getSelection){ 

        this.selection = dmEditor.iframe.contentWindow.getSelection(); 
        this.range = (this.selection)?this.selection.getRangeAt(0):null;

        if(this.range && this.range!="" && this.range.startContainer.nodeType==3 && this.range.endContainer.nodeType==3 && (!asked || asked=="text")){

            this.content = this.selection;
            this.type = "text";

        }

        if(this.type=="none" && dmEditor.document.images.length > 0 && (!asked || asked=="img")){

            for(i=0;i<dmEditor.document.images.length;++i){

                var range = document.createRange();

                range.selectNode(dmEditor.document.images[i]);

                if(range.compareBoundaryPoints(range.START_TO_START,this.range)==0 && range.compareBoundaryPoints(range.END_TO_END,this.range)==0){
                
                    this.content = dmEditor.document.images[i];
                    this.type = "img";
                    
                }

            }

        }

        if(this.type=="none" && dmEditor.document.links.length > 0 && (!asked || asked=="a")){

            for(i=0;i<dmEditor.document.links.length;++i){

                var range = document.createRange();

                range.selectNode(dmEditor.document.links[i]);

                if(range.compareBoundaryPoints(range.START_TO_START,this.range)<=0 && range.compareBoundaryPoints(range.END_TO_END,this.range)>=0){
                
                    this.content = dmEditor.document.links[i];
                    this.type = "a";
                    
                }

            }

        }

    }
    else if(dmEditor.document && dmEditor.document.selection.createRange){

        this.selection = dmEditor.document.selection; 
        this.range = dmEditor.document.selection.createRange();

        if(this.range && this.range.queryCommandSupported("Delete") && this.range.queryCommandEnabled("Delete")){

            if(this.selection.type.toLowerCase() == "text" && (!asked || asked=="text")){

                this.content = this.range.text;
                this.type = "text";

            }
            else if(this.selection.type.toLowerCase() == "text" && this.range.parentElement() && this.range.parentElement().tagName.toLowerCase() == asked){

                this.content = this.range.parentElement();
                this.type = asked;

            }
            else if(this.selection.type.toLowerCase() == "control" && !asked){

                this.content = this.range.item(0);
                this.type = this.range.item(0).tagName.toLowerCase();

            }
            else if(this.selection.type.toLowerCase() == "control" && this.range.item(0) && this.range.item(0).tagName.toLowerCase() == asked){

                this.content = this.range.item(0);
                this.type = asked;

            }
            else if(this.selection.type.toLowerCase() == "control" && this.range.item(0) && this.range.item(0).parentNode.tagName.toLowerCase() == asked){
    		    
                this.content = this.range.item(0).parentNode;
                this.type = asked;

            }

        }

    }		

}

// **********************
// INIT / MAIN OPERATIONS
// **********************

function dmDisplayTools(mode){

	if(mode=="wysiwyg"){
	
		if(dmEditor.toolsColors){dmEditor.toolsColors.style.display = "none"};
		if(dmEditor.toolsFonts){dmEditor.toolsFonts.style.display = "none"};
		if(dmEditor.toolsSmileys){dmEditor.toolsSmileys.style.display = "none"};
		if(dmEditor.toolsWysiwyg){dmEditor.toolsWysiwyg.style.display = "block"};

	}
	else if(mode=="colors"){

		if(dmEditor.toolsWysiwyg){dmEditor.toolsWysiwyg.style.display = "none"};
		if(dmEditor.toolsColors){dmEditor.toolsColors.style.display = "block"};

	}
	else if(mode=="fonts"){

		if(dmEditor.toolsWysiwyg){dmEditor.toolsWysiwyg.style.display = "none"};
		if(dmEditor.toolsFonts){dmEditor.toolsFonts.style.display = "block"};

	}
	else if(mode=="smileys"){

		if(dmEditor.toolsWysiwyg){dmEditor.toolsWysiwyg.style.display = "none"};
		if(dmEditor.toolsSmileys){dmEditor.toolsSmileys.style.display = "block"};

	}
		
 }

function dmExecCommand(mode,par1,par2){

	if(dmCheckStatus("wysiwyg",true)){
		
			try { dmEditor.document.execCommand(mode, par1, par2) }
			catch (e) { alert("Error") }

	}
			
 }

function dmInit(language){

	dmEditor = new dmObject(language);

	dmSwitch('on');
	
	dmUpdateWysiwyg();

}

function dmInsertNode(node){

    if(dmEditor.iframe.contentWindow.getSelection){

        try{

            // get current selection
            var sel = dmEditor.iframe.contentWindow.getSelection();

            // get the first range of the selection
            // (there's almost always only one range)
            var range = sel.getRangeAt(0);

            // deselect everything
            sel.removeAllRanges();

            // remove content of current selection from document
            range.deleteContents();

            // get location of current selection
            var container = range.startContainer;
            var pos = range.startOffset;

            // make a new range for the new selection
            range=document.createRange();

            if (container.nodeType==3 && node.nodeType==3) {

                // if we insert text in a textnode, do optimized insertion
                container.insertData(pos, node.nodeValue);

                // put cursor after inserted text
                range.setEnd(container, pos+node.length);
                range.setStart(container, pos+node.length);

            }
            else{

                var afterNode;

                if (container.nodeType==3) {

                    // when inserting into a textnode
                    // we create 2 new textnodes
                    // and put the insertNode in between

                    var textNode = container;
                    container = textNode.parentNode;
                    var text = textNode.nodeValue;

                    // text before the split
                    var textBefore = text.substr(0,pos);
                    // text after the split
                    var textAfter = text.substr(pos);

                    var beforeNode = document.createTextNode(textBefore);
                    afterNode = document.createTextNode(textAfter);

                    // insert the 3 new nodes before the old one
                    container.insertBefore(afterNode, textNode);
                    container.insertBefore(node, afterNode);
                    container.insertBefore(beforeNode, node);

                    // remove the old node
                    container.removeChild(textNode);

                }
                else{

                    // else simply insert the node
                    afterNode = container.childNodes[pos];
                    container.insertBefore(node, afterNode);

                }

                range.setEnd(afterNode, 0);
                range.setStart(afterNode, 0);

            }

            sel.addRange(range);
        
        }
        catch(e){
        
        }

    }

}

function dmPasteHTML(html){

    if(dmEditor.iframe && html){ 
	
        try{
        
            dmEditor.document.body.innerHTML = dmEditor.document.body.innerHTML + html; 

        }
        catch(e){
        
        }
           
    }

    if(dmEditor.document && dmEditor.document.selection.createRange && dmEditor.document.body && html)
    {

        //dmEditor.document.body.focus();
        
        //dmEditor.document.selection.createRange().pasteHTML(html);
        
    }
    
}

function dmSwitch(status){

	if(dmEditor.document){

        dmEditor.document.designMode = status;

        if(status != dmEditor.document.designMode.toLowerCase()){

            setTimeout("dmSwitch('" + status + "')",100);

        }
        else{

            dmEditor.active = (dmEditor.document.designMode.toLowerCase() == "on");

        }

	}

}

function dmUpdateWysiwyg(){

    var content = (dmEditor.input)?dmEditor.input.value:"";
    
    if(dmEditor.iframe && content){ 
	
	    if(dmEditor.document.designMode.toLowerCase() == "on")
	    {
	    
            try{
            
	            dmEditor.document.body.innerHTML = content 

            }
            catch(e){
            
                setTimeout("dmUpdateWysiwyg()",100);

            }
           
         }
         else
         {

                setTimeout("dmUpdateWysiwyg()",100);
                
         }
	    
    }

 }

function dmUpdateInput(clearTags){

	if(dmEditor.status=="wysiwyg"){ 

    	var content = (dmEditor.document)?dmEditor.document.body.innerHTML:"";

	    if(dmEditor.input && content){ dmEditor.input.value = clearTags?content.replace(/<[^>]*>/gi,""):content };

    	dmCheckInput();

	}	
 
 }
 
function dmRemoveNode(node){

    if(node.hasChildNodes()){

        for(i=0;i<node.childNodes.length;i++){

            node.parentNode.insertBefore(node.childNodes[i].cloneNode(true),node);

        }
    
    }

    node.parentNode.removeChild(node);

}


// ******
// CHECKS
// ******

function dmCheckStatus(mode,status){

	if(dmEditor && dmEditor.active){

		var check = false;
		
		if(mode=="wysiwyg" && dmEditor.status == "wysiwyg"){ check = true };

		if(!check && mode=="wysiwyg" && status){alert("Vous devez être en mode WYSIWYG")};

		return check;

	}	
	else{

		return false;

	}

}

function dmCheckSelection(canbeNone,canbeText,canbeImage,canbeLink){

	if(dmEditor && dmEditor.active){

		var check = false;
		var objRange = new dmRange();

        check = (!check)?(objRange.type=="text" && canbeText):check;
        check = (!check)?(objRange.type=="img" && canbeImage):check;
        check = (!check)?(objRange.type=="a" && canbeLink):check;
        check = (!check)?(objRange.type=="none" && canbeNone):check;

        return check;

	}
	else{
	
		return false
	
	}	

}

function dmCheckInput(){

	var check = dmEditor.input.value;
				
	check = check.replace(/<br>/gi, "");
	check = check.replace(/\s|\t|\r|\n/gi, "");

	if(!check){ 
	 
	    dmEditor.input.value = "";
    
    }

 }
 
function dmCheckPasteHTML(mode,alert){

	if(document.body.createTextRange){

        var objRange = document.body.createTextRange();

	    if(objRange.pasteHTML){

            return true;

	    }	
	    else{

		    return false;

	    }

	}	
	else{

		return false;

	}

}

function dmCheckSubmit(){

    dmUpdateInput();

    return true;

}

// ******
// COLORS
// ******

function dmColors(mode){

	if(dmCheckStatus("wysiwyg",true)){

		if(mode=="hilitecolor" && objBrowser.name == "msie"){ mode="backcolor" };

		dmEditor.color = mode;

		dmDisplayTools("colors");
	
	}	

}

function dmBuildColors(language){

	var tabColors = dmGetColors();
	
	for(i=0;i<tabColors.length;++i){
	
		document.write('<span unselectable="on" class="dmColorsButtons" style="background-color:#' + tabColors[i] + '" title="#' + tabColors[i] + '" onclick="dmSetColor(\'#' + tabColors[i] + '\')"></span>');
		
	
	}
  			
    document.write('<span unselectable="on" class="dmColorsClose" title="' + dmTranslations["close"][language] + '" onclick="dmSetColor(\'close\')"></span>');

}

function dmGetColors(){

	var tabColorsElements = new Array("00","33","66","99","CC","FF");
	var tabColors = new Array();

	for(key1 in tabColorsElements){

	c1 = tabColorsElements[key1];

	for(key2 in tabColorsElements){
		
	c2 = tabColorsElements[key2];

	for(key3 in tabColorsElements){
		
	c3 = tabColorsElements[key3];

	tabColors[tabColors.length] = c1 + c2 + c3;
	
	}

	}

	}

	return tabColors;

}

function dmSetColor(color){

	if(dmCheckStatus("wysiwyg",true)){
	
		if(color=="close"){

			dmDisplayTools("wysiwyg");

		}
		else{

			if(color){dmEditor.document.execCommand(dmEditor.color, false, color)};

		}
	
	}	

}

// *****
// FONTS
// *****

function dmFonts(){

	if(dmCheckStatus("wysiwyg",true)){

		dmDisplayTools("fonts");
	
	}	
  			
}

function dmBuildFonts(language){

    document.write('<span unselectable="on" class="dmFontsElements" onclick="dmSetFontFace(\'verdana,geneva,arial,helvetica,sans-serif\')" style="font-family:verdana,geneva,arial,helvetica,sans-serif">Verdana</span>&nbsp;');
    document.write('<span unselectable="on" class="dmFontsElements" onclick="dmSetFontFace(\'arial,geneva,helvetica,sans-serif\')" style="font-family:arial,geneva,helvetica,sans-serif">Arial</span>&nbsp;');
    document.write('<span unselectable="on" class="dmFontsElements" onclick="dmSetFontFace(\'courier new,courier,monospace\')" style="font-family:\'courier new\',courier,monospace">Courier</span>&nbsp;');
    document.write('<span unselectable="on" class="dmFontsElements" onclick="dmSetFontFace(\'comics\')" style="font-family:comics">Comics</span>&nbsp;');
    document.write('<span unselectable="on" class="dmFontsElements" onclick="dmSetFontFace(\'times new roman,times,serif\')" style="font-family:\'times new roman\',times,serif">Times</span>&nbsp;&nbsp;&nbsp;&nbsp;');
    document.write('<span unselectable="on" class="dmFontsElements" onclick="dmSetFontSize(1)">1</span>&nbsp;');
    document.write('<span unselectable="on" class="dmFontsElements" onclick="dmSetFontSize(2)">2</span>&nbsp;');
    document.write('<span unselectable="on" class="dmFontsElements" onclick="dmSetFontSize(3)">3</span>&nbsp;');
    document.write('<span unselectable="on" class="dmFontsElements" onclick="dmSetFontSize(4)">4</span>&nbsp;');
    document.write('<span unselectable="on" class="dmFontsElements" onclick="dmSetFontSize(5)">5</span>&nbsp;&nbsp;&nbsp;&nbsp;');
    document.write('<span unselectable="on" class="dmFontsButtons" title="' + dmTranslations["close"][language] + '" onclick="dmDisplayTools(\'wysiwyg\')">X</span>&nbsp;');

}

function dmSetFontFace(face){

	if(dmCheckStatus("wysiwyg",true)){

		if(face){dmEditor.document.execCommand('fontname', false, face)};

	}
	
}

function dmSetFontSize(size){

	if(dmCheckStatus("wysiwyg",true)){

		if(size){dmEditor.document.execCommand('fontsize', false, size)};

	}

}

// ****
// HTML
// ****

function dmBuildHtml(language){

    document.write('<table cellpadding="0" cellspacing="0">');
    document.write('<tr><td style="font-size:15px;font-weight:bolder;width:95%">HTML</td><td style="width:5%"><span unselectable="on" class="dmHtmlButtons" title="' + dmTranslations["close"][language] + '" onclick="dmSetWysiwyg()">X</span></td></tr>');
    document.write('</table>');

}

function dmSetHtml(){
	
	dmUpdateInput();

	dmEditor.status = "html";

	if(dmEditor.toolsColors){dmEditor.toolsColors.style.display = "none"};
	if(dmEditor.toolsFonts){dmEditor.toolsFonts.style.display = "none"};
	if(dmEditor.toolsSmileys){dmEditor.toolsSmileys.style.display = "none"};
	if(dmEditor.toolsWysiwyg){dmEditor.toolsWysiwyg.style.display = "none"};
	if(dmEditor.toolsHtml){dmEditor.toolsHtml.style.display = "block"};

	if(dmEditor.iframe){dmEditor.iframe.style.display = "none"};
	if(dmEditor.input){dmEditor.input.style.display = "block"; dmEditor.input.focus()};
		

 }

// *****
// LINKS
// *****

function dmLink(){

	if(dmCheckStatus("wysiwyg",true) && dmCheckSelection(false,true,true,true)){

		var strPage = "/common/elements.net/frontend.dmode.link.aspx";
        var dmPopup = window.open(strPage, 'dmLink', 'width=400,height=100,scrollbars=0,toolbar=0,titlebar=0,status=0,resizable=0,menubar=0,location=0');

	    dmPopup.focus();

	}	

}

function dmLinkGet(){

    var objRange = new dmRange("a");

    return (objRange && objRange.type=="a")?objRange.content:"";
         
}

function dmLinkUpdate(link,target){

    if(dmCheckStatus("wysiwyg",true) && dmCheckSelection(false,true,true,true)){
    
        var objRange = new dmRange("a");
        
        if(objRange.type=="a"){
        
            if(link){
            
                objRange.content.href = link;
                objRange.content.target = target;

           
            }
            else{
            
                dmRemoveNode(objRange.content);
            
            }
        
        }
        else if(link){

            try {

		        dmEditor.document.execCommand("createlink", false, link)

    		    var objRange = new dmRange();

                try{
                
                    objRange.range.collapse(true);
                   
                }
		        catch(e){}

       
            }
		    catch(e){

		        alert("Error")

            }

        }

    }

}

// *******
// SMILEYS
// *******

function dmSmileys(){

	if(dmCheckStatus("wysiwyg",true)){

		dmDisplayTools("smileys");
	
	}	
  			
}

function dmBuildSmileys(language){

    var arrSmileys = new Array("001.gif#15#15","002.gif#15#15","003.gif#15#15","004.gif#15#15","005.gif#25#15","006.gif#15#15","007.gif#15#15","008.gif#15#15","009.gif#15#15","010.gif#15#15","011.gif#15#15","012.gif#15#15","013.gif#15#15","014.gif#15#15","015.gif#15#15","016.gif#15#15","017.gif#15#15","018.gif#15#15","019.gif#15#15","020.gif#21#15","021.gif#15#15","022.gif#25#15","023.gif#15#15","024.gif#39#15","025.gif#20#15","026.gif#15#15","027.gif#45#15","028.gif#15#15","029.gif#15#15","030.gif#30#15","031.gif#15#15","032.gif#27#15","033.gif#30#21","034.gif#34#15","035.gif#37#15","036.gif#60#15","037.gif#50#15","038.gif#15#15","039.gif#15#15","040.gif#15#15","041.gif#15#15","042.gif#15#15","043.gif#15#15","044.gif#36#15","045.gif#15#15","046.gif#33#15","047.gif#23#15","048.gif#15#15","049.gif#37#15");
   
    document.write('<span unselectable="on" class="dmSmileysClose" title="' + dmTranslations["close"][language] + '" onclick="dmDisplayTools(\'wysiwyg\')">X</span>&nbsp;');

    for(i=0;i<arrSmileys.length;++i)
    {
    
        var arrSmiley = arrSmileys[i].split("#");
    
        document.write('<img unselectable="on" onclick="dmInsertSmiley(\'' + arrSmiley[0] + '\',' + arrSmiley[1] + ',' + arrSmiley[2] + ')" src="/common/images.net/forums/smileys/' + arrSmiley[0] + '" width="' + arrSmiley[1] + '" height="' + arrSmiley[2] + '" alt="" class="dmSmileysButtons" /> ');
        
    }
   

}

function dmInsertSmiley(source,width,height){

	if(dmCheckStatus("wysiwyg",true)){

        dmDisplayTools("wysiwyg");

        if(dmCheckPasteHTML()){
           
           dmPasteHTML('<img src="/common/images.net/forums/smileys/' + source + '" width="' + width + '" height="' + height + '" alt="" style="vertical-align:middle" />')

        }
        else{

            var oImg = document.createElement("img");

            oImg.src = "/common/images.net/forums/smileys/" + source;
            oImg.width = width;
            oImg.height = height;
            oImg.alt = "";
            oImg.style.verticalAlign = "middle";
            
            dmInsertNode(oImg);
            
        }

	}
	
}


// *******
// WYSIWYG
// *******

function dmSetWysiwyg(){
	
	dmEditor.status = "wysiwyg";

	if(dmEditor.toolsHtml){dmEditor.toolsHtml.style.display = "none"};
	if(dmEditor.toolsWysiwyg){dmEditor.toolsWysiwyg.style.display = "block"};

	if(dmEditor.input){dmEditor.input.style.display = "none"};
	if(dmEditor.iframe){dmEditor.iframe.style.display = "block"};

	dmSwitch("on");

	setTimeout("dmUpdateWysiwyg();",100);

 }

// ************
// TRANSLATIONS
// ************

var dmTranslations = new Array();

dmTranslations["close"] = new Array();
dmTranslations["close"][1] = "Fermer";
dmTranslations["close"][2] = "Close";

dmTranslations["protocol"] = new Array();
dmTranslations["protocol"][1] = "Protocole";
dmTranslations["protocol"][2] = "Protocol";

dmTranslations["target"] = new Array();
dmTranslations["target"][1] = "Cible";
dmTranslations["target"][2] = "Target";

dmTranslations["insert"] = new Array();
dmTranslations["insert"][1] = "Insérer";
dmTranslations["insert"][2] = "Insert";

dmTranslations["remove"] = new Array();
dmTranslations["remove"][1] = "Supprimer";
dmTranslations["remove"][2] = "Remove";

dmTranslations["modify"] = new Array();
dmTranslations["modify"][1] = "Modifier";
dmTranslations["modify"][2] = "Modify";

