﻿var OpenEditElements = new Array();
var OpenAjaxEditElements = new Array();

function toggleDiv(element)
{
   var el;
   el = document.getElementById(element);
   if(el.style.display != 'block')
   {
     el.style.display = 'block';
   }
   else
   {
     el.style.display = 'none';
   }
}

function toggleEditArea(element_subname)
{
  toggleDiv('edit' + element_subname);
  toggleDiv('normal' + element_subname);
}

function uneditDivs()
{
  for (var i = 0; i < OpenEditElements.length; i++) 
  {
    var element_subname = OpenEditElements[i];
    var normalElement = 'normal' + element_subname;
    var editElement = 'edit' + element_subname;
    document.getElementById(normalElement).style.display = 'block';
    document.getElementById(editElement).style.display = 'none';
  }

  OpenEditElements = new Array();  
  
  for (var i = 0; i < OpenAjaxEditElements.length; i++) 
  {
    OpenAjaxEditElements[i].onSubmit();
  }

  OpenAjaxEditElements = new Array();    
  
  return false;
}

function uneditAjax(ajax_item)
{
  for (var i = 0; i < OpenAjaxEditElements.length; i++) 
  {
    if (OpenAjaxEditElements[i] == ajax_item)
    {
      OpenAjaxEditElements.splice(i, 1);
      return;      
    }
  }
}

function editDiv(element_subname)
{
  uneditDivs();
  
  var normalElement = 'normal' + element_subname;
  var editElement = 'edit' + element_subname;
  document.getElementById(normalElement).style.display = 'none';
  document.getElementById(editElement).style.display = 'block';  

  OpenEditElements.push(element_subname);
  return false;
}

/*
function editIngredient(recipe_ingredient_id)
{
  element_subname = 'ingredient' + recipe_ingredient_id;
  editDiv(element_subname); 
  Sortable.destroy('sortable_ingredients');
  document.getElementById('sortable_ingredients').style.cursor = 'auto';
  return false;
}

function uneditIngredient()
{
  uneditDivs();
  Sortable.create("sortable_ingredients", {onUpdate:function(){new Ajax.Updater('ingredient_order_result', '/recipe/order_ingredients', {asynchronous:true, evalScripts:true, parameters:Sortable.serialize("sortable_ingredients")})}})
  document.getElementById('sortable_ingredients').style.cursor = 'n-resize';
  return false;
}
*/

function focusRTE(rte)
{   
	// This works on i.e. but only sometimes on netscape

	var oRTE;
	if (document.all) 
	{
		oRTE = frames[rte];
	} 
	else 
	{
		oRTE = document.getElementById(rte).contentWindow;
	}
	
  oRTE.focus();
  //oRTE.document.execCommand('justifyleft', false, '');
  //oRTE.focus();
	currentRTE = rte;
	insertHTML('');
	oRTE.focus();
}

function autocompleteOnShow(element, update)
{
  if(!update.style.position || update.style.position=='absolute') 
  {
    update.style.position = 'absolute';
    Position.clone(element, update, {setHeight: false, offsetTop: element.offsetHeight});
  }
  update.style.display = 'block';  
  // This fixes the z-order in firefox
  update.style.zIndex = 2;
}
function autocompleteOnHide(element, update)
{
  update.style.display = 'none';  
}

function unencodeHTML(oldString) 
{
  var newString = oldString;
	
  newString = newString.replace(/&lt;/g, '<');
  newString = newString.replace(/&gt;/g, '>');
  newString = newString.replace(/&amp;/g, '&');
  newString = newString.replace(/&nbsp;/g, ' ');
	
	return newString;
}

Ajax.TodInPlaceEditor = Class.create();
Object.extend(Ajax.TodInPlaceEditor.prototype, Ajax.InPlaceEditor.prototype);
Object.extend(Ajax.TodInPlaceEditor.prototype, {
  enterHover: function() {},
  leaveHover: function() {},
  createEditField: function() {
    var text;
    if(this.options.loadTextURL) {
      text = this.options.loadingText;
    } else {
      text = unencodeHTML(this.getText());
    }

    var obj = this;
    
    if (this.options.rows == 1 && !this.hasHTMLLineBreaks(text)) {
      this.options.textarea = false;
      var textField = document.createElement("input");
      textField.obj = this;
      textField.type = "text";
      textField.value = text;
      
      // TOD NEW
      textField.className = this.options.edit_class;
      textField.name = this.options.thing_table + '[' + this.options.thing_column + ']';
      // TOD OLD
      //textField.name = "value";
      //textField.style.backgroundColor = this.options.highlightcolor;
      //textField.className = 'editor_field';
      // TOD END
      
      var size = this.options.size || this.options.cols || 0;
      if (size != 0) textField.size = size;
      if (this.options.submitOnBlur)
        textField.onblur = this.onSubmit.bind(this);

      // TOD NEW
      if (this.options.autocomplete)
      {
        textField.id = this.options.autocomplete;

        this.divField = document.createElement("div");
        this.divField.id = this.options.autocomplete + '_auto_complete';
        Element.addClassName(this.divField, 'auto_complete')
        
        this.form.appendChild(this.divField);
      } 
      
      this.editField = textField;
    } else {
      this.options.textarea = true;
      var textArea = document.createElement("textarea");
      textArea.obj = this;
      textArea.name = "value";
      textArea.value = this.convertHTMLLineBreaks(text);
      textArea.rows = this.options.rows;
      textArea.cols = this.options.cols || 40;
      textArea.className = 'editor_field';      
      if (this.options.submitOnBlur)
        textArea.onblur = this.onSubmit.bind(this);
      this.editField = textArea;
    }
    
    if(this.options.loadTextURL) {
      this.loadExternalText();
    }
    this.form.appendChild(this.editField);
  },
  createForm: function() {
    this.form = document.createElement("form");
    this.form.id = this.options.formId;
    Element.addClassName(this.form, this.options.formClassName)
    this.form.onsubmit = this.onSubmit.bind(this);
    
    // TOD NEW
    this.form.setAttribute("autocomplete", "off"); 

    this.createEditField();

    if (this.options.textarea) {
      var br = document.createElement("br");
      this.form.appendChild(br);
    }

    if (this.options.okButton) {
      okButton = document.createElement("input");
      okButton.type = "submit";
      okButton.value = this.options.okText;
      okButton.className = 'editor_ok_button';
      this.form.appendChild(okButton);
    }

    if (this.options.cancelLink) {
// NEW
        cancelLink = document.createElement("input");
        cancelLink.type = "button";
        cancelLink.value = this.options.cancelText;
// OLD
//      cancelLink = document.createElement("a");
//      cancelLink.href = "#";
//      cancelLink.appendChild(document.createTextNode(this.options.cancelText));
      cancelLink.onclick = this.onclickCancel.bind(this);
      cancelLink.className = 'editor_cancel';      
      this.form.appendChild(cancelLink);
    }
  },
  enterEditMode: function(evt) {
    if (this.saving) return;
    if (this.editing) return;
    this.editing = true;

    this.onEnterEditMode();
    if (this.options.externalControl) {
      Element.hide(this.options.externalControl);
    }
    Element.hide(this.element);
    this.createForm();
    this.element.parentNode.insertBefore(this.form, this.element);
    
    // TOD NEW
    if (this.options.autocomplete)
    {
      this.auto_completer = new Ajax.Autocompleter(
            this.options.autocomplete, 
            this.options.autocomplete + '_auto_complete', 
            '../auto_complete_for_' + this.options.autocomplete, 
            {onHide:autocompleteOnHide, onShow:autocompleteOnShow, minChars:0});
            
      this.editField.focus();
      this.auto_completer.activate()
    } 
    
    Field.scrollFreeActivate(this.editField);
    // stop the event to avoid a page refresh in Safari
    if (evt) {
      Event.stop(evt);
    }
    return false;
  },
  onEnterEditMode: function() 
  {
    uneditDivs();
    OpenAjaxEditElements.push(this);
  },
  onLeaveEditMode: function() 
  {
    uneditAjax(this);
  },
  showSaving: function() {
    this.oldInnerHTML = this.element.innerHTML;
    
    // TOD NEW
    this.element.innerHTML = this.editField.value + "&nbsp;&nbsp;&nbsp;&nbsp;";
    // TOD OLD
    //this.element.innerHTML = this.options.savingText;
    
    Element.addClassName(this.element, this.options.savingClassName);
    this.element.style.backgroundColor = this.originalBackground;    
    Element.show(this.element);
  }
});

var needToConfirmOnLeave = false;
var rememberedFormValues = []
var rememberedForm;

function rememberFormValues(form) 
{
  rememberedForm = form;
  
  for (var i = 0; i < rememberedForm.elements.length; i++)
  {
    var element = rememberedForm.elements[i];
	  var tag = element.tagName.toLowerCase();
	  if (element.type == 'text' || element.type == 'password' || element.type == 'hidden' || tag == 'textarea')
	  {
	    rememberedFormValues.push(element.value);
	  }
	  else if (element.type == 'checkbox' || element.type == 'radio')
	  {
	    rememberedFormValues.push(element.checked);
	  }
	  else if (tag == 'select')
	  {
	    rememberedFormValues.push(element.selectedIndex);
	  }
  }
};

function hasRememberFormChanged()
{
  var valueIndex = 0;
  for (var i = 0; i < rememberedForm.elements.length; i++)
  {
    var element = rememberedForm.elements[i];
	  var tag = element.tagName.toLowerCase();
	  if (element.type == 'text' || element.type == 'password' || element.type == 'hidden' || tag == 'textarea')
	  {
	    if (rememberedFormValues[valueIndex] != element.value)
	    {
	      return true;
	    }
	  }
	  else if (element.type == 'checkbox' || element.type == 'radio')
	  {
	    if (rememberedFormValues[valueIndex] != element.checked)
	    {
	      return true;
	    }
	  }
	  else if (tag == 'select')
	  {
	    if (rememberedFormValues[valueIndex] != element.selectedIndex)
	    {
	      return true;
	    }
	  }
	  else
	  {
	    continue;
	  }
	  valueIndex++;
  }
  return false;
};

function confirmExit()
{
  if (needToConfirmOnLeave)
  {
    updateRTEs();  
    
    if (hasRememberFormChanged())
    {
      return 'Your changes have not been saved.';
    }   
  }
  
  // returning nothing here stops dialog from popping up.
}

function SetupConfirmOnLeave(form)
{
  updateRTEs();  
  
  rememberFormValues(form);
  
  needToConfirmOnLeave = true;

  window.onbeforeunload = confirmExit;
}

function CancelConfirmOnLeave()
{
  needToConfirmOnLeave = false;
}

function EditSubmit(form)
{
  updateRTEs();
  CancelConfirmOnLeave();
  form.submit();
}

function label_checkbox_clicked(label_checkbox)
{
  if (label_checkbox.checked)
  {
    label_checkbox.parentNode.className = "viewlabel_table_box_checked"
  }
  else
  {
    label_checkbox.parentNode.className = "viewlabel_table_box"
  }
}