$(function(){   


$.myEdit = function(obj,opt)
{
	var obj = obj, opt = opt;
	if (typeof(obj) !== 'object') obj = $(obj)[0];
	if (typeof(opt) !== 'object') opt = { };     
   $(obj).TextAreaResizer();
	
	var id = Math.round(Math.random()*1000000);
	$(obj).addClass("myEdit_"+id);
	$(obj).wrap('<div class="richeditor" />');
	$(obj).parent().prepend("<div class='editbar' />");
	
	if ( $.browser.opera ) { 
      $(obj).parent(".richeditor").width($(obj).width()+4); 
   } else {   
      $(obj).parent(".richeditor").width($(obj).width()+2); 
   }  
   function createBtn(tag_char, text, title) {
   	switch(tag_char) {
         case "left" :
         case "center" : 
         case "right" :
         case "mail" :
         case "url" :
         case "img" :
         case "preview" :
         case "smiles" :
         case "youtube" : {     
   	      $(obj).parent().children(".editbar").prepend("<button title='"+title+"' class='btn_"+tag_char+"' id='"+tag_char+"_"+id+"'></button> "); 
            break;
         }
         default : {  
   	      $(obj).parent().children(".editbar").prepend("<button title='"+title+"' class='btn_"+tag_char+"' id='"+tag_char+"_"+id+"'>"+text+"</button> "); 
         
         }
      }
   	switch(tag_char) {
         case "preview" : {                   
         	$("#"+tag_char+"_"+id).click(function(){
               $.myEdit.preview(".myEdit_"+id)
               return false;
            });
            break;
         }
         case "img" : {                   
         	$("#"+tag_char+"_"+id).click(function(){
               $.myEdit.img(".myEdit_"+id)
               return false;
            });
            break;
         }
         case "url" : {                   
         	$("#"+tag_char+"_"+id).click(function(){
               $.myEdit.url(".myEdit_"+id)
               return false;
            });
            break;
         }
         case "youtube" : { 
         	$("#"+tag_char+"_"+id).click(function(){
               $.myEdit.youtube(".myEdit_"+id)
               return false;
            });
            break;
         }
         case "smiles" : { 
         	$("#"+tag_char+"_"+id).click(function(){
               $.myEdit.smiles(this, ".myEdit_"+id, id)
               return false;
            });
            break;
         }
         default : { 
         	$("#"+tag_char+"_"+id).click(function(){
               $.myEdit.tag(".myEdit_"+id, "["+tag_char+"]", "[/"+tag_char+"]")
               return false;
            });
         }
      }
   }
      
   
                                    
   createBtn("preview", "preview", "Zobrazit náhled"); 
   createBtn("smiles", "smiles", "Vložit smajlíka"); 
   createBtn("youtube", "youtube", "Vložit youtube video"); 
   createBtn("mail", "mail", "Převést označený text na email"); 
   createBtn("img", "IMG", "Vložit obrázek"); 
   createBtn("url", "URL", "Vložit odkaz či soubor ke stažení"); 
   createBtn("right", "right", "Zarovnat doprava"); 
   createBtn("center", "center", "Zarovnat doprostřed"); 
   createBtn("left", "left", "Zarovnat doleva"); 
   createBtn("u", "<u>U</u>", "Převést text na tučný"); 
   createBtn("i", "<i>I</i>", "Převést text na kurzivu");
   createBtn("b", "<b>B</b>", "Převést text na podtržený");
   
   
   
   return this;
} 
$.myEdit.preview = function(el) {
   /*var str = $(el).val();
   str = str.replace(/#/g, '~');*/
   $.post("preview.php", {
         text :  $(el).val()
      }, function(txt){  
           var preview = window.open("","Preview", "scrollbars=1,width=1000, height=600, top=30, left=30");
           if ( preview ) {
              preview.document.write(txt);
           } else {
              alert('Zakázána vyskakovací okna, nelze zobrazit náhled!');
           }
      });
}


$.myEdit.smiles = function(clicked, el, id){
   if ( $("#box_smiles_"+id).length > 0 ) {
      $("#box_smiles_"+id).remove();
      return;
   }  
   var position = $(clicked).position();
   var smiles = $("<div class='box_smiles' id='box_smiles_"+id+"'></div>").css("top", position.top+25+"px").css("left", position.left+"px")
   for(var i=0; i<10; i++) {
      $(smiles).append($("<img src='img/smiles/"+i+".gif' smile='*"+i+"*'>").click(function(){
            var obj = $(el)[0];
            if (obj.selectionStart) {
               var sel_start = obj.selectionStart;
               var sel_end = obj.selectionEnd;  
               $.myEdit.replaceText(obj, $(this).attr("smile"), sel_start, sel_end);
               obj.selectionStart = sel_start;
               obj.selectionEnd = sel_start + $(this).attr("smile").length;
            } else {
               $(obj).val($(obj).val() + $(this).attr("smile"));
            }
            $(smiles).remove(); 
            obj.focus(); 
         }));
   }    
   $(smiles).append($("<img src='img/icon_cancel.gif'>").click(function(){
         var obj = $(el)[0];
         $(smiles).remove(); 
         obj.focus(); 
      }));
   $(clicked).after(smiles);
}

$.myEdit.uploader = function(el, img, callback){
   new qq.FileUploader({
         element: $(el)[0],
         action: "ajax/upload.php",
         //params: {  },
         onSubmit: function(id, fileName){  loading()    },
         onComplete: function(id, fileName, responseJSON){
            stopLoading()
            if ( responseJSON.success ) {
               if ( img && responseJSON.img == false ) {
                  alert("Soubor není obrázek!");               
               } else {                 
                  $(el).parent(".box").children(".url").val("#"+responseJSON.ID);
                  callback();
               }
            } else {
               alert(responseJSON.msg);
            }
         }
    });  
}

$.myEdit.tag = function(obj, t1, t2) { 
	if (typeof(obj) !== 'object') obj = $(obj)[0];
   if (obj.selectionStart) {
      var sel_start = obj.selectionStart;
      var sel_end = obj.selectionEnd;
      $.myEdit.insertText(obj, t1, sel_start);
      $.myEdit.insertText(obj, t2, sel_end + t1.length);  
      obj.selectionStart = sel_start;
      obj.selectionEnd = sel_end + t1.length + t2.length;
   } else {
      $(obj).val($(obj).val() + t1 + t2);
   }  
   obj.focus(); 
} 
$.myEdit.youtube = function(obj) {
	if (typeof(obj) !== 'object') obj = $(obj)[0];
	var url = "";
	var sel_start = 0;
	var sel_end = 0;
   if (obj.selectionStart) { 
      sel_start = obj.selectionStart;
      sel_end = obj.selectionEnd;
      url = obj.value.substring(sel_start, sel_end);
   }
   var editbar = $(obj).prev(".editbar");   
    
	if ( $(editbar).children(".box_youtube").length > 0 ) {
      $(editbar).children(".box_youtube").remove();   
      $(obj).removeAttr("readonly"); 
      obj.focus(); 
      return;
   }
   
   if ( $(editbar).children(".box").length > 0 ) {
      $(editbar).children(".box").remove();
   } 
   $(obj).attr("readonly", "readonly");  
   $(editbar).append("<div class='box box_youtube'/>");
   var box = $(editbar).children(".box");  
   var id = Math.round(Math.random()*1000000);                                                        
   $(box).append("<label for='url_" + id + "'>Youtube adresa</label><input type='text' id='url_" + id + "' value='"+url+"' /><br class='clear'>");
   $(box).append($("<button class='btn_ok'></button>").click(function(){
         //smazu stary text
         var text = "";
         var url = $("#url_" + id).val();
         var title = $("#title_" + id).val();
         if ( url == "" ) { $(box).remove(); }
         if ( title == "" ) {
            text = "[youtube]"+url+"[/youtube]";
         } else {    
            text = "[youtube="+url+"]"+title+"[/youtube]";
         }
           
         if (obj.selectionStart) {
            $.myEdit.replaceText(obj, text, sel_start, sel_end);
         } else {
            $(obj).val($(obj).val() + text);
         }
         $(box).remove();
         $(obj).removeAttr("readonly"); 
         obj.focus(); 
      }));
   $(box).append($("<button class='btn_cancel'></button>").click(function(){ $(box).remove(); $(obj).removeAttr("readonly"); }));
   $(box).append("<br class='clear'>");
}
$.myEdit.url = function(obj) { 
	if (typeof(obj) !== 'object') obj = $(obj)[0];
	var url = "";
	var sel_start = 0;
	var sel_end = 0;
   if (obj.selectionStart) { 
      sel_start = obj.selectionStart;
      sel_end = obj.selectionEnd;
      url = obj.value.substring(sel_start, sel_end);
   }
   var editbar = $(obj).prev(".editbar");
   
	if ( $(editbar).children(".box_url").length > 0 ) {
      $(editbar).children(".box_url").remove();  
      $(obj).removeAttr("readonly"); 
      obj.focus(); 
      return;
   }
   
   if ( $(editbar).children(".box").length > 0 ) {
      $(editbar).children(".box").remove();
   } 
   $(obj).attr("readonly", "readonly");  
   $(editbar).append("<div class='box box_url'/>");
   var box = $(editbar).children(".box");  
   var id = Math.round(Math.random()*1000000);                                                        
   $(box).append("<label for='url_" + id + "'>URL</label><input class='url' type='text' id='url_" + id + "' value='"+url+"' />");
   $(box).append("<label for='title_" + id + "'>Title</label><input type='text' id='title_" + id + "' />");
   $(box).append("<label>Nahrát soubor</label><div style='float: left;' id='upload_" + id + "' ></div><br class='clear'/>");
   $.myEdit.uploader("#upload_" + id, false, function(){
      	var sel_start = 0;
      	var sel_end = 0;
      	var text = ""; 
         var url = $("#url_" + id).val();
         var title = $("#title_" + id).val();
         if ( title == "" ) {
            text = "[url]"+url+"[/url]";
         } else {    
            text = "[url="+url+"]"+title+"[/url]";
         }
         if (obj.selectionStart) { 
            sel_start = obj.selectionStart;
            sel_end = obj.selectionEnd;
         }
         if (obj.selectionStart) {
            $.myEdit.replaceText(obj, text, sel_start, sel_end);
         } else {
            $(obj).val($(obj).val() + text);
         }    
         $(box).remove();
         $(obj).removeAttr("readonly"); 
         obj.focus(); 
      });
   $(box).append($("<button class='btn_ok'></button>").click(function(){
         //smazu stary text
         var text = "";
         var url = $("#url_" + id).val();
         var title = $("#title_" + id).val();
         if ( url == "" ) { $(box).remove(); }
         if ( title == "" ) {
            text = "[url]"+url+"[/url]";
         } else {    
            text = "[url="+url+"]"+title+"[/url]";
         }
           
         if (obj.selectionStart) {
            $.myEdit.replaceText(obj, text, sel_start, sel_end);
         } else {
            $(obj).val($(obj).val() + text);
         }
         $(box).remove();
         $(obj).removeAttr("readonly"); 
         obj.focus(); 
      }));
   $(box).append($("<button class='btn_cancel'></button>").click(function(){ $(box).remove(); $(obj).removeAttr("readonly"); }));
}
$.myEdit.img = function(obj) { 
	if (typeof(obj) !== 'object') obj = $(obj)[0];
	var url = "";
	var sel_start = 0;
	var sel_end = 0;
   if (obj.selectionStart) { 
      sel_start = obj.selectionStart;
      sel_end = obj.selectionEnd;
      url = obj.value.substring(sel_start, sel_end);
   }
   var editbar = $(obj).prev(".editbar");
   
	if ( $(editbar).children(".box_img").length > 0 ) {
      $(editbar).children(".box_img").remove();  
      $(obj).removeAttr("readonly"); 
      obj.focus(); 
      return;
   }
   
   if ( $(editbar).children(".box").length > 0 ) {
      $(editbar).children(".box").remove();
   } 
   $(obj).attr("readonly", "readonly");  
   $(editbar).append("<div class='box box_img'/>");
   var box = $(editbar).children(".box");  
   var id = Math.round(Math.random()*1000000);   
                                                        
   $(box).append("<input type='hidden' class='url' id='url_" + id + "' value=''/>");   
   //$(box).append("<label for='title_" + id + "'>Title</label><input type='text' id='title_" + id + "' />");
   $(box).append("<label>Nahrát obrázek</label><div style='float: left;' id='upload_" + id + "' ></div><br class='clear'/>");
   $.myEdit.uploader("#upload_" + id, true, function(){
      	var sel_start = 0;
      	var sel_end = 0;
         var text = "";
         var url = $("#url_" + id).val();
         if ( url == "" ) { $(box).remove(); }
         text = "[img="+url+"]";
           
         if (obj.selectionStart) {
            $.myEdit.replaceText(obj, text, sel_start, sel_end);
         } else {
            $(obj).val($(obj).val() + text);
         }
         $(box).remove();
         $(obj).removeAttr("readonly"); 
         obj.focus(); 
      });
   $(box).append($("<button class='btn_ok'></button>").click(function(){
         //smazu stary text
         var text = "";
         var url = $("#url_" + id).val();
         if ( url == "" ) { $(box).remove(); }
         text = "[img="+url+"]";
           
         if (obj.selectionStart) {
            $.myEdit.replaceText(obj, text, sel_start, sel_end);
         } else {
            $(obj).val($(obj).val() + text);
         }
         $(box).remove();
         $(obj).removeAttr("readonly"); 
         obj.focus(); 
      }));
   $(box).append($("<button class='btn_cancel'></button>").click(function(){ $(box).remove(); $(obj).removeAttr("readonly"); }));
} 



$.myEdit.insertText = function(obj, text, pos) { 
	if (typeof(obj) !== 'object') obj = $(obj)[0];
   $(obj).val(obj.value.slice(0, pos) + text + obj.value.slice(pos));
} 

$.myEdit.replaceText = function(obj, text, pos1, pos2) { 
	if (typeof(obj) !== 'object') obj = $(obj)[0];
   $(obj).val(obj.value.slice(0, pos1) + text + obj.value.slice(pos2));
} 

});
