events.addHandler(document, 'ready', initEdit);

events.global.windows = [];
  
var Edit = {

  _indication : function (id, text) {
    var self = dom.byId(id);
    if (!self.value) self.value = text;

    events.addHandler(self, "blur", function(e) {
      if (e.target.value == '')
        e.target.value = text;
    });
    events.addHandler(self, "focus", function(e) {
      if (e.target.value == text)
        e.target.value = "";
    });
  },
  
  _delete : function (self_class, confirm_text, callback) {
    var obj = {
      tag: 'a',
      nclass: self_class,
      prevent: true,
      handler: function(self, e) {
        if (confirm (confirm_text)) {
  				widget.window.get_html (self.href, null, function(data, action) {
  					if (data.indexOf('done') == -1) return false;
            widget.status_bar.show ('<p>' + data + '</p>');
            callback ? callback (self) : null; // custom function
  				});
  			}
      }
    };
    return obj;
  },
  
  _window : function (self_class, window_class, callback, callback_submit, objn) {

    var _window = dom.byId (window_class);
    if (!_window) { return; }
    widget.window.init (_window, function(evt) {
      var editables = dom.byClassName (dom.byClassParent (evt.target, 'window'), "editable", 'textarea');
			for (var i = 0; i < editables.length; i++) {
		  	Editor._removeInstance (editables[i].name);
			}
    });

    var obj = {
      tag: 'a',
      nclass: self_class,
      prevent: true,
      handler: function(self, e) {
        var _this = self;
        var _objn = objn;

        widget.window.get_html (self.href, null, function(data, action) {
          if (!data) return false;

          widget.window.set (_window, data);

          // include submit form  -> FIXME 4 times append
    			if (callback_submit)
            _objn.push ({
              tag: 'button',
              name: 'submit',
              prevent: true,
              handler: function(self, e) {
                callback_submit (self, e, _window, _this);
              }
            });

					// custom function
          callback ? callback (_this, _window) : null;

					widget.window.show (_window);
					widget.center (_window);
				});
      }
    };

    return obj;
  }
  
}

// initialize Edit
function initEdit () {

  // ------- delete

  events.global.container.push (
    Edit._delete ('plugin_delete', "Are you sure you want to delete plugin", function(self) {
      html.remove (self.parentNode.parentNode);
  }));

  events.global.container.push (
    Edit._delete ('articlesidebar_delete', "Are you sure you want to delete article", function(self) {
      html.remove (self.parentNode.parentNode);
  }));

  events.global.container.push (
    Edit._delete ('delete_article', "Are you sure you want to delete article", function(self) {
      html.remove (self.parentNode.parentNode.parentNode);
  }));
  
  events.global.container.push (
    Edit._delete ('image_delete', "Are you sure you want to delete image", function(self) {
      html.remove (self.parentNode.parentNode);
  }));


	// ------------ edit

  var container = dom.byId ('container');
  var widgets = dom.byClassFirst (container, 'widgets');
  events.addGlobalHandler (widgets, 'click', events.global.windows);

	events.global.windows.push ({
    tag: 'a',
    nclass: "cancel",
    prevent: true,
    handler: function(self, e) {
      widget.hide (dom.byClassParent (self, 'window'));
      var editables = dom.byClassName (dom.byClassParent (self, 'window'), "editable", 'textarea');
			for (var i = 0; i < editables.length; i++) {
		  	Editor._removeInstance (editables[i].name);
			}
    }
  });

	events.global.windows.push ({
    tag: 'a',
    nclass: "select_plugin",
    prevent: true,
    handler: function(self, e) {
      var _window = dom.byClassParent (self, 'window');
      widget.window.get_html (self.href, null, function(data, action) {
				if (!data) return false;
        widget.window.set (_window, data);
			});
    }
  });
  
	events.global.container.push ({
    tag: 'button',
    nclass: "save_article",
    prevent: true,
    handler: function(self, e) {
      var _window = dom.byClassParent (self, 'window');

      var form = dom.byTagAncestor (self, 'form');
      Editor.updateContent (form, "editable");
      var params = ajax.getParams (form);
      
      widget.window.get_html (form.action, params, function(data, action) {
				if (!data) return false;
        widget.hide (_window);
  			widget.dialog.show ('Operation succeed', data, false);
			});
    }
  });

	events.global.container.push (Edit._window ('articlesidebar_add', 'window_addarticle',
    function(self, _window) {
      var editables = dom.byClassName (_window, "editable", 'textarea');
			for (var i = 0; i < editables.length; i++) {
		  	Editor.loadNewInstance (editables[i].name, 'Custom', '400', '');
			}
    },
    function(self, e, _window, _link) {
      var form = dom.byTagAncestor (self, 'form');
      var params = ajax.getParams (form);
			var editables = dom.byClassName (_window, "editable", 'textarea');

      params += "&" + editables[0].name + "=" + Editor.getContent(editables[0].name);
			widget.window.get_html (form.action, params, function(data, action) {
				alert(data);
			});
  }, events.global.windows));
  
	events.global.container.push (Edit._window ('articlesidebar_edit', 'window_addarticle',
    function(self, _window) {
      var editables = dom.byClassName (_window, "editable", 'textarea');
			for (var i = 0; i < editables.length; i++) {
		  	Editor.loadNewInstance (editables[i].name, 'Custom', '', '400', '');
			}
    },
    function(self, e, _window, _link) {
      var form = dom.byTagAncestor (self, 'form');
      var params = ajax.getParams (form);
			var editables = dom.byClassName (_window, "editable", 'textarea');

      params += "&" + editables[0].name + "=" + Editor.getContent(editables[0].name);
			widget.window.get_html (form.action, params, function(data, action) {
				alert(data);
			});
  }, events.global.windows));

  events.global.container.push (Edit._window ('plugin_edit', 'window_editplugin', null,
    function(self, e, _window, _link) {
      var form = dom.byTagAncestor (self, 'form');
      var params = ajax.getParams (form);
      // TODO validation
      widget.window.get_html (form.action, params, function(data, action) {
				if (data.indexOf('nochange') != -1) {
          widget.hide (_window);
  				widget.dialog.show ('Operation succeed', 'No changed plugin!', false);
        } else {
  				var plugin_pane = dom.byTagAncestor(_link, 'div');
  				var helper = document.createElement ('div');
  				helper.innerHTML = data;
  				html.insert (dom.byClassFirst (helper, 'plugin_pane', 'div'), plugin_pane, 'before');
  				html.remove (plugin_pane);
          widget.hide (_window);
  				widget.dialog.show ('Operation succeed', 'Done', false);
				}
			});
  }, events.global.windows));

  events.global.container.push (Edit._window ('plugin_add', 'window_addplugin', null,
    function(self, e, _window, _link) {
      var form = dom.byTagAncestor (self, 'form');
      var params = ajax.getParams (form);
      // TODO validation
      widget.window.get_html (form.action, params, function(data, action) {
        var dl = dom.byTagAncestor(self, 'dl');
        var plugin_panes = dom.byClassName (dl.parentNode, 'plugin_pane', 'div');
        var helper = document.createElement ('div');
				helper.innerHTML = data;
        //alert(helper.innerHTML);
        html.insert (dom.byClassFirst (helper, 'plugin_pane', 'div'), dl, 'after');
        //if (data.indexOf('done') != -1) {
          widget.hide (_window);
					//widget.dialog.show ('Operation succeed', data, true);
        //} else {
        //  widget.dialog.show ('Operation failed', data, false);
				//}
			});
  }, events.global.windows));

}