// Place your application-specific JavaScript functions and classes here
// This file is automatically included by javascript_include_tag :defaults
Ajax.InPlaceEditorCustom = Class.create();
Ajax.InPlaceEditorCustom.defaultHighlightColor = "#FFFF99";
Ajax.InPlaceEditorCustom.prototype = {
  initialize: function(element, url, options) {
    this.url = url;
    this.element = $(element);

    this.options = Object.extend({
      okButton: true,
      okText: "ok",
      cancelLink: true,
      cancelText: "cancel",
      savingText: "Saving",
      clickToEditText: "Click to edit",
      okText: "ok",
      fieldText: "",
      rows: 1,
      onComplete: function(transport, element) {
        new Effect.Highlight(element, {startcolor: this.options.highlightcolor});
      },
      onFailure: function(transport) {
        alert("Error communicating with the server: " + transport.responseText.stripTags());
      },
      callback: function(form) {
        return Form.serialize(form);
      },
      handleLineBreaks: true,
      loadingText: 'Loading...',
      savingClassName: 'inplaceeditor-saving',
      loadingClassName: 'inplaceeditor-loading',
      formClassName: 'inplaceeditor-form',
      highlightcolor: Ajax.InPlaceEditor.defaultHighlightColor,
      highlightendcolor: "#FFFFFF",
      externalControl: null,
      submitOnBlur: false,
      richHTML: false,
      ajaxOptions: {},
      evalScripts: false
    }, options || {});

    if(!this.options.formId && this.element.id) {
      this.options.formId = this.element.id + "-inplaceeditor";
      if ($(this.options.formId)) {
        // there's already a form with that name, don't specify an id
        this.options.formId = null;
      }
    }
    
    if (this.options.externalControl) {
      this.options.externalControl = $(this.options.externalControl);
    }
    
    this.originalBackground = Element.getStyle(this.element, 'background-color');
    if (!this.originalBackground) {
      this.originalBackground = "transparent";
    }
    
    this.element.title = this.options.clickToEditText;
    
    this.onclickListener = this.enterEditMode.bindAsEventListener(this);
    this.mouseoverListener = this.enterHover.bindAsEventListener(this);
    this.mouseoutListener = this.leaveHover.bindAsEventListener(this);
    
    if (this.options.externalControl) {
      Event.observe(this.options.externalControl, 'click', this.onclickListener);
      Event.observe(this.options.externalControl, 'mouseover', this.mouseoverListener);
      Event.observe(this.options.externalControl, 'mouseout', this.mouseoutListener);      
    }
    else
    {
        Event.observe(this.element, 'click', this.onclickListener);
        Event.observe(this.element, 'mouseover', this.mouseoverListener);
        Event.observe(this.element, 'mouseout', this.mouseoutListener);
    }
  },
  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);
    Field.scrollFreeActivate(this.editField);
    
    if (this.options.richHTML)
    {
            
        __FCKeditorNS = null;    
        var oFCKeditor = new FCKeditor("textarea_edit");         
        oFCKeditor.Height = '450px';
        oFCKeditor.Width = '100%'; 
        oFCKeditor.ReplaceTextarea();
    }
    
    // stop the event to avoid a page refresh in Safari
    if (evt) {
      Event.stop(evt);
    }
    
    
    
    return false;
  },
  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);
    
    iplabel = document.createElement("div");
    iplabel.className="in_place_label";
    iplabel.href ="#";
    iplabel.innerHTML = '<img src="/images/edit.gif" border="0"/>' + this.options.fieldText;        
    
    this.form.appendChild(iplabel);
    this.form.appendChild(document.createElement("br"));

    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) {
      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);
    }                
  },
  hasHTMLLineBreaks: function(string) {
    if (!this.options.handleLineBreaks) return false;
    return string.match(/<br/i) || string.match(/<p>/i);
  },
  convertHTMLLineBreaks: function(string) {
    return string;//.replace(/<br>/gi, "\n").replace(/<br\/>/gi, "\n").replace(/<\/p>/gi, "\n").replace(/<p>/gi, "");
  },
  createEditField: function() {
    var text;
    if(this.options.loadTextURL) {
      text = this.options.loadingText;
    } else {
      text = 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.name = "value";
      textField.value = text;
      textField.style.backgroundColor = this.options.highlightcolor;
      textField.className = 'editor_field';
      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);
      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';      
      textArea.id = "textarea_edit";
      if (this.options.submitOnBlur)
        textArea.onblur = this.onSubmit.bind(this);
      this.editField = textArea;
    }
    
    if(this.options.loadTextURL) {
      this.loadExternalText();
    }
    this.form.appendChild(this.editField);
    
   
  },
  getText: function() {
    return this.element.innerHTML;
  },
  loadExternalText: function() {
    Element.addClassName(this.form, this.options.loadingClassName);
    this.editField.disabled = true;
    new Ajax.Request(
      this.options.loadTextURL,
      Object.extend({
        asynchronous: true,
        onComplete: this.onLoadedExternalText.bind(this)
      }, this.options.ajaxOptions)
    );
  },
  onLoadedExternalText: function(transport) {
    Element.removeClassName(this.form, this.options.loadingClassName);
    this.editField.disabled = false;
    this.editField.value = transport.responseText.stripTags();
  },
  onclickCancel: function() {
    this.onComplete();
    this.leaveEditMode();
    return false;
  },
  onFailure: function(transport) {
    this.options.onFailure(transport);
    if (this.oldInnerHTML) {
      this.element.innerHTML = this.oldInnerHTML;
      this.oldInnerHTML = null;
    }
    return false;
  },
  onSubmit: function() {
    // onLoading resets these so we need to save them away for the Ajax call
    var form = this.form;
    var value = this.editField.value;
    if (this.options.richHTML==true)
    {
        var oEditor = FCKeditorAPI.GetInstance('textarea_edit');
        value = oEditor.GetXHTML();        
    }   
    this.editField.value = value;        
    // do this first, sometimes the ajax call returns before we get a chance to switch on Saving...
    // which means this will actually switch on Saving... *after* we've left edit mode causing Saving...
    // to be displayed indefinitely
    this.onLoading();
    
    if (this.options.evalScripts) {
      new Ajax.Request(
        this.url, Object.extend({
          parameters: this.options.callback(form, value),
          onComplete: this.onComplete.bind(this),
          onFailure: this.onFailure.bind(this),
          asynchronous:true, 
          evalScripts:true
        }, this.options.ajaxOptions));
    } else  {
    
      new Ajax.Updater(
        { success: this.element,
          // don't update on failure (this could be an option)
          failure: null }, 
        this.url, Object.extend({
          parameters: this.options.callback(form, value),
          onComplete: this.onComplete.bind(this),
          onFailure: this.onFailure.bind(this)
        }, this.options.ajaxOptions));
    }
    // stop the event to avoid a page refresh in Safari
    if (arguments.length > 1) {
      Event.stop(arguments[0]);
    }
    return false;
  },
  onLoading: function() {
    this.saving = true;
    this.removeForm();
    this.leaveHover();
    this.showSaving();
  },
  showSaving: function() {
    this.oldInnerHTML = this.element.innerHTML;        
    this.element.innerHTML = '<div class="saving"><img src="/images/indicator.gif"/>&nbsp;' + this.options.savingText + " " + this.options.fieldText + "...</div>";
    Element.addClassName(this.element, this.options.savingClassName);
    this.element.style.backgroundColor = this.originalBackground;
    Element.show(this.element);
  },
  removeForm: function() {
    if(this.form) {
      if (this.form.parentNode) Element.remove(this.form);
      this.form = null;
    }
  },
  enterHover: function() {
    if (this.saving) return;
    this.element.style.backgroundColor = this.options.highlightcolor;
    if (this.effect) {
      this.effect.cancel();
    }
    Element.addClassName(this.element, this.options.hoverClassName)
  },
  leaveHover: function() {
    if (this.options.backgroundColor) {
      this.element.style.backgroundColor = this.oldBackground;
    }
    Element.removeClassName(this.element, this.options.hoverClassName)
    if (this.saving) return;
    this.effect = new Effect.Highlight(this.element, {
      startcolor: this.options.highlightcolor,
      endcolor: this.options.highlightendcolor,
      restorecolor: this.originalBackground
    });
  },
  leaveEditMode: function() {
    Element.removeClassName(this.element, this.options.savingClassName);
    this.removeForm();
    this.leaveHover();
    this.element.style.backgroundColor = this.originalBackground;
    Element.show(this.element);
    if (this.options.externalControl) {
      Element.show(this.options.externalControl);
    }
    this.editing = false;
    this.saving = false;
    this.oldInnerHTML = null;
    this.onLeaveEditMode();
  },
  onComplete: function(transport) {
    this.leaveEditMode();
    this.options.onComplete.bind(this)(transport, this.element);
  },
  onEnterEditMode: function() {},
  onLeaveEditMode: function() {},
  dispose: function() {
    if (this.oldInnerHTML) {
      this.element.innerHTML = this.oldInnerHTML;
    }
    this.leaveEditMode();
    Event.stopObserving(this.element, 'click', this.onclickListener);
    Event.stopObserving(this.element, 'mouseover', this.mouseoverListener);
    Event.stopObserving(this.element, 'mouseout', this.mouseoutListener);
    if (this.options.externalControl) {
      Event.stopObserving(this.options.externalControl, 'click', this.onclickListener);
      Event.stopObserving(this.options.externalControl, 'mouseover', this.mouseoverListener);
      Event.stopObserving(this.options.externalControl, 'mouseout', this.mouseoutListener);
    }
  }
};

function showSectionOnly(section)
{
    var sections = document.getElementsByClassName('section', $('content'))		
    sections.each( function(myitem, i) 
				    { myitem.style.display="none"; } );			
	Element.show(section);
}

function toggle_items(show_item, hide_items)
{
    for (var i = 0; i < hide_items.length; i++)
    {
        Element.hide(hide_items[i]);    
        Element.removeClassName($(hide_items[i] + '_tab'), 'selected_tab');
    }
    Element.show(show_item);
    Element.addClassName($(show_item + '_tab'), 'selected_tab');
    
}

function openCartWindow(cartform)
{
    var paypalwin = window.open('', 'paypal', 'width=800,height=400,scrollbars=1,resizable=1,location=0,menubar=0,status=1,titlebar=1,toolbar=0', '');
    /* var strTemp = '';
        strTemp += '<html><head><title>View Image</title></head>';
        strTemp += '<body>';
        strTemp += 'Opening Shopping Cart...';
        strTemp += '&nbsp;';
        strTemp += '</body>';
        strTemp += '</html>';
     paypalwin.document.write(strTemp);  
     */
 
    $(cartform).submit();
}

function showImage(img, target)
{
 //   if ($(target))
 //   {
 //       var t = $(target);
 //       t.src = '/image/resize(220)%2Bzoom_icon?id=' + img;
 //   }
 //   else
 //   {
 //       openImageWindow('/Media/' + img);
 //   }
    //Event.stopObserving(t, 'click', t.onclick, false);    
    //Event.observe(t, 'click', function() { openImageWindow('/Media/' + img); }, false);
    //alert(t.src);    

}

function openFullImage(img)
{     
    var url = '/Media/' + img.src.split("=")[1];
    var win = window.open('', 'image', 'width=100,height=100,scrollbars=1,resizable=1,location=0,menubar=0,status=1,titlebar=1,toolbar=0', '');
    var strTemp = '';
        strTemp += '<html><head><title>View Image</title></head>';
        strTemp += '<body>';
        strTemp += '<img src="' + url + '" align="center" id="imgView" onload="window.resizeBy(this.width, this.height);"/>';
        strTemp += '&nbsp;';
        strTemp += '</body>';
        strTemp += '</html>';
    win.document.write(strTemp);    
}

function openImageWindow(url)
{ 
    var win = window.open('', 'image', 'width=100,height=100,scrollbars=1,resizable=1,location=0,menubar=0,status=1,titlebar=1,toolbar=0', '');
    var strTemp = '';
        strTemp += '<html><head><title>View Image</title></head>';
        strTemp += '<body>';
        strTemp += '<img src="' + url + '" align="center" id="imgView" onload="window.resizeBy(this.width, this.height);"/>';
        strTemp += '&nbsp;';
        strTemp += '</body>';
        strTemp += '</html>';
    win.document.write(strTemp);    
}

function openVideoWindow(url)
{ 
    var win = window.open(url, 'video', 'width=450,height=350,scrollbars=0,resizable=0,location=0,menubar=0,status=1,titlebar=0,toolbar=0', '');
    win.focus();
}

Array.prototype.remove = function(obj) {
  var a = [];
  for (var i=0; i<this.length; i++) {
    if (this[i] != obj) {
      a.push(this[i]);
    }
  }
  return a;
}