// JavaScript Document
Ajax.QI_Request = Class.create();					
Ajax.QI_Request.prototype = {
	initialize: function(url, options) {
		this.url = url;
		this.options = options || {};
		this.loadProgress_element_loading 	= this.options.loadProgress_element_loading || 'ajax_loading_request'; //id of the element
		this.hide_loadProgress_when_finished = this.options.hide_loadProgress_when_finished || "yes"; //if we want the default to be true we can not do this: this.options.hide_loadProgress_when_finished || true; because if user tries to pass false that will set the value to true.
				
		this.loadProgress_element_completed = this.options.loadProgress_element_completed || 'ajax_loading_request_done'; //id of the element
		this.showLoadProgress 		= this.options.showLoadProgress || false;		
		if(this.options.showLoadProgress){
			$(this.loadProgress_element_loading).innerHTML = this.options.loadProgress_html_loading || 'Processing your request';
			$(this.loadProgress_element_completed).innerHTML = this.options.loadProgress_html_completed || 'Done';
		}
		
		//this is a trick to override a funtion while we save functionalities of the original function							
		var onComplete = this.options.onComplete || Prototype.emptyFunction;
		this.options.onComplete = (function(request) {
			if(this.showLoadProgress){
				//document.getElementById('img_load_status').src = '/qi/www/images/LOAD_FINISHED.gif';
				
				/*hide(this.loadProgress_element_loading);
				show(this.loadProgress_element_completed);
				setTimeout("hide('" + this.loadProgress_element_completed + "');",1000);*/
				if(this.hide_loadProgress_when_finished == "yes"){
					Effect.Fade(this.loadProgress_element_loading);
					//hide(this.loadProgress_element_loading);
				}
				Effect.Appear(this.loadProgress_element_completed);
				//hide(this.loadProgress_element_completed);
				Effect.Fade(this.loadProgress_element_completed, {duration:3.5});
				clearInterval(progress_interval);
			}							  
			onComplete(request);
		}).bind(this);
		
		var onLoading = this.options.onLoading || Prototype.emptyFunction;
		this.options.onLoading = (function(request) {								
			if(this.showLoadProgress){
				//document.getElementById('img_load_status').src = 'images/LOADING.gif';
				Effect.Appear(this.loadProgress_element_loading);
				Effect.Fade(this.loadProgress_element_completed);
				
				progress_interval = setInterval(" try{ $(" + this.loadProgress_element_loading + ").innerHTML += '.'; }catch(e){ $('" + this.loadProgress_element_loading + "').innerHTML += '.'; }" ,800);
				//setTimeout(''
			}						  
			onLoading(request);
		}).bind(this);
		
		this.options = Object.extend({
					asynchronous: true,
					on404: function(t) {
						alert('Error 404: location "' + t.statusText + '" was not found.');			
					},
					onFailure: function(t) {
						alert('Error ' + t.status + ' -- ' + t.statusText);
						if($('debug')){
							$('debug').innerHTML = t.responseText;
						}
					}
		}, options);
		
		new Ajax.Request(this.url,this.options);							
	}
}