// Cross-Browser Rich Text Editor

//init variables
var isRichText = false;
var rng;
var currentRTE;
var currentContent;
var allRTEs = "";

var isIE;
var isGecko;
var isSafari;
var isKonqueror;

var imageAtch = false;

var imagesPath;
var includesPath;
var cssFile;

var subsystem;

function initRTE() {
        //set browser vars
        var ua = navigator.userAgent.toLowerCase();
        isIE = ((ua.indexOf("msie") != -1) && (ua.indexOf("opera") == -1) && (ua.indexOf("webtv") == -1));
        isGecko = (ua.indexOf("gecko") != -1);
        isSafari = (ua.indexOf("safari") != -1);
        isKonqueror = (ua.indexOf("konqueror") != -1);
        
        //check to see if designMode mode is available
        if (document.getElementById && document.designMode && !isSafari && !isKonqueror) {
                isRichText = true;
        }
        
        //set paths vars

        //for testing standard textarea, uncomment the following line
        //isRichText = false;
}
function writeRichText(rte, html) {
        if (isRichText) {
                if (allRTEs.length > 0) allRTEs += ";";
                allRTEs += rte;
                writeRTE(rte, html);
        } else {
                writeDefault(rte, html);
        }
       
        
}
function beallit(rte)
{
        var oRTE;
                oRTE = frames[rte].document;
                alert(oRTE.body);
iText = oRTE.body.innerText;
txtRange = oRTE.body.createTextRange() ;
txtRange.select();
txtRange.execCommand("Copy");
txtRange.execCommand("Paste");
txtRange.Text=vagoszoveg;
txtRange.select();
txtRange.execCommand("Copy");
oRTE.body.innerHTML=vagoszoveg;
txtRange = oRTE.body.createTextRange() ;
txtRange.select();
txtRange.execCommand("Copy");
        
}
function writeDefault(rte, html) {
         document.writeln('<textarea name="' + rte + '" id="' + rte + '" >' + html + '</textarea>');
}


function writeRTE(rte, html) {
       
        document.writeln('<input type="hidden" id="hdn' + rte + '" name="' + rte + '" value="">');
//        if (!readOnly) document.writeln('<br /><input type="checkbox" id="chkSrc' + rte + '" onclick="toggleHTMLSrc(\'' + rte + '\');this.blur();" />&nbsp;View Source');

//        document.getElementById("hdn" + rte).value = html;
//        currentContent = "<html><head><title>KÄ‚Â¶szbeszerzÄ‚Â©s-oktatÄ‚Ë‡s</title><link rel='STYLESHEET' type='text/css' href='style/style.css'><meta http-equiv='Content-Type' content='text/html; charset=iso-8859-2'><SCRIPT language=JavaScript src='js/text.js'type=text/javascript></SCRIPT></head><body leftmargin='0' topmargin='0' marginwidth='0' marginheight='0' class='munkaterulet'><p>sdf sd sd</p></body></html>";
        enableDesignMode(rte, html);
       

}

function insertImage(rte)
{
        var imageOptionsName = 'image_' + rte;
        var selectedImageIndex = document.getElementById(imageOptionsName).selectedIndex;
        var selected = document.getElementById(imageOptionsName).options[selectedImageIndex].value;
        // First one is always a label
        if (selectedImageIndex != 0) {
                var actImgRef = "docman/image?id="+selected;
                FormatText(rte , 'InsertImage', actImgRef);
        }
}

function enableDesignMode(rte, html) {

        frameHtml = "<html>\n";
        frameHtml += "</style><link rel='STYLESHEET' type='text/css' href='style/style.css'>\n";
        frameHtml += "</head>\n";
        frameHtml += '<body class=munkaterulet>\n';
        if (document.all)
        {
//                frameHtml+="<p>";
        }
        frameHtml += html + "\n";
        if (document.all)
        {
//                frameHtml+="</p>";
        }

        frameHtml += "</body>\n";
        frameHtml += "</html>";

        if (document.all) {
                var oRTE = frames[rte].document;
                oRTE.open();
                oRTE.write(frameHtml);
                oRTE.close();
                oRTE.designMode = "On";
        } else {

                try {
                        document.getElementById(rte).contentDocument.designMode = "on";
                        try {
                                var oRTE = document.getElementById(rte).contentWindow.document;
                                oRTE.open();
                                oRTE.write(frameHtml);
                                oRTE.close();
                                if (isGecko) {
                                        //attach a keyboard handler for gecko browsers to make keyboard shortcuts work
                                        oRTE.addEventListener("keypress", kb_handler, true);
                                }
                        } catch (e) {
                                alert("Error preloading content.");
                        }
                } catch (e) {
                        //gecko may take some time to enable design mode.
                        //Keep looping until able to set.
                        if (isGecko) {
                                setTimeout("enableDesignMode('" + rte + "', '" + html + "');", 10);
                        } else {
                                return false;
                        }
                }
        }
}

function updateRTEs() {
        var vRTEs = allRTEs.split(";");
        for (var i = 0; i < vRTEs.length; i++) {
                updateRTE(vRTEs[i]);
        }
}


function updateRTE(rte) {
        if (!isRichText) return;
        
        var oHdnMessage = document.getElementById('hdn' + rte);
        var oRTE = document.getElementById(rte);
        var readOnly = false;
        
        if (document.all) {
                if (frames[rte].document.designMode != "On") readOnly = true;
        } else {
                if (document.getElementById(rte).contentDocument.designMode != "on") readOnly = true;
        }
        
        if (isRichText && !readOnly) {

                gomb=document.getElementById("chkSrc" + rte);
                if (((gomb!=null)&&(gomb.checked))) {
                        gomb.checked = false;
                        toggleHTMLSrc(rte);
                }
                
                if (oHdnMessage.value == null) oHdnMessage.value = "";
                if (document.all) {
                        oHdnMessage.value = frames[rte].document.body.innerHTML;
                        forras=oHdnMessage.value;
                        oHdnMessage.value=forras;
                } else {
                        oHdnMessage.value = oRTE.contentWindow.document.body.innerHTML;
                }


                //if there is no content (other than formatting) set value to nothing
                if (stripHTML(oHdnMessage.value.replace("&nbsp;", " ")) == "" 
                        && oHdnMessage.value.toLowerCase().search("<hr") == -1
                        && oHdnMessage.value.toLowerCase().search("<img") == -1) oHdnMessage.value = "";
                //fix for gecko
                if (escape(oHdnMessage.value) == "%3Cbr%3E%0D%0A%0D%0A%0D%0A") oHdnMessage.value = "";
        }
}

  function loadCookie(name) { 
        var allcookies = document.cookie; 
        if (allcookies == "") return ""; 
        var start = allcookies.indexOf(name + "="); 
        if (start == -1) return ""; 
        start += name.length + 1; 
        var end = allcookies.indexOf(';',start); 
        if (end == -1) end = allcookies.length; 
        return allcookies.substring(start,end); 
  } 
function toggleHTMLSrc(rte) {
        var oRTE;
        if (document.all) {
                oRTE = frames[rte].document;
       
        } else {
                oRTE = document.getElementById(rte).contentWindow.document;
        }
        parent.focus();

 
 if (document.getElementById("chkSrc" + rte).checked) {
                document.getElementById(rte+"_formazo").style.visibility = "hidden";
                if (document.all) {
                        forras=oRTE.body.innerHTML;
                        oRTE.body.innerText = forras;
                        oRTE.body.className="munkaterulet2";
                } else {
                        var htmlSrc = oRTE.createTextNode(oRTE.body.innerHTML);
//                        htmlSrc=htmlSrc.substr(3,htmlSrc.length-7);
                        oRTE.body.innerHTML = "";
                        oRTE.body.appendChild(htmlSrc);
                        oRTE.body.className="munkaterulet2";
                }
        } else {
                document.getElementById(rte+"_formazo").style.visibility = "visible";
                if (document.all) {
                        //fix for IE
                        var output = escape(oRTE.body.innerText);
                        output = output.replace("%3CP%3E%0D%0A%3CHR%3E", "%3CHR%3E");
                        output = output.replace("%3CHR%3E%0D%0A%3C/P%3E", "%3CHR%3E");

iText = oRTE.body.innerText;

//editbox.document.body.innerHTML = iText;
//editbox.focus();
//viewMode = 1;
oRTE.body.innerHTML = iText;
//oRTE.body.innerHTML = unescape(output);
                        oRTE.body.className="munkaterulet";

                } else {
                        var htmlSrc = oRTE.body.ownerDocument.createRange();
                        htmlSrc.selectNodeContents(oRTE.body);
                        oRTE.body.innerHTML =htmlSrc.toString();
                        oRTE.body.className="munkaterulet";
                }
        }
}

//Function to format text in the text box
function FormatText(rte, command, option) {
        var oRTE;
        if (document.all) {
                oRTE = frames[rte];
                
                //get current selected range
                var selection = oRTE.document.selection; 
                if (selection != null) {
                        rng = selection.createRange();
                }
        } else {
                oRTE = document.getElementById(rte).contentWindow;
                
                //get currently selected range
                var selection = oRTE.getSelection();
                rng = selection.getRangeAt(selection.rangeCount - 1).cloneRange();
        }
        
        try {
                if ((command == "forecolor") || (command == "hilitecolor")) {
                        //save current values
                        parent.command = command;
                        currentRTE = rte;                        
                        //position and show color palette
                        buttonElement = document.getElementById(command + '_' + rte);
                        document.getElementById('cp' + rte).style.left = getOffsetLeft(buttonElement) + "px";
                        document.getElementById('cp' + rte).style.top = (getOffsetTop(buttonElement) + buttonElement.offsetHeight) + "px";
                        if (document.getElementById('cp' + rte).style.visibility == "hidden") {
                                document.getElementById('cp' + rte).style.visibility = "visible";
                                document.getElementById('cp' + rte).style.display = "inline";
                        } else {
                                document.getElementById('cp' + rte).style.visibility = "hidden";
                                document.getElementById('cp' + rte).style.display = "none";
                        }
                } else if (command == "createlink") {
                        if (isIE) oRTE.document.execCommand("CreateLink");
                                else {
                        var szURL = prompt("Enter a URL:", "");
                        try {
                                //ignore error for blank urls
                                oRTE.document.execCommand("Unlink", false, null);
                                oRTE.document.execCommand("CreateLink", false, szURL);
                        } catch (e) {
                                //do nothing
                        }
                }
                } else {
                        oRTE.document.execCommand(command, false, option);
                        oRTE.focus();
                }
        } catch (e) {
                alert(e);
        }
}

function LinkBeszur(rte,mit)
{
                oRTE = parent.window.opener.document.frames[rte];
                alert(oRTE);
        oRTE.focus();
        var oEditor = eval(rte)

        var oSel = oEditor.document.selection.createRange()
        oSel.pasteHTML(mit)
        oSel.select();
        oSel.moveEnd("character", 1);
        oSel.moveStart("character", 1);
        oSel.collapse(false);
        return false;

}

function Bekezdesbeszur(rte)
{
        oRTE = frames[rte];
        oRTE.focus();
        var oEditor = eval(rte)

        var oSel = oEditor.document.selection.createRange()
        oSel.pasteHTML('<p>')
        oSel.select();
        oSel.moveEnd("character", 1);
        oSel.moveStart("character", 1);
        oSel.collapse(false);
        return false;
}

function Kiszed(rte)
{
        if (document.all) {
                oRTE = frames[rte].document;

        } else {
                oRTE = document.getElementById(rte).contentWindow.document;
        }
        forras=oRTE.body.innerHTML;
        if (forras.length>7)
        {
                if ((forras.substr(0,3)=='<p>')||(forras.substr(0,3)=='<P>'))forras=forras.substr(3,(forras.length)-3);
                if ((forras.substr(forras.length-4,4)=='</p>')||(forras.substr(forras.length-4,4)=='</P>'))forras=forras.substr(0,(forras.length)-4);
        }
        forras=stripHTMLsajat(forras);
        oRTE.body.innerHTML = forras;

}


function Htmlbeszur(rte, html,masikbol) {
        var oRTE;

        if (html!=-1)
        {
                if (document.all)
                {
                            if (masikbol)
                            {
                                                        oRTE = parent.window.opener.frames[rte];
                            }else
                            {
                                oRTE = frames[rte];
                            }
                
                        //get current selected range
                        var selection = oRTE.document.selection;
                        if (selection != null) {
                        rng = selection.createRange();
                        }

                        oRTE.focus();
                        var oSel = oRTE.document.selection.createRange()
                        oSel.pasteHTML(html)
                        oSel.select();
                        oSel.moveEnd("character", 1);
                        oSel.moveStart("character", 1);
                        oSel.collapse(false);
                        oRTE.focus();

                }else
                {

                            if (masikbol)
                            {
                                                        oRTE = parent.window.opener.document.getElementById(rte).contentWindow;
                            }else
                            {
                                      oRTE = document.getElementById(rte).contentWindow;
                            }

                        var selection = oRTE.getSelection();

                        theRange = selection.getRangeAt(0);
                        theRange.deleteContents();
                        theRange.collapse(false);
                        if (masikbol)
                        {
                                var r = parent.window.opener.document.getElementById(rte).ownerDocument.createRange();
                                r.setStartBefore(parent.window.opener.document.getElementById(rte));
                        }else
                        {
                                var r = document.getElementById(rte).ownerDocument.createRange();
                                r.setStartBefore(document.getElementById(rte));
                        }

                        var df = r.createContextualFragment(html);
                        theRange.insertNode(df);
                        oRTE.focus();

                }
        }
}

function Szin(rte, selectname) {
        var oRTE;
        if (document.all) {
                oRTE = frames[rte];

                //get current selected range
                var selection = oRTE.document.selection;
                if (selection != null) {
                        rng = selection.createRange();
                }
        } else {
                oRTE = document.getElementById(rte).contentWindow;

                //get currently selected range
                var selection = oRTE.getSelection();
                rng = selection.getRangeAt(selection.rangeCount - 1).cloneRange();
        }

        var idx = document.getElementById(selectname).selectedIndex;
        // First one is always a label
        if (idx != 0) {
                var selected = document.getElementById(selectname).options[idx].value;
                oRTE.document.execCommand('forecolor', false, selected);
                document.getElementById(selectname).selectedIndex = 0;
        }
        oRTE.focus();
}


//Function to add image
function AddImage(rte) {
        var oRTE;
        if (document.all) {
                oRTE = frames[rte];
                
                //get current selected range
                var selection = oRTE.document.selection; 
                if (selection != null) {
                        rng = selection.createRange();
                }
        } else {
                oRTE = document.getElementById(rte).contentWindow;
                
                //get currently selected range
                var selection = oRTE.getSelection();
                rng = selection.getRangeAt(selection.rangeCount - 1).cloneRange();
        }
        
        imagePath = prompt('Enter Image URL:', 'http://');                                
        if ((imagePath != null) && (imagePath != "")) {
                oRTE.focus();
                oRTE.document.execCommand('InsertImage', false, imagePath);
                oRTE.focus();
        }
}

//function to perform spell check
function checkspell() {
        try {
                var tmpis = new ActiveXObject("ieSpell.ieSpellExtension");
                tmpis.CheckAllLinkedDocuments(document);
        }
        catch(exception) {
                if(exception.number==-2146827859) {
                        if (confirm("ieSpell not detected.  Click Ok to go to download page."))
                                window.open("http://www.iespell.com/download.php","DownLoad");
                } else {
                        alert("Error Loading ieSpell: Exception " + exception.number);
                }
        }
}

function getOffsetTop(elm) {
        var mOffsetTop = elm.offsetTop;
        var mOffsetParent = elm.offsetParent;
        
        while(mOffsetParent){
                mOffsetTop += mOffsetParent.offsetTop;
                mOffsetParent = mOffsetParent.offsetParent;
        }
        
        return mOffsetTop;
}

function getOffsetLeft(elm) {
        var mOffsetLeft = elm.offsetLeft;
        var mOffsetParent = elm.offsetParent;
        
        while(mOffsetParent) {
                mOffsetLeft += mOffsetParent.offsetLeft;
                mOffsetParent = mOffsetParent.offsetParent;
        }
        
        return mOffsetLeft;
}

function Select(rte, selectname) {
        var oRTE;
        if (document.all) {
                oRTE = frames[rte];

                //get current selected range
                var selection = oRTE.document.selection;
                if (selection != null) {
                        rng = selection.createRange();
                }
        } else {
                oRTE = document.getElementById(rte).contentWindow;

                //get currently selected range
                var selection = oRTE.getSelection();
                rng = selection.getRangeAt(selection.rangeCount - 1).cloneRange();
        }

        var idx = document.getElementById(selectname).selectedIndex;
        // First one is always a label
        if (idx != 0) {
                var selected = document.getElementById(selectname).options[idx].value;
                oRTE.document.execCommand('fontsize', false, selected);
                document.getElementById(selectname).selectedIndex = 0;
        }
        oRTE.focus();
}


function kb_handler(evt) {
        var rte = evt.target.id;
        if (evt.ctrlKey) {
                var key = String.fromCharCode(evt.charCode).toLowerCase();
                var cmd = '';
                switch (key) {
                        case 'b': cmd = "bold"; break;
                        case 'i': cmd = "italic"; break;
                        case 'u': cmd = "underline"; break;
                };

                if (cmd) {
                        FormatText(rte, cmd, true);
                        //evt.target.ownerDocument.execCommand(cmd, false, true);
                        // stop the event bubble
                        evt.preventDefault();
                        evt.stopPropagation();
                }
         }

}


modalWin = ""; 
function xShowModalDialog( sURL, vArguments, sFeatures, magassag,szelesseg ) 
    { 
dFeatures = 'dialogHeight: '+magassag+'px; dialogWidth: '+szelesseg+'px; dialogTop: 300px; dialogLeft: 200px; edge: Raised; center: Yes; help: Yes; resizable: No; status: No;'; 

    if (sURL==null||sURL=='') 
    { 
        alert ("Invalid URL input."); 
        return false; 
    } 
    if (vArguments==null||vArguments=='') 
    { 
        vArguments=''; 
    } 
    if (sFeatures==null||sFeatures=='') 
    { 
        sFeatures=dFeatures; 
    } 
/*    if (window.navigator.appVersion.indexOf("MSIE")!=-1) 
    { 
        window.showModalDialog ( sURL, vArguments, sFeatures ); 
        return false; 
    } */
    sFeatures = sFeatures.replace(/ /gi,''); 
    aFeatures = sFeatures.split(";"); 
    sWinFeat = "directories=0,menubar=0,titlebar=0,toolbar=0,"; 
    for ( x in aFeatures ) 
    { 
        aTmp = aFeatures[x].split(":"); 
        sKey = aTmp[0].toLowerCase(); 
        sVal = aTmp[1]; 
        switch (sKey) 
        { 
            case "dialogheight": 
                sWinFeat += "height="+sVal+","; 
                pHeight = sVal; 
                break; 
            case "dialogwidth": 
                sWinFeat += "width="+sVal+","; 
                pWidth = sVal; 
                break; 
            case "dialogtop": 
                                if (window.navigator.appVersion.indexOf("MSIE")==-1) 
                                {
                    sWinFeat += "screenY="+sVal+","; 
                                }else
                                {
                    sWinFeat += "top="+sVal+","; 
                                }    
                break; 
            case "dialogleft": 
                                if (window.navigator.appVersion.indexOf("MSIE")==-1) 
                                {
                        sWinFeat += "screenX="+sVal+","; 
                                }else
                                {
                        sWinFeat += "left="+sVal+","; 
                                }
                break; 
            case "resizable": 
                sWinFeat += "resizable="+sVal+","; 
                break; 
            case "status": 
                sWinFeat += "status="+sVal+","; 
                break; 
            case "center": 
                if ( sVal.toLowerCase() == "yes" ) 
                { 
                    sWinFeat += "screenY="+((screen.availHeight-pHeight)/2)+","; 
                    sWinFeat += "screenX="+((screen.availWidth-pWidth)/2)+","; 
                } 
                break; 
        } 
    } 
    modalWin=window.open(String(sURL),"",sWinFeat); 
    if (vArguments!=null&&vArguments!='')
    { 
        modalWin.dialogArguments=vArguments; 
    } 
} 
function checkFocus() 
    { 

    if (window.navigator.appVersion.indexOf("MSIE")==-1) 
        { 
        if (modalWin!=null && (modalWin!='')&& !modalWin.closed) 
        { 
            self.blur(); 
            modalWin.focus(); 
        } 
    } else
    {
            if (modalWin!='' && modalWin.closed==false)
            {
            modalWin.focus();
            }
    }
}


function docChanged (evt) {
        alert('changed');
}

function stripHTMLsajat(oldString) {

        var newString = trim(oldString);

        newString = escape(newString);
        newString = newString.replace("%0D%0A"," ");
        newString = newString.replace("%0A"," ");
        newString = newString.replace("%0D"," ");
        newString = unescape(newString);

         newString = newString.replace(/(<br[^>]*>)/ig,"@@@ujuressor§§§");
         newString = newString.replace(/(<[^>]*br>)/ig,"@@@ujuressor§§§");
         newString = newString.replace(/(<p[^>]*>)/ig,"@@@ujpsor§§§");
         newString = newString.replace(/(<\/p[^>]*>)/ig,"@@@lezarujpsor§§§");

         newString = newString.replace(/(<BR[^>]*>)/ig,"@@@ujuressor§§§");
         newString = newString.replace(/(<[^>]*BR>)/ig,"@@@ujuressor§§§");
         newString = newString.replace(/(<P[^>]*>)/ig,"@@@ujpsor§§§");
         newString = newString.replace(/(<\/P[^>]*>)/ig,"@@@lezarujpsor§§§");

         newString = newString.replace(/(<([^>]+)>)/ig,"");
         newString = newString.replace(/@@@ujuressor§§§/ig,"<br>");
         newString = newString.replace(/@@@ujpsor§§§/ig,"<p>");
         newString = newString.replace(/@@@lezarujpsor§§§/ig,"<\/p>");

        newString = trim(newString);

        return newString;
}
function stripHTML(oldString) {
        var newString = oldString.replace(/(<([^>]+)>)/ig,"");

        //replace carriage returns and line feeds
        newString = escape(newString);
        newString = newString.replace("%0D%0A"," ");
        newString = newString.replace("%0A"," ");
        newString = newString.replace("%0D"," ");
        newString = unescape(newString);

        //trim string
        newString = trim(newString);

        var newString = newString.replace(/(<([^>]+)>)/ig,"");

        //replace carriage returns and line feeds
   newString = newString.replace(/\r\n/g," ");
   newString = newString.replace(/\n/g," ");
   newString = newString.replace(/\r/g," ");

        //trim string
        newString = trim(newString);

        return newString;
}

function trim(inputString) {
   // Removes leading and trailing spaces from the passed string. Also removes
   // consecutive spaces and replaces it with one space. If something besides
   // a string is passed in (null, custom object, etc.) then return the input.
   if (typeof inputString != "string") return inputString;
   var retValue = inputString;
   var ch = retValue.substring(0, 1);

   while (ch == " ") { // Check for spaces at the beginning of the string
      retValue = retValue.substring(1, retValue.length);
      ch = retValue.substring(0, 1);
   }
   ch = retValue.substring(retValue.length-1, retValue.length);

   while (ch == " ") { // Check for spaces at the end of the string
      retValue = retValue.substring(0, retValue.length-1);
      ch = retValue.substring(retValue.length-1, retValue.length);
   }

        // Note that there are two spaces in the string - look for multiple spaces within the string
   while (retValue.indexOf("  ") != -1) {
                // Again, there are two spaces in each of the strings
      retValue = retValue.substring(0, retValue.indexOf("  ")) + retValue.substring(retValue.indexOf("  ")+1, retValue.length);
   }
   return retValue; // Return the trimmed string back to the user
}

