Codebase.load("http://codebase.gd-ks.com/js/Event.js");
Codebase.load("http://codebase.gd-ks.com/js/Ajax.js");
Codebase.load("http://codebase.gd-ks.com/js/Element.js");
Codebase.load("http://codebase.gd-ks.com/js/DOM.js");
Codebase.load("http://codebase.gd-ks.com/js/Enumerable.js");
Codebase.load("http://codebase.gd-ks.com/js/RTE.js");
Codebase.load("http://codebase.gd-ks.com/js/Style.js");

var EIP={
   
   elementBeingEdited: null,
   singeltonRTE: null, 
   
   PutURL: "/file_put_contents.php", 
   
   load: function(el)
         {
            el.innerHTML=Ajax.Request({"url":el.title, "async":false}).responseText;
         },
         
   edit: function(e)
         {
            var target=Event.getTarget(e);
            
            while(!Element.classNameExists(target, "flag_eip") && target.parentNode)
               target=target.parentNode;
            
            if(EIP.elementBeingEdited && EIP.elementBeingEdited._isBeingEdited && EIP.elementBeingEdited!=target)
            {
               if(confirm("You have unsaved changes.  Would you like to save them?"))
               {
                  EIP.save();
               }
               else
               {
                  EIP.cancel();
               }
            }
            
            if(Element.classNameExists(target, "flag_eip") && (!target._isBeingEdited))
            {
               EIP._showIsEditable(target, false);
               
               EIP.elementBeingEdited=target;
               
               EIP.singletonRTE=new RTE(EIP.elementBeingEdited, RTE.TOOLSET_STANDARD);
               
               target._isBeingEdited=true;
               
               DOM.insert(EIP.singletonRTE._footerContainer, $E("a", {"style":"font-size:10pt; padding-right:5px;", "href":"javascript:void(0);", "onclick":"EIP.cancel();", "innerHTML":"Cancel"}));
               DOM.insert(EIP.singletonRTE._footerContainer, $E("a", {"style":"font-size:10pt; padding-left:5px;", "href":"javascript:void(0);", "onclick":"EIP.save(event);", "innerHTML":"Save"}));
            }
            
            delete target;
         },
         
   save: function(e)
         {
            Ajax.Request({"url":EIP.PutURL, 
                          "method":"POST", 
                          "data":{"file_path":EIP.elementBeingEdited.title, "content":encodeURIComponent(EIP.singletonRTE.getHTML())}, 
                          "async":false, 
                          "onSuccess": function(){ alert("Changes were saved successfully."); }, 
                          "onError": function(){ alert("There was an error while attempting to save the changes."); }});
         
            EIP.cancel();
         },
         
   cancel: function()
           {
              EIP.singletonRTE.destroy();
              
              EIP.load(EIP.elementBeingEdited);

              EIP.elementBeingEdited._isBeingEdited=false;
              
              EIP._showIsEditable(EIP.elementBeingEdited, true);
              
              EIP.elementBeingEdited=null;
           },
           
   _showIsEditable: function(el, isEditable)
                    {
                       if(isEditable)
                       {
                          Style.setAttributes(el, {"border":"1px dotted red"});
                          Element.addClassName(el, "eip_editable");
                       }
                       else
                       {
                          Style.setAttributes(el, {"border":"0px dotted red"});
                          Element.removeClassName(el, "eip_editable");
                       }
                    },
   
   init: function()
         {
            Enumerable.map($$(".flag_eip"), function(el){ el._isBeingEdited=false; EIP.load(el); });
         },
         
   enable: function()
           {
              Enumerable.map($$(".flag_eip"), function(el)
                                              {
                                                 EIP._showIsEditable(el, true);

                                                 Event.observe(el, "click", function(e){ EIP.edit(e); });
                                              });
           },
           
   disable: function()
            {
               Enumerable.map($$(".flag_eip"), function(el)
                                               {
                                                  EIP._showIsEditable(el, false);

                                                  Event.removeObserver(el, "click", EIP.edit);
                                               });
            }
};

Event.observe(window, "load", EIP.init);