/*
 * jQuery RTE plugin 0.2 - create a rich text form for Mozilla, Opera, and Internet Explorer
 *
 * Copyright (c) 2007 Batiste Bieler
 * Distributed under the GPL (GPL-LICENSE.txt) licenses.
 */

// define the rte light plugin
jQuery.fn.rte = function(css_url) {

    if(document.designMode || document.contentEditable)
    {
        $(this).each( function(){
            var textarea = $(this);
            enableDesignMode(textarea);
        });
    }
    
    function formatText(iframe, command, option) {
        iframe.contentWindow.focus();
        try{
            iframe.contentWindow.document.execCommand(command, false, option);
        }catch(e){console.log(e)}
        iframe.contentWindow.focus();
    }
    
    function tryEnableDesignMode(iframe, doc, callback) {
        try {
            iframe.contentWindow.document.open();
            iframe.contentWindow.document.write(doc);
            iframe.contentWindow.document.close();
        } catch(error) {
            console.log(error)
        }
        if (document.contentEditable) {
            iframe.contentWindow.document.designMode = "On";
            callback();
            return true;
        }
        else if (document.designMode != null) {
            try {
                iframe.contentWindow.document.designMode = "on";
                callback();
                return true;
            } catch (error) {
                console.log(error)
            }
        }
        setTimeout(function(){tryEnableDesignMode(iframe, doc, callback)}, 250);
        return false;
    }
    
    function enableDesignMode(textarea) {
        // need to be created this way
        var iframe = document.createElement("iframe");
		
		
        iframe.frameBorder=0;
        iframe.frameMargin=0;
        iframe.framePadding=0;
        if(textarea.attr('class'))
            iframe.className = textarea.attr('class');
        if(textarea.attr('id'))
            iframe.id = textarea.attr('id');
        if(textarea.attr('name'))
            iframe.title = textarea.attr('name');
			//added
			iframe.name = "iframe";
        textarea.after(iframe);
        var css = "";
        if(css_url)
            var css = "<link type='text/css' rel='stylesheet' href='"+css_url+"' />"
        var content = textarea.val();
        // Mozilla need this to display caret
        if($.trim(content)=='')
            //content = '<br>';
			content = '';
        var doc = "<html><head>"+css+"</head><body class='frameBody' id='editor_text'>"+content+"</body></html>";
        
        tryEnableDesignMode(iframe, doc, function() {
        
            $(iframe).before(toolbar(iframe));
          	$(".editor").after(smileyBar(iframe));
            textarea.remove();

        });
    }
    
    function disableDesignMode(iframe, submit) {
        var content = iframe.contentWindow.document.getElementsByTagName("body")[0].innerHTML;
		 
		//added FF fix
		 content = content.replace(/<br>/gi, "");
		  
        if(submit==true)
            var textarea = $('<input type="hidden" />');
        else
            var textarea = $('<textarea></textarea>');
        textarea.val(content);
        t = textarea.get(0);
        if(iframe.className)
            t.className = iframe.className;
        if(iframe.id)
            t.id = iframe.id;
        if(iframe.title)
            t.name = iframe.title;
        $(iframe).before(textarea);
        if(submit!=true)
            $(iframe).remove();
    }
    
    
    function smileyBar(iframe) {
        var tb = $('\<div class="smileys">\
       <h4>Slam!Smileys:</h4>\
       <p>\
        <a href="#" id="smiley_cool" class="smiley cool">Cool</a>\
        <a href="#" id="smiley_devil" class="smiley devil">Devil</a>\
        <a href="#" id="smiley_knipoog" class="smiley knipoog">Knipoog</a>\
        <a href="#" id="smiley_blozen" class="smiley blozen">Blozen</a>\
        <a href="#" id="smiley_huilen" class="smiley huilen">Huilen</a>\
        <a href="#" id="smiley_blij" class="smiley blij">Blij</a>\
        <a href="#" id="smiley_droevig" class="smiley droevig">Droevig</a>\
        <a href="#" id="smiley_boos" class="smiley boos">Boos</a>\
        <a href="#" id="smiley_heelblij" class="smiley heelblij">Heel blij</a>\
        <a href="#" id="smiley_boe" class="smiley boe">Boe</a>\
        <a href="#" id="smiley_tong" class="smiley tong">Tong</a>\
        <a href="#" id="smiley_bedenkelijk" class="smiley bedenkelijk">Bedenkelijk</a>\
        <a href="#" id="smiley_verbaasd" class="smiley verbaasd">Verbaasd</a>\
        <a href="#" id="smiley_teleurgesteld" class="smiley teleurgesteld">Teleurgesteld</a>\
       </p>\
      </div>');

        $('.smiley', tb).click(function(){  
            formatText(iframe, 'InsertImage', "/static/images/" + this.id + ".gif" );
            return false; });
           
		$(iframe).parents('form').submit(function(){ 
            disableDesignMode(iframe, true); });

        return tb;
    }
    
    function toolbar(iframe) {
        var tb = $("<div class='rte-toolbar'><div>\
             <p>\
                <a href='#' class='bold'>bold</a>\
                <a href='#' class='italic'>italic</a>\
                <a href='#' class='link'>link</a>\
            </p>");
       
       
        $('.bold', tb).click(function(){ formatText(iframe, 'bold');return false; });
        $('.italic', tb).click(function(){ formatText(iframe, 'italic');return false; });
        $('.link', tb).click(function(){ 
            var p=prompt("URL:");
            if(p)
                formatText(iframe, 'CreateLink', p);
            return false; });
        $('.image', tb).click(function(){ 
            var p=prompt("image URL:");
            if(p)
                formatText(iframe, 'InsertImage', p);
            return false; });
        $('.disable', tb).click(function(){ disableDesignMode(iframe); tb.remove(); return false; });
        $(iframe).parents('form').submit(function(){ 
            disableDesignMode(iframe, true); });
    
        return tb;
    }
        
    function setSelectedType(node, select) {
        while(node.parentNode) {
            var nName = node.nodeName.toLowerCase();
            for(var i=0;i<select.options.length;i++) {
                if(nName==select.options[i].value){
                    select.selectedIndex=i;
                    return true;
                }
            }
            node = node.parentNode;
        }
        select.selectedIndex=0;
        return true;
    }
    
    function getSelectionElement(iframe) {
        if (iframe.contentWindow.document.selection) {
            // IE selections
            selection = iframe.contentWindow.document.selection;
            range = selection.createRange();
            try {
                node = range.parentElement();
            }
            catch (e) {
                return false;
            }
        } else {
            // Mozilla selections
            try {
                selection = iframe.contentWindow.getSelection();
                range = selection.getRangeAt(0);
            }
            catch(e){
                return false;
            }
            node = range.commonAncestorContainer;
        }
        return node;
    }
}