WM = {}


//set ajax functions
WM.http_request = Array(0,1);
WM.s = {
	AjaxRequest : function(id) {
		WM.http_request[id] = false;
		//Use IE's ActiveX items to load the file.
		if(typeof ActiveXObject != 'undefined') {
			try {WM.http_request[id] = new ActiveXObject("Msxml2.XMLHTTP");}
			catch (e) {
				try {WM.http_request[id] = new ActiveXObject("Microsoft.XMLHTTP");}
				catch (E) {WM.http_request[id] = false;}
			}
		//If ActiveX is not available, use the XMLHttpRequest of Firefox/Mozilla etc. to load the document.
		} else if (XMLHttpRequest) {
			try {WM.http_request[id] = new XMLHttpRequest();}
			catch (e) {WM.http_request[id] = false;}
		}
		return WM.http_request[id];
	},
	ajax : function(parameters) {

	var process_id=WM.http_request.length;
	WM.http_request[process_id] = WM.AjaxRequest(process_id);
		var defaults = {
			method: 'post',
			url: './',
			parameters: '',
			callback : function() { }
		}

		options = WM.s.extend(defaults, parameters);

                if(WM.s.start) {
                    WM.s.start();
                }

		if(options.method == 'get') {
			zn = options.url.indexOf('?') !== false ? '&' : '?'
			WM.http_request[process_id].open("GET", options.url+zn+options.parameters, true);
			WM.http_request[process_id].onreadystatechange = function() {
			if(WM.http_request[process_id].readyState == 4 && WM.http_request[process_id].status == 200) {

                                if(options.callback) {
					options.callback(WM.http_request[process_id].responseXML);
					}
                                    if(WM.s.end) { WM.s.end(); }
				}
			};
			WM.http_request[process_id].send(null);
		} else {
			WM.http_request[process_id].open("POST", options.url, true);
			WM.http_request[process_id].setRequestHeader("Content-type", "application/x-www-form-urlencoded");
			WM.http_request[process_id].setRequestHeader("Content-length", options.parameters.length);
			WM.http_request[process_id].setRequestHeader("Connection", "close");
			WM.http_request[process_id].onreadystatechange = function() {
			if(WM.http_request[process_id].readyState == 4 && WM.http_request[process_id].status == 200) {

                                if(options.callback) {
					options.callback(WM.http_request[process_id].responseXML);
					}
                                    if(WM.s.end) { WM.s.end(); }
				}
			};
			WM.http_request[process_id].send(options.parameters);
		}
	},
	param : function(formdata, numeric_prefix, arg_separator) {
		var key, tmp = [],
		_http_build_query_helper = function (key, val, arg_separator) {
			var k, tmp = [];
			if (val === true) {            val = "1";
			}
			else if (val === false) {
				val = "0";
			}        if (typeof(val) == "array" || typeof(val) == "object") {
				for(k in val) {
					if(val[k] !== null) {
						tmp.push(_http_build_query_helper(key + "[" + k + "]", val[k], arg_separator));
					}            }
				return tmp.join(arg_separator);
			}
			else if(typeof(val) != "function") {
				return encodeURIComponent(key) + "=" + encodeURIComponent(val);        }
		};
		if (!arg_separator) {
			arg_separator = "&";
		}    for (key in formdata) {
			if (numeric_prefix && !isNaN(key)) {
				key = String(numeric_prefix) + key;
			}
			tmp.push(_http_build_query_helper(key, formdata[key], arg_separator));    }
		return tmp.join(arg_separator);
	},

	extend : function(def, opt) {
		var options = {}
		for(var key in def) {
			options[key] = typeof opt[key] !== 'undefined' ? opt[key] : def[key];
		}
		return options;
	},
	post : function(url, params, handler) {
		if(typeof params == 'function') {
			handler = params;
			params = {};
		}

		if ( params && typeof params !== "string" ) {
			params = WM.param(params); }
			params+='&'+(new Date().getTime());

		return WM.ajax({url: url, callback: handler,parameters: params,method:'post'});

	},
	get : function(url, params, handler) {
		if(typeof params == 'function') {
			handler = params;
			params = {};
		}

		if ( params && typeof params !== "string" ) {
			params = WM.param(params); }
			params+='&'+(new Date().getTime());

		return WM.ajax({url: url, callback: handler,parameters: params,method:'get'});

	}
}
WM.AjaxRequest=WM.s.AjaxRequest;
WM.ajax = WM.s.ajax;
WM.get = WM.s.get;
WM.post = WM.s.post;
WM.param = WM.s.param;
