
if (typeof MVD === 'undefined') {
	MVD = {};
}

MVD.Ajax = function() {

	var getXMLHttpObject = function () {
		var ret = false;
	    if (window.XMLHttpRequest) {
	        ret = new XMLHttpRequest ();
			if(ret.readyState === null){
					ret.readyState = 1;
					ret.addEventListener('load', function(){
						ret.readyState = 4;
						if( typeof (ret.onreadystatechange) === 'function') {
							ret.onreadystatechange();
						}
					}, false);
			}
	    } else if (window.ActiveXObject) {
	        try { ret = new ActiveXObject ("Msxml2.XMLHTTP"); }
	        catch (e)
	        { try { ret = new ActiveXObject ("Microsoft.XMLHTTP"); }
	          catch (e2) { }
	        }
	    }
	    return ret;
	};
	
	var prefix = '';
	var ext = '.aspx';

	var encode = encodeURIComponent;
	
	var newXmlHttp = function (onComplete, onError) {
		var xmlHttp = getXMLHttpObject();
		if (xmlHttp) {
			xmlHttp.onreadystatechange = function () {
				if (xmlHttp.readyState == 4 || xmlHttp.readyState=="complete") {
					var res_status = 0;
					try {
						res_status = xmlHttp.status;
					} catch(e) {}
					if ((res_status >= 200) && (res_status < 300)) {
						if(onComplete) {
							onComplete(xmlHttp.responseText);
						}
					} else {
						if(onError) {
							onError(xmlHttp.responseText);
						}
					}
				}
			};
		}
		return xmlHttp;
	};

	var doGet = function (url, onComplete, onError) {		
		var xmlHttp = newXmlHttp(onComplete, onError);
		if (xmlHttp) {				
			xmlHttp.open ('GET', url, true);											
			// Evitar cache en IE
			xmlHttp.setRequestHeader( "If-Modified-Since", "Sat, 1 Jan 2000 00:00:00 GMT" );
			xmlHttp.send (null);
		}
	};

	var doPost = function(url, parms, onComplete, onError ) {
		var xmlHttp = newXmlHttp(onComplete, onError);
		if (xmlHttp) {			
			xmlHttp.open ('POST', url, true);
			xmlHttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
			var qstr = '';
			for (var parm in parms) if (parms.hasOwnProperty(parm)) {
				if (qstr) {
					qstr += '&';
				}
				qstr += parm + '=' + encode(parms[parm]);
			}
			xmlHttp.send (qstr);
		}
	};

	return {
			
			get: doGet,
			getGX : function (url, params, onComplete, onError) {
				doGet(prefix + url + ext + '?' + params, onComplete, onError);
			},		
			post: doPost,			
			postGX : function (url, params, onComplete, onError) {
				doPost(prefix + url + ext, params, onComplete, onError);
			},
			
			setEncode: function(enc) {
				encode = (enc == 'UTF8') ? encodeURIComponent : escape;
				return this;
			},
			setPrefix : function(p) {
				prefix = p;
				return this;
			},
			setExt : function(e) {
				ext = e;
				return this;
			}			
		};
}();

// Backcompatibility
var jxcll = MVD.Ajax.get;
var jxcllPost = MVD.Ajax.post;

