var divLoader = new Class({
	Implements: [Options,Events],
	options: {
		'url':null,
		'loading':'loader_p.gif', 
		'method':'post', // get,post
		'data':null, // dados do post ou get ex.: &key=value
		'div':null,
		'mode':'update' // update, append
	},
	busy: false,
	success: false,
	initialize: function(options) {
		this.setOptions(options);		
	},
	send: function(data) {
		if (data!=null)
			this.options.data=data;
		if (this.busy==false && this.options.div!=null) {
			var options = {
				'url':this.options.url,
				onRequest: function() {
					if ($(this.options.div).getStyle('display')=='none')
						$(this.options.div).setStyle('display','block');
					if (this.options.loading!=false) {
						if (this.options.mode=='update')
							$(this.options.div).empty();
						this.loading = new Element('div',{'class':'divLoader_loading'}).inject($(this.options.div),'top');
						new Element('img',{'src':PATH_IMG+this.options.loading}).inject(this.loading);
						
						this.loading.position({'position':'center','relativeTo':$(this.options.div)});
						
					}
					this.busy=true;
					this.success=false;
					this.fireEvent('onRequest');	
				}.bind(this),
				onSuccess: function(responseTree, responseElements, responseHTML, responseJavaScript) {
					if (this.options.mode.toLowerCase()=='append') this.loading.dispose();
					this.busy=false;
					this.success=true;
					this.fireEvent('onSuccess');	
				}.bind(this),
				onFailure: function() {
					if (this.options.mode.toLowerCase()=='append') this.loading.dispose();
					this.busy=false;
					this.success=false;
					this.fireEvent('onFailure');	
				}.bind(this)
			}
			switch (this.options.mode.toLowerCase()) {
				case 'update':
					options.update = $(this.options.div);
					break;
				case 'append':
					options.append = $(this.options.div);
					break;
			}
			var ajaxReq = new Request.HTML(options).send(this.options.data);
		}
	}
});

Element.implement({
	divLoaderAttach: function() {
		var el = $(this);
		var tag = el.get('tag');
		if (tag=='a' || tag=='form') {
			var options = el.get('divLoader');
			if (options!=null) {
				options = JSON.decode(options);
				if (options.name!=null) {
					var data = 'divLoader_'+options.name;
					if (tag=='form') {
						options.url=el.get('action');
						options.method = el.get('method');
					}
					if ($(options.div).retrieve(data)==null) {
						$(options.div).store(data,new divLoader(options));
					}
					
					if (tag=='a') {
						// tags a
						if (options.click_event!=false) {
							el.addEvent('click',function(e){
								e.stop();
								var options = JSON.decode(el.get('divLoader'));
								$(options.div).retrieve('divLoader_'+options.name).send();
							}.bind(this));
						}
						if (options.autoload==true) {
							$(options.div).retrieve('divLoader_'+options.name).send();
						}
					} else if (tag=='form') {
						// tags form
						if (options.submit_event!=false) {
							el.addEvent('submit',function(e){
								var passa=true;
								if (el.get('onsubmit')!=null) {
									if (document.MM_returnValue!=true) {
										passa=false;
									}
								}
								if (passa) {	
									e.stop();
									var options = JSON.decode(el.get('divLoader'));
									$(options.div).retrieve('divLoader_'+options.name).send(el);
								}
							});
						}
					}
				}
			}
		}
	}
});


window.addEvent('domready',function() {
	$$('a[divLoader],form[divLoader]').divLoaderAttach();
//	divLoaderEvents();
});

