var Updateable = Class.create();
Updateable.prototype = {
initialize: function(updateableElement,options) {
this.updateableElement = updateableElement;
this.elementId = updateableElement.id;
this.options = {
};
//replace default options
Object.extend(this.options, options || {});
//assign observer
var associatedAnchors = $$("a." + this.elementId);
this.assignClickObserver(associatedAnchors);
var associatedFormElements = $$("form." + this.elementId);
this.assignSubmitObserver(associatedFormElements);
},
onComplete: function(){
var aa = this.updateableElement.getElementsBySelector("a." + this.elementId);
this.assignClickObserver(aa);
Element.hide('loading');
var af = this.updateableElement.getElementsBySelector("form." + this.elementId);
this.assignSubmitObserver(af);
Element.hide('loading');
},
assignClickObserver: function(elements) {
elements.invoke( 'observe', 'click', this.updateContent.bindAsEventListener(this));
},
assignSubmitObserver: function(elements){
elements.invoke( 'observe', 'submit', this.updateFormResults.bindAsEventListener(this));
elements.each(function(form) {
form.submit = function(){ 
this.formSubmit(form); 
}.bind(this);
}.bind(this));
},
updateContent: function(event) {
Event.stop(event);
var target = Event.element(event);
new Ajax.Updater(this.updateableElement,target.href,{onComplete:this.onComplete.bind(this), parameters:{ajax:true} });
Element.show('loading');
},
updateFormResults: function(event) {
Event.stop(event);
this.formSubmit(Event.element(event));
Element.show('loading');
},
formSubmit: function(form){
var formHash = form.serialize(true);
formHash['ajax'] = true;
new Ajax.Updater(this.updateableElement,form.action,{onComplete:this.onComplete.bind(this), parameters:formHash});
}	
};
function aUniqueName() {
var updateables = $$('.updateable');
updateables.each(function(updateableElement) {
new Updateable(updateableElement);
});
}
Event.observe(window, 'load', aUniqueName);
