// JavaScript Document
var Component = {
	_dict:{},
	init:function(css_selector,classname,options,init_element){
		
		this._dict[css_selector]={classname:classname,options:options,init_element:init_element};
	},
	load:function(){
		_load=function(ce){
			$H(Component._dict).each(
				function(pair){
					classname = pair.value.classname;
					(!ce?$$(pair.key):Element.select(ce,pair.key)).each(function(e){
						if(!e.getcmp(classname)){
							if(Object.isFunction(pair.value.options)){
								options=pair.value.options(e);
							}else{
								options=pair.value.options;
							}
							if(pair.value.init_element){
								if(Object.isFunction(pair.value.init_element)){
									e=pair.value.init_element(e,options);
								}else{
									e=pair.value.init_element;
								}
							}
							e.regcmp(classname,new window[classname](e,options))
						}
					});
				}
			);
		}
		
		_load();
			
		Ajax.Responders.register({
			onComplete:function(t,r){
				if(ce=$(t.getHeader("x-componet-reload"))){
					_load(ce);
					document.fire("component:ajax-updated",{section_id:ce});
				}else{
					_load();
					document.fire("component:ajax-updated");
				}
			}.bind(this)
		});
		document.fire("component:loaded");
		
	}
};
document.observe("dom:loaded",Component.load);
