var XHR_ERROR = false;

var AXRequest = new Class({
	'METHOD_GET': 'get',
	'METHOD_POST': 'post',
	
	'loadedScriptsArrayLength': 0,
	'loadingLayer': 0,
	'idleAJAXRequests': new Array(),

	'getHTTP': function( callUri, paramValues, callMethod ){
	
    	if( XHR_ERROR ) return;
    	
		if( typeof(paramValues) == 'undefined' ) paramValues = new Object()
		paramValues[ utils.config.session_name ] = utils.config.session_id;

		if( typeof(get) == 'undefined' ) callMethod = this.METHOD_GET;

		returnValue = false;
		completeFunction = function( result, xml ){
			returnValue = result;
			return false;
		};
		
		myHTTPRequest = new Request( { url:callUri, method:callMethod, async:false, data:paramValues, onComplete:completeFunction } );
		
		if( typeof( myHTTPRequest.xhr.open ) == 'undefined' ){
			XHR_ERROR = true;
			return;
		}

		myHTTPRequest.send();

		return returnValue;
	},
	'getAJAX': function( callValue, paramValues, sync, pointer ){

    	if( XHR_ERROR ) return;

		myJSONRequest = false;

		if( this.idleAJAXRequests.length <= 0 ){
			params = new Object();
			params[ 'url' ] 	= utils.config.framework_data_url;
			params[ 'onComplete' ] = function( result, xml ){
				this.AXValue = this.AXInstance.getCompleteAJAX( result );
				if( this.AXPointer == true ){
					this.AXInstance.hideLoading();
				}
				this.AXInstance.idleAJAXRequests.push( this );
				return false;
			};
			myJSONRequest = new Request.JSON( params );
			myJSONRequest.AXInstance = this;
			
			if( typeof( myJSONRequest.xhr.open ) == 'undefined' ){
				XHR_ERROR = true;
				return;
			}
		}
		else{
			myJSONRequest = this.idleAJAXRequests.pop();
		}

		myJSONRequest.AXValue = true;

		if( typeof(pointer) == 'undefined' ){
			myJSONRequest.AXPointer = false;
		}
		else{
			this.displayLoading();
			myJSONRequest.AXPointer = true;
		}

		if( typeof(sync) == 'undefined' ){
			myJSONRequest.options.async = true;
		}
		else{
			myJSONRequest.options.async = false;
		}

		params = new Object();
		params[ 'callValue' ] = callValue;
		params[ 'paramValues' ] = paramValues.parameters;
		params[ 'lastValue' ] = paramValues.lastValue;
		params[ 'token' ] = paramValues.token;
		params[ 'userID' ] = utils.config.user_id;
		params[ 'sessionName' ] = utils.config.session_id;

		myJSONRequest.post( params );

		return myJSONRequest.AXValue;
	},
	'getCompleteAJAX': function ( result ){
		retValue = true;

		if( result ){
			obj = this;
			for( jobs in result ){
				switch( jobs ){
					case 'value':
						retValue = result['value'];
						break;
					case 'assigns':
						result['assigns'].each(function(argument, index){ obj.processAssigns( argument ); });
						break;
					case 'functions':
						result['functions'].each(function(argument, index){ obj.processFunctions( argument ); });
						break;
					case 'scripts':
						result['scripts'].each(function(argument, index){ obj.processScripts( argument ); });
						break;
					case 'includes':
						result['includes'].each(function(argument, index){ obj.processIncludes( argument ); });
						break;
					case 'css':
						result['css'].each(function(argument, index){ obj.processCSS( argument ); });
						break;
					default:
						break;
				}
			}
		}

		return retValue;
	},
	'processScripts': function( args ){
		eval( args );
	},
	'processCSS': function( args ){
		cssLinks = $(document).getElements('link');

		cssLinks.each(function(argument, index){

			if( argument.href.indexOf( args ) >= 0 ) return;
		});
		head = $(document).getElement('head');
		cssLink = $(document).createElement('link');
		cssLink.rel = 'stylesheet';
		cssLink.type = 'text/css';
		cssLink.href = args;
		head.appendChild(cssLink);
	},
	'processIncludes': function( args ){
		scripts = $(document).getElements('script');

		scripts.each(function(argument, index){

			if( argument.src.indexOf( args ) >= 0 ) return;
		});

		head = $(document).getElement('head');
		script = $(document).createElement('script');
		script.type = 'text/javascript';
		script.src = args;
		head.appendChild(script);
		this.loadedScriptsArrayLength = this.loadedScriptsArrayLength + 1;
	},
	'processAssigns': function( args ){
		if( element = $( args[0] ) ){
			switch( args[1] ){
				case 'innerHTML':
					element.innerHTML = args[2];
					break;
				default:
					//alert( args );
					break;
			}
		}
	},
	'processFunctions': function( args ){
		var scr = new Array();

		func = args.shift();

		if( 'function' == typeof (window[func]) ){
			scr.push( func );
			scr.push('(');
	
			var arg_r = new Array();
			args.each(function(argument, index){
				arg_r.push( "args["+index+"]" );
			});
			scr.push( arg_r.join(',') );
			scr.push(');');
			eval(scr.join(''));
		}
		else{
			//alert(func+' not found');
		}

		return true;
	},
	'displayLoading': function() {
		this.loadingLayer++;
		if( this.loadingLayer == 1 ){
			if( $(document).body ) $(document).body.style.cursor = 'wait';
		}
	},
	'hideLoading': function() {
		this.loadingLayer--;
		if( this.loadingLayer == 0 ){
			if( $(document).body ) $(document).body.style.cursor = 'auto';
		}
	},
	'isFinishLoading': function(){
		return true;
	}
});

var request = new AXRequest();



