// Javascript for the CMS backend.

var CMSBehaviors = {

  setup: function() {
    $A(arguments).each(function(value) {
      var action = CMSBehaviors[value + "_setup"];
      if (typeof(action) == 'function')
        action();
    });
  },

  label_setup: function() {
    $$('.fieldHelp').invoke("hide");
    $$('.fieldLabel').each(function (el) {
      el.onmouseover = CMSBehaviors.show_help_trigger;
      el.onmouseout = CMSBehaviors.hide_help_trigger;
    });
  },

  focus_setup: function(){
		var items = $$('.focus');
    if (items.length > 0)
      items[0].focus();
	},

  page_preview_setup: function() {
    var items = $$('.JPreviewBtn')
    if (items.length > 0)
      items[0].onclick = CMSBehaviors.page_preview;
  },

  pretty_filters_setup: function() {
    var form = $('searchForm');
    form.onsubmit = CMSBehaviors.submit_filters;
  },

  auto_submit_setup: function() {
    var forms = $$('.autoSubmit');
    forms.each(function(form) {
      new Form.EventObserver(form, function(element, value) { form.submit() });
    });
  },

  double_click_rows_setup: function() {
    var rows = $$('.dblClickRow');
    rows.each(function(row) {
      row.ondblclick = CMSBehaviors.edit_row;
    });
  },

  activation_toggles_setup: function() {
    var links = $$('a.activationLink');
    links.each(function(link) {
      link.onclick = CMSBehaviors.toggle_active_link;
    });
  },
	
	pagination_setup: function(){
		var forward = $$('a > img.')
	},

  autofill_navigation_labels_setup: function() {
    var rows = $$('.JSublinkRow');
    rows.each(function(row) {
      var select = row.getElementsByTagName('select')[0];
      select.onchange = CMSBehaviors.autofill_navigation_label;
    });
  },

  image_ipe_setup: function() {
    var fields = $$('.imgName');
    fields.each(function(field) {
      var fid = field.id.slice(9);
      new Ajax.InPlaceEditor(field, '/image_uploads/update/' + fid,
            {
              callback: function(form) {
                return 'image[filename_noex]=' + form.elements[0].value; 
              }
            } ) ;
    });
    var fmBoxes = $$('.JFileManagerBox');
    fmBoxes.each(function(box) {
      var subBox = box.getElementsByClassName('imgAct')[0];
      subBox.hide();
      box.onmouseover = function(el) {
        subBox.show();
      };
      box.onmouseout = function(el) {
        subBox.hide();
      };
      var infoLink = box.getElementsByClassName('JInfoImage')[0];
      var infoBox = box.getElementsByClassName('imgInfo')[0];
      var imgBox = box.getElementsByClassName('imgBox')[0];
      infoLink.onclick = function(el) {
        infoBox.toggle();
        imgBox.toggle();
        if (el) el.stopPropagation();
        return false;
      };
      var moveLink = box.getElementsByClassName('JMoveImage')[0];
      var moveCtl = box.getElementsByClassName('imgMove')[0];
      moveLink.onclick = function(el) {
        moveCtl.toggle();
        if (el) el.stopPropagation();
        return false;
      };
    });
  },

  settings_setup: function() {
    var editLinks = $$('.JSettingEdit');
    editLinks.each(function(link) {
      var sid = link.id.slice(13);
      var valueBox = $('setting_value_' + sid);
      new Ajax.InPlaceEditor(valueBox, '/settings/update/' + sid + '.txt',
        {
          callback: function(form) {
            return('setting[value]=' + form.elements[0].value);
          },
          loadTextURL: '/settings/edit/' + sid + '.txt', 
          externalControl: link
        });
      //link.hide();
    });
  },

  sublink_options_setup: function() {
    var sublinkTargets = $$('.sublinkTarget');
    sublinkTargets.each(function(box, slIdx) {
      if (box.fixed) return;
      // Extract the labels from the row and remove them.
      var labels = [];
      $A(box.getElementsByTagName('strong')).each(function (label) {
        labels.push(label.textContent);
        label.remove();
      });
      var selector = document.createElement('select');
      selector.id = "sl_selector_" + slIdx;
      selector.addClassName('slSelector');
      labels.each(function (label, idx) {
        var option = document.createElement('option');
        option.value = idx;
        option.appendChild(document.createTextNode(label));
        selector.appendChild(option);
      });
      box.parentNode.insertBefore(selector, box);
      var oneSelected = false;
      var tgts = $A(box.getElementsByClassName('tgt'));
      tgts.each(function (tgt, idx) {
        var decoy = document.createElement('input');
        decoy.type = 'hidden';
        decoy.name = tgt.name;
        decoy.value = '';
        decoy.addClassName('decoy');
        tgt.parentNode.insertBefore(decoy, tgt);
        if (tgt.value != "" && tgt.value != null) {
          selector.selectedIndex = idx;
          oneSelected = true;
          tgt.enable();
          decoy.disable();
        } else {
          tgt.hide();
          tgt.disable();
          decoy.enable();
        }
      });
      if (!oneSelected) {
        selector.selectedIndex = 0;
        tgts[0].show();
        tgts[0].enable();
        $A(box.getElementsByClassName('decoy'))[0].disable();
      }
      // This is weird
      $$('.slSelector').each(function (sel) {
        sel.onchange = CMSBehaviors.swap_sublink_target;
      });
      box.fixed = true;
    });
  },

  image_manager_setup: function() {
    $$('.imageManager .imgMgrBox').each(function (el,i) {
      CMSBehaviors.image_manager_bless_image(el);
    });
  },

  fieldsets_setup: function() {
    $$('.JFieldSetToggle').each(function (el,i) {
      el.show();
      el.parentNode.onclick = function (ev) {
        var tgtEl = this.parentNode.getElementsByClassName('cmsBox')[0];
        var togEl = this.childNodes[0];
        if (tgtEl) {
          if (tgtEl.visible()) {
            Element.removeClassName(togEl, 'JFSTopen');
            Element.addClassName(togEl, 'JFSTclosed');
            tgtEl.hide();
          } else {
            Element.addClassName(togEl, 'JFSTopen');
            Element.removeClassName(togEl, 'JFSTclosed');
            tgtEl.show();
          }
        }
      };
    });
  },

  open_image_manager: function(ev) {
    $$('.imgSelected').each(function (el) {
      Element.removeClassName(el, 'imgSelected');
    });
    Element.addClassName(this, 'imgSelected');
    var im = $('iManagerWin');
    if (! im ) {
      var imF = this;
      while (imF && (imF.tagName != 'FORM')) {
        imF = imF.parentNode;
      }
      if (! imF ) {
        alert('error initializing image manager');
        return false;
      }
      new Insertion.After(imF, '<div style="display:none;width:90%;" id="iManagerWin"></div>');
      im = $('iManagerWin');
    }
    if (! im.loaded ) {
      new Ajax.Updater(im, '/image_uploads/embedded?complete=true', {method: 'get', parameters: 'type=image', onComplete: CMSBehaviors.image_manager_init, evalScripts: true });
    } else {
      im.show();
    }
  },

  image_manager_init: function() {
    var im = $('iManagerWin');
    im.style.visibility = 'hidden';
    im.show();
    var imContainer = $('iManagerWinSpace');
    imContainer.show();
    var dims = im.getDimensions();
    imContainer.style.height = (dims.height + 70) + 'px';
    setInterval(CMSBehaviors.reposition_image_manager, 30);
    CMSBehaviors.reposition_image_manager();
    im.loaded = true;
  },

  reposition_image_manager: function() {
    var im = $('iManagerWin');
    var imContainer = $('iManagerWinSpace');
    if (imContainer.offsetHeight != 0) {
      im.style.position = 'absolute';
      imContainer.style.height = (im.getDimensions().height + 20) + 'px';
      var pos = Position.cumulativeOffset(imContainer);
      im.style.top = pos[1] + 'px';
      im.style.left = pos[0] + 'px';
      im.style.width = imContainer.clientWidth + 'px';
      im.style.visibility = 'visible';
    } else {
      im.style.visibility = 'hidden';
    }
  },

  finish_upload: function(iframe) {

    if (!iframe.contentDocument) {
      var content = iframe.contentWindow.document.body.innerHTML;
    } else {
      var content = iframe.contentDocument.body.innerHTML;
    }

    if (content) {
      var uploaded = eval('(' + content + ')');
      new Ajax.Updater('fileManager', '/image_uploads/embedded?type=image', {asynchronous:true, evalScripts:true, parameters: 'directory=' + uploaded.directory});
    }
  },


  image_manager_select: function(me, id, url) {
    var newContent = null;
    if (Element.hasClassName(me, 'imgNewBox') && !Element.hasClassName(me, 'imgOnlyBox')) {
      newContent = '<div class="imgMgrBox imgNewBox">' + me.innerHTML + '</div>';
      Element.removeClassName(me, 'imgNewBox');
    }
    me.getElementsByClassName('imgId')[0].value = id;
    me.getElementsByClassName('imImg')[0].src = url;
    if (newContent) {
      new Insertion.Bottom(me.parentNode, newContent);
      var newEl = me.parentNode.getElementsByClassName('imgNewBox')[0];
      if (newEl) {
        $('iManagerWin').targetElement = newEl;
        Element.removeClassName(this, 'imgSelected');
        Element.addClassName(newEl, 'imgSelected');
        CMSBehaviors.image_manager_bless_image(newEl);
        CMSBehaviors.reposition_image_manager();
      }
    }
  },

  image_manager_bless_image: function(el) {
    el.onclick = CMSBehaviors.open_image_manager;
    el.on_im_select = CMSBehaviors.image_manager_select;
    var btn = el.getElementsByClassName('deleteBtn')[0];
    if (btn) {
      btn.onclick = function (ev) {
        if (ev) ev.stopPropagation();
        var poppy = this.parentNode;
        if (poppy.parentNode.getElementsByClassName('imgMgrBox').length > 1) {
          poppy.remove();
          CMSBehaviors.reposition_image_manager();
        } else {
          /* This is the last element. Neuter it instead of deleting it. */
          poppy.getElementsByClassName('imgId')[0].value = '';
          poppy.getElementsByClassName('imImg')[0].src = '/images/backend/new-box.png';
          Element.addClassName(poppy, 'imgNewBox');
        }
        return false;
      };
    }
  },

  swap_sublink_target: function(ev) {
    var selectedIdx = this.selectedIndex;
    var box = this.parentNode.getElementsByClassName('sublinkTarget')[0];
    $A(box.getElementsByClassName('tgt')).each(function (tgt, idx) {
      if (selectedIdx == idx) {
        tgt.show();
        tgt.enable();
        $A(box.getElementsByClassName('decoy'))[idx].disable();
      } else {
        tgt.hide();
        tgt.disable();
        $A(box.getElementsByClassName('decoy'))[idx].enable();
      }
    });
  },

  autofill_navigation_label: function() {
    var label = this.parentNode.parentNode.parentNode.getElementsByTagName('input')[0];
    if (label.value == "")
      label.value = this[this.selectedIndex].textContent;
  },

  toggle_active_link: function(evt) {
    var currentlyActive = (this.href[this.href.length - 1] == "0");;
    new Ajax.Request(this.href);
    Element.cleanWhitespace(this);
    if (currentlyActive) {
      this.firstChild.textContent = 'inactive';
      this.href = this.href.slice(0, -1) + '1';
      Element.addClassName(this, "inactive");
    } else {
      this.firstChild.textContent = 'active';
      this.href = this.href.slice(0, -1) + '0';
      Element.removeClassName(this, "inactive");
    }
    if (evt) evt.stopPropagation();
    return false;
  },

  edit_row: function(evt) {
    var editLink = this.getElementsByClassName('editLink').first();
    if (editLink)
      document.location = editLink.href;
  },

  submit_filters: function(evt) {
    var filter_selects = $A(this.getElementsByTagName('select'))
    var filter_values = filter_selects.pluck('value').reject(function(v) { return v.length == 0 });
    var newLoc = null;
    var page = Number(document.location.href.split('/').last());
    if (filter_values.length > 0) {
      newLoc = '/pages/filter/' + filter_values.invoke('gsub', ' ', '+').join('|');
    } else {
      newLoc = '/pages/index';
    }
    if (page > 0) {
      newLoc += '/' + page;
    }
    document.location = newLoc;
    if (evt) evt.stopPropagation();
    return false;
  },

  page_preview: function(evt) {
    var p_target = this.form.target;
    var p_action = this.form.action;
    this.form.target = '_blank';
    this.form.action = p_action.gsub(/(new|create|edit|update)/, 'preview');
    this.form.submit();
    this.form.target = p_target;
    this.form.action = p_action;
    if (evt) evt.stopPropagation();
    return false;
  },

  show_help_trigger: function() {
    var help = $(this.id.replace("label", "help"));
    if (help) {
      help.show();
//      setTimeout(function () { help.show(); }, 500);
    }
  },

  hide_help_trigger: function() {
    var help = $(this.id.replace("label", "help"));
    if (help) {
      help.hide();
    }
  },

  show_admin_panel: function() {
    $('admin_panel_hide').onclick = CMSBehaviors.hide_admin_panel;
    $('admin_panel').show();
  },

  hide_admin_panel: function(evt) {
    $('admin_panel').hide();
    if (evt) evt.stopPropagation();
    return false;
  },
	
	apply_sort: function(){
		
	}
}

Event.observe(window, 'load', CMSBehaviors.focus_setup, false);
