Ajax2 = {

    addon_str : '',

    Detect      : function() {
                    var xml_http;

                        try { xml_http = new XMLHttpRequest(); }
                        catch ( error ) {   
                                try { xml_http = new ActiveXObject("Microsoft.XMLHttp"); }
                                catch ( error ) { alert("Your browser doesn't support Ajax, please make an upgrade ( should have done it over ten years ago )."); return false; }
                        }

                    return xml_http;
    },
    

    Build : function( str ) {

                var parts = str.split(/&(?=[a-zA-Z0-9]+\=)/);

                    for ( var i = 0, li = parts.length; i < li; i++ ) {
                        
                        var index = parts[i].indexOf('=') + 1;
  
                            if (index > 0) { parts[i] = parts[i].substring(0, index) + escape( parts[i].substring(index) ); }

                    }

                  return ( parts.join("&") );
    },


	Send : function( setOptions ) {

                if ( setOptions != null ) {
		            setOptions = {

                        baseURL : function() { return setOptions.protocol +"//"+ location.href.split("/")[2] +"/controllers/"+ setOptions.target_list[ setOptions.target ]; },

			            //pre-defined but overridable
			            target_list  : [ 'ajax_1.asp', 'ajax_2.asp', 'ajax_3.asp', 'ajax_4.asp', 'ajax_5.asp', 'ajax_6.asp' ],
			            protocol 	 : ( 'protocol'     in setOptions ) ? setOptions.protocol : location.protocol,
			            method 		 : ( 'method'       in setOptions ) ? setOptions.method : 'POST',
			            async 		 : ( 'async'        in setOptions ) ? setOptions.async : true,
			            mime_type 	 : ( 'mime_type'    in setOptions ) ? setOptions.mime_type : 'text/html',
			            content_type : ( 'content_type' in setOptions ) ? setOptions.content_type : 'application/x-www-form-urlencoded',
			            target 		 : ( 'target'       in setOptions ) ? setOptions.target : 0,

                        str 	 : ( 'str'      in setOptions ) ? Ajax2.Build( setOptions.str ) : null,

			            queue 	 : ( 'queue'    in setOptions ) ? setOptions.queue : false,
			            chain 	 : ( 'chain'    in setOptions ) ? setOptions.chain : null,
			            selector : ( 'selector' in setOptions ) ? setOptions.selector : null,
			            msg      : ( 'msg'      in setOptions ) ? setOptions.msg : null,

			            fn : ( 'fn' in setOptions ) ? setOptions.fn : false
		            };

                    //if a function was specified, run it before we send
		            if ( setOptions.fn ) { setOptions.fn(); }

		            //detect support and go
		            xml_http = Ajax2.Detect();

			            if ( xml_http.overrideMimeType ) { xml_http.overrideMimeType( setOptions.mime_type ); }

		            xml_http.open( setOptions.method, setOptions.baseURL(), setOptions.async );
		            xml_http.onreadystatechange = function() { Ajax2.Response( setOptions.target_list[ setOptions.target ], setOptions.selector, setOptions.msg, setOptions.chain ) };
		            xml_http.setRequestHeader( "Content-type", setOptions.content_type );
		            xml_http.send( setOptions.str );

		                Ajax2.addon_str = '';
            }
	},


	Response : function( target, selector, msg, chain ) {

					if (xml_http.readyState == 1) {  }
					if (xml_http.readyState == 2) {  }
					if (xml_http.readyState == 4) {

						if (xml_http.status == 200) {

						    var target = new Function( "json, selector, msg, chain", "return "+ target.split('.')[0] +"(json, selector, msg, chain);" );
						        target( xml_http.responseText, selector, msg, chain );

						}
					}
	}
}
