/**
* Librerias Javascript - AJAX
* @author Jorge Casas [jorgecasas@iternova.net]
* @version 2.1.0 - 20100920
* @package libs/ajax
* @link https://wiki.iternova.net/doku.php?id=smartportal:modules:libs:ajax_ajax  
**/

/**
 * Funciones para interpretar codigo javascript cargado mediante AJAX
 */

var sp_tagScript = '(?:<script.*?>)((\n|\r|.)*?)(?:<\/script>)';
String.prototype.sp_evalScript = function(){return (this.match(new RegExp(sp_tagScript, 'img')) || []).sp_evalScript();};
String.prototype.sp_stripScript = function(){return this.replace(new RegExp(sp_tagScript, 'img'), '');};
String.prototype.sp_extractScript = function(){var matchAll = new RegExp(sp_tagScript, 'img');return (this.match(matchAll) || []);};
Array.prototype.sp_evalScript = function(extracted){var s=this.sp_map(function(sr){var sc=(sr.match(new RegExp(sp_tagScript, 'im')) || ['', ''])[1];window.setTimeout(sc,0);});return true;};
Array.prototype.sp_map = function(fun){if(typeof fun!=="function"){return false;}var i=0,l=this.length;for(i=0;i<l;i++){fun(this[i]);}return true;};  

function T$(i){return document.getElementById(i)}
/** XHConn - Simple XMLHTTP Interface - 20050408 **/
function XHConn(){var xmlhttp, bComplete = false;try{xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");}catch(e){try{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}catch(e){try{xmlhttp = new XMLHttpRequest();}catch(e){xmlhttp = false;}}}if (!xmlhttp) return null;this.connect = function(sURL, sMethod, sVars, fnDone){if (!xmlhttp) return false;bComplete = false;sMethod = sMethod.toUpperCase();try{if (sMethod == "GET"){xmlhttp.open(sMethod, sURL+"?"+sVars, true);sVars = "";}else{xmlhttp.open(sMethod, sURL, true);xmlhttp.setRequestHeader("Method", "POST "+sURL+" HTTP/1.1");xmlhttp.setRequestHeader("Content-Type","application/x-www-form-urlencoded");}xmlhttp.onreadystatechange = function(){if (xmlhttp.readyState == 4 && !bComplete){bComplete = true;fnDone(xmlhttp);}};xmlhttp.send(sVars);}catch(z){return false;}return true;};return this;}
/**
 * Enviar GET a url usando AJAX. Resultados en target div
 */
function cargar_contenido_div(target,url,showloading){
	if (typeof(showloading)=="undefined" || showloading=="true"){
		T$(target).innerHTML = '<div class=\"padding5px\"><img src=\"images/ajaxloading.gif\" alt=\"+\" class=\"floatleft\" /> Cargando...</div>';
	}
	var myConn = new XHConn();
	if (!myConn) alert("XMLHTTP no disponible. Use un navegador reciente");
	var endc = function (oXML){var scs = oXML.responseText.sp_extractScript();T$(target).innerHTML = oXML.responseText;if(Cufon!=undefined) Cufon.refresh(); scs.sp_evalScript();};
	myConn.connect(url,"GET","",endc);
}
/**
 * Envia vars de formulario por POST
 */
function ajax_send_post(url,paramkey,paramvalue){var myConn = new XHConn();if (!myConn) alert("XMLHTTP no disponible. Use un navegador reciente");var finalizado = function (oXML) {var scs = oXML.responseText.extractScript();if(Cufon!=undefined) Cufon.refresh();scs.evalScript();};	myConn.connect(url, "POST", "&" + paramkey + "=" + paramvalue, finalizado);}
/**
 * Envia POST a url un campo con id == campoid usando AJAX, mostrando resultados en div. Puede chocar con textarea
 */
function cargar_contenido_div_post(target,url,div,campoid,showloading){
	if (typeof(showloading)=="undefined" || showloading=="true"){
		T$(target).innerHTML = '<div class=\"padding5px\"><img src=\"images/ajaxloading.gif\" alt=\"+\" class=\"floatleft\" /> Cargando...</div>';
	}
	var myConn = new XHConn();
	if (!myConn)alert("XMLHTTP no disponible. Use un navegador reciente");
	var valorcampo = getRadioButtonSelectedValue(T$(campoid));
	var finalizado = function (oXML){var scs = oXML.responseText.sp_extractScript(); T$(target).innerHTML = oXML.responseText;if(Cufon!=undefined) Cufon.refresh();scs.sp_evalScript();};
	myConn.connect(url, "POST", "divID=" + div + "&codeID=" + valorcampo, finalizado);
}
/**
 * Enviar POST a url varios campos de formulario con id == idFormulario usando AJAX, mostrando resultados en div. Puede chocar con textarea
 */
function cargar_contenido_array_post(div,url,idFormulario,showloading){
	if (typeof(showloading)=="undefined" || showloading=="true"){
		T$(div).innerHTML = '<div class=\"padding5px\"><img src=\"images/ajaxloading.gif\" alt=\"+\" class=\"floatleft\" /> Cargando...</div>';
	}
	var myConn=new XHConn();
	if (!myConn) alert("XMLHTTP no disponible. Use un navegador reciente");
	var salida="";
	var param_value=undefined;
	var formulario=T$(idFormulario);
	for (var i=0;i<formulario.elements.length;i++) {
		param_value = getRadioButtonSelectedValue(formulario.elements[i]);
		if (param_value != undefined) salida+="&"+formulario.elements[i].id+'='+encodeURI(param_value);
	}
	var finalizado = function (oXML){var scs = oXML.responseText.sp_extractScript();T$(div).innerHTML = oXML.responseText;if(Cufon!=undefined) Cufon.refresh(); scs.sp_evalScript();};
	myConn.connect(url, "POST", "divID=" + div + "&"+salida, finalizado);
}
function reloadDivPeriodically(divtarget,ajaxurl,refresh,showloading){if(refreshIdVM){clearTimeout(refreshIdVM);refreshIdVM=0;}cargar_contenido_div(divtarget,ajaxurl,showloading);if(Cufon!=undefined) Cufon.refresh();refreshIdVM = setTimeout('cargar_contenido_div(\''+ divtarget+ '\',\''+ ajaxurl +'\',\''+showloading+'\'); reloadDivPeriodically(\''+ divtarget+ '\',\''+ ajaxurl +'\','+refresh+',\''+showloading+'\');', refresh);}
function loadIframe(iframeName, url){if ( window.frames[iframeName]){window.frames[iframeName].location = url;return false;}return true;}
function get_url_param(name){name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");var regexS = "[\\?&]"+name+"=([^&#]*)";var regex = new RegExp( regexS );var results = regex.exec( window.location.href );if(results==null)return "";else return results[1];}
function checkAll(field){var numElements=field.length;if(numElements == undefined) field.checked=true;else{for (i = 0; i < numElements; i++) field[i].checked = true;}}
function uncheckAll(field){var numElements=field.length;if(numElements == undefined) field.checked=false;else{for (i = 0; i < numElements; i++) field[i].checked = false;}}
function changeAll(field,fieldHijo){if (field.checked==true) checkAll(fieldHijo);else uncheckAll(fieldHijo);}
function showcontent(id,is_tr){var e = T$(id); if (is_tr)  e.style.display = 'table-row'; else e.style.display = "block";}
function hidecontent(id){T$(id).style.display="none";}
function toggle_visibility(id,is_tr){var e = T$(id);if(e.style.display=='table-row' || e.style.display=='block') e.style.display='none';else if(is_tr) e.style.display='table-row'; else e.style.display='block';}
function toggle_enabled(f){if(!(f instanceof Array)) f=[f]; for(var i=0;i<f.length;i++) T$(f[i]).disabled = !T$(f[i]).disabled;}
function getRadioButtonSelectedValue(ctrl){if(ctrl.length==undefined && ctrl.type!='radio' && ctrl.type!='checkbox'){return ctrl.value;} if (ctrl.selectedIndex != undefined){return ctrl.value;} if ((ctrl.type=='checkbox' || ctrl.type=='radio') && ctrl.checked){return ctrl.value;} if(ctrl.length!=undefined){for(i=0;i<ctrl.length;i++){if(ctrl[i].checked) return ctrl[i].value;}} return undefined;}
function getCheckBoxChecked(ctrl){if(ctrl.checked) return '1';else return '0';}
function ajaxFadeEffect(element){new Effect.Fade(element,{duration:1});}
function ajaxAppearEffect(element){new Effect.Appear(element,{duration:1});}
function confirmacion(url,question,answerok){var r=confirm(question); if (r==true){alert(answerok);location.href=url;}}
function getURLparam(param){ param=param.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");var regexS = "[\\?&]"+param+"=([^&#]*)";var regex=new RegExp( regexS ); var results = regex.exec( window.location.href ); if( results == null ) return ""; else return results[1];}
function field_plus(id, minValue, maxValue){var current=parseInt(T$(id).value);if(isNaN(current)){T$(id).value=1;}else{if(current<maxValue) T$(id).value++;}}
function field_minus(id, minValue, maxValue){var current=parseInt(T$(id).value);if(isNaN(current)){T$(id).value=1;}else{if(current>minValue) T$(id).value--;}}
function checkUncheckAll(state,grp){if(T$(grp).childNodes.length>0){for(i=0;i<T$(grp).childNodes.length;i++){if(T$(grp).childNodes[i].name!=undefined) T$(grp).childNodes[i].checked=state.checked;}}else{grp.checked=state.checked;}}
function cookie_set(name,value){document.cookie=name+"="+value+"; path=/";}
function cookie_get(name){var nameEQ=name+"=";var ca=document.cookie.split(';');for(var i=0;i<ca.length;i++){var c=ca[i];while(c.charAt(0)==' ')c=c.substring(1,c.length);if(c.indexOf(nameEQ)==0)return c.substring(nameEQ.length,c.length);}return null;}
