/*Libreria Ajax: Julio Ariel Pintos*/

function updateRemoteTime(url, target_update, target_loading, params, time){
	setTimeout("updateRemote('" + url + "', '" + target_update + "', '" + target_loading + "', '" + params + "')", time);
}

function updateRemote(url, target_update, target_loading, params){
	(target_update != '') ? document.getElementById(target_update).style.display = 'none' : false;
	(target_loading != '') ? document.getElementById(target_loading).style.display = 'block' : false;
	ajax.get(
	    url,
	    target_update,
	    params,
	    function(){
			if((target_loading != '') && (target_update != '')) {
				document.getElementById(target_loading).style.display = 'none';
				document.getElementById(target_update).style.display = '';
			}
		}
	);
}

var ajax = {
	XMLHttpRequest: function() {
  		try { return new XMLHttpRequest(); }
 		catch (e) { try { return new ActiveXObject('Msxml2.XMLHTTP'); }
  		catch (e) { try { return new ActiveXObject('Microsoft.XMLHTTP'); }
  		catch (e) { return false; }}}
  		return false;
	},
	
	get: function(rsRemote, tUpdate, oParams, fnDone) {
		return this.request('GET', rsRemote, tUpdate, oParams, fnDone);
	},
	
	post: function(rsRemote, tUpdate, oParams, fnDone) {
		return this.request('POST', rsRemote, tUpdate, oParams, fnDone);
	},
	
	request: function(sMethod, rsRemote, tUpdate, oParams, fnDone) {
		var oRequest = this.XMLHttpRequest();
		if (!oRequest) return true;
		var sParams = '';
		if(sMethod == 'GET') {
			//oRequest.open('GET', rsRemote[0]+this.params(oParams,'?'), true);
			/*mod_rewrite apache reescritura url para Cake*/
			oRequest.open('GET', rsRemote+this.params(oParams,'/'), true);
		}else{
			sParams = this.params(oParams,'');
			oRequest.open('POST', rsRemote, true);
      oRequest.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		}
    oRequest.setRequestHeader('Referer',window.location);
    
    oRequest.onreadystatechange = function() {
    	if (oRequest.readyState == 4 && oRequest.status == 200) {
    		if(typeof window.speReponseComplete == 'function') {
				//function que si esta definida se ejecuta al terminar la peticion por ajax
				speReponseComplete();
			}
    		if(fnDone)
				fnDone(oRequest);
    		if(tUpdate)
    			ajax.action(oRequest, tUpdate);
			}
    };
    
    oRequest.send(sParams);
		return false;
	},
	
	params: function(oParams,before) {
		var sParams = '';
		for(i in oParams) {
			if(sParams.length > 0) {
				sParams += '/';
			}
			//sParams += encodeURIComponent(i)+'='+encodeURIComponent(oParams[i]);
			/*mod_rewrite apache reescritura url para CakePHP*/
			sParams += encodeURIComponent(oParams[i]);
		}
		return before + sParams;
	},
	
	action: function(oRequest, container) {
		//alert(container);
		//switch(container[0]) {
		switch(container) {
        	case '^': 
        		container = container.replace(/^\^/,'');
        		if(!document.getElementById(container)) return false;
        		var update = document.getElementById(container).innerHTML;
        		document.getElementById(container).innerHTML = oRequest.responseText + update;
        		break;
        	case '+': 
        		container = container.replace(/^\+/,'');
        		if(!document.getElementById(container)) return false;
        		document.getElementById(container).innerHTML += oRequest.responseText;
        		break;
        	default: 
	        	if(!document.getElementById(container)) return false;
				document.getElementById(container).innerHTML = oRequest.responseText;
        }
	}
};
