/**
 * Make TinyMCE work nice with UniForm
 *
 * This simple script will make sure that TinyMCE works as expected from UniForm 
 * validation and behavior code.
 *
 * @author Ilija Studen <ilija.studen@gmail.com>
 */

/**
 * Validate if user have inserted anything in specific TinyMCE editor
 *
 * This validator will strip HTML and some entities in order to see if value is 
 * present or not
 *
 * @param jQuery field
 * @param string caption
 */
window.tiny_value_present = function(field, caption) {
  if(tinyMCE) {
    for(var instance_name in tinyMCE.instances) {
      if(tinyMCE.instances[instance_name] && (tinyMCE.instances[instance_name].formTargetElementId == field.attr('name'))) {
        var content = tinyMCE.instances[instance_name].getBody().innerHTML.replace(/<\/?[^>]+>/gi, '').replace('&nbsp;', '');
        
        if(content.length < 1) {
          return caption + ' value is required';
        } // if
      } // if
    } // if
  } else {
    if(field.val() == '') {
      return caption + ' value is required';
    } // if
  }
  return true;
}

var tiny_instances_by_editor_id = {};

var old_tinymce_handle_event = TinyMCE.prototype.handleEvent;
var new_tinymce_handle_event = function(e) {
  if(typeof(e) != 'undefined') {
    var editor_id = 'mce_editor_0';
    //var editor_id = e.target.editorId ? e.target.editorId : e.target.ownerDocument.editorId;
      
    // If we don\'t have instances loaded load them now
    if(!tiny_instances_by_editor_id[editor_id]) {
			tinyMCE.instances[editor_id].select();
			
			if(tinyMCE.selectedInstance) {
				tinyMCE.selectedInstance.switchSettings();
			} // if
			
			tiny_instances_by_editor_id[editor_id] = {
			  inst : tinyMCE.selectedInstance,
			  textarea : $(tinyMCE.selectedInstance.formElement),
			  form : null
			};
			
			var textarea_parent = tiny_instances_by_editor_id[editor_id].textarea.parent();
      while(typeof textarea_parent == "object") {
        if(textarea_parent[0].nodeName == "FORM") {
          tiny_instances_by_editor_id[editor_id].form = textarea_parent;
          break;
        } // if
        textarea_parent = textarea_parent.parent();
      } // if
    } // if
    
    switch(e.type) {
      case 'focus':
        UniForm.focus_field(tiny_instances_by_editor_id[editor_id].form, tiny_instances_by_editor_id[editor_id].textarea);
        break;
      case 'blur':
        UniForm.validate(tiny_instances_by_editor_id[editor_id].form, false);
        break;
    } // switch
  } // if
  return old_tinymce_handle_event(e);
};
TinyMCE.prototype.handleEvent = new_tinymce_handle_event;