/**
* Librerias Javascript - AJAX
* @author Jorge Casas [jorgecasas@iternova.net]
* @version 3.1.0 - 20110810
* @package libs/ajax
* @link https://wiki.iternova.net/doku.php?id=smartportal:modules:libs:ajax_ajax
**/

/**Interprete codigo JS para 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(f){if(typeof f!=="function"){return false;}var i=0,l=this.length;for(i=0;i<l;i++){f(this[i]);}return true;};

function T$(i){return document.getElementById(i);}

/** DEPRECATED! XHConn cross-domain updated**/
function XHConn(){var xhr=false;var bComplete=false;var isIE8=false;if(window.XMLHttpRequest){xhr=new XMLHttpRequest();}else if(window.XDomainRequest){isIE8=true;xhr=new window.XDomainRequest();}else{try{xhr=new ActiveXObject("Msxml.XMLHTTP");}catch(e){try{xhr=new ActiveXObject("Microsoft.XMLHTTP");}catch(e){xhr=false;}}}if(!xhr)return null;this.connect=function(sURL,sMethod,sVars,fnDone){if(!xhr)return false;bComplete=false;sMethod=sMethod.toUpperCase();try{if(isIE8){xhr.onload=function_handler_ie8;}if(sMethod=="GET"){xhr.open(sMethod,sURL+"?"+sVars,true);sVars=null;}else{var url_proxy=sURL;var wds=window.location.hostname;var wdt=sURL.match(/:\/\/(.[^/:]+)/)[1];if(wds!=wdt)url_proxy=sp_get_url()+"/proxy/index.php?url="+sp_urlencode(sURL);xhr.open(sMethod,url_proxy,true);xhr.setRequestHeader("Method","POST "+url_proxy+" HTTP/1.1");}xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");xhr.setRequestHeader("X-Smartportal-Sessid",sp_cookie_get('PHPSESSID'));xhr.withCredentials=true;if (!isIE8){xhr.onreadystatechange=function(){if(xhr.readyState==4 && !bComplete){bComplete=true;fnDone(xhr);}};}function function_handler_ie8(){bComplete=true;fnDone(xhr);};try{xhr.send(sVars);}catch(e){return false;}}catch(e){return false;}return true;};return this;}

/**Envio GET a URL con AJAX*/
function sp_ajax_get(url,async){if (async==undefined)async=false;var result=null;var jqxhr=$.ajax({type: "GET",url: url,context: document.body,async:async,crossDomain: true,beforeSend: function(xhr){$.support.cors=true;xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");xhr.setRequestHeader("X-Smartportal-Sessid", sp_cookie_get('PHPSESSID'));xhr.withCredentials=true;},success: function(data,status){result=data;},error: function(xhr,desc,err){}});return result;}

/**Envio GET a URL con AJAX. Resultados en div */
function cargar_contenido_div(div,url,showloading,async,effects){
	if (async==undefined)async=true;
	if (effects==undefined)effects=true;
	var jqxhr=$.ajax({
		type: "GET",
		url: url,
		context: document.body,
		async: async,
		crossDomain: true,
		beforeSend: function(xhr){
			$.support.cors = true;
			xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
			xhr.setRequestHeader("X-Smartportal-Sessid", sp_cookie_get('PHPSESSID'));
			xhr.withCredentials=true;
			if (typeof(showloading)=="undefined" || showloading=="true"){sp_loading(div);}
		},
		success: function(data,status){
			if(effects)$('#'+div).hide();
			$('#'+div).html(data);
			if(effects)$('#'+div).fadeIn('slow');},
		error: function(xhr,desc,err){}
	});
	return false;
}
/** Envia key=value por POST */
function ajax_send_post(url,key,value,async){if (async==undefined)async=true;var url_proxy=url;var wds=window.location.hostname;var wdt=url.match(/:\/\/(.[^/:]+)/)[1];if(wds!=wdt)url_proxy=sp_get_url()+"/proxy/index.php?url="+sp_urlencode(url);var datos=key+"="+sp_urlencode(value);var jqxhr=$.ajax({type:"POST",url:url_proxy,data:datos,async:async,beforeSend:function(xhr){$.support.cors=true;xhr.setRequestHeader("User-Agent",navigator.userAgent);xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");xhr.setRequestHeader("X-Smartportal-Sessid",sp_cookie_get('PHPSESSID'));xhr.withCredentials=true;},error:function(xhr,desc,err){alert("ERROR: XMLHTTP no disponible. Use un navegador reciente");}});return false;}

/** Envia POST AJAX a URL varios campos de formulario con id == formID. Resultados en div */
function cargar_contenido_array_post(div,url,formID,showloading,async){
	if (async==undefined)async=true;
	var s="";
	var param_value=undefined;
	var form=$('#'+formID)[0];
	for (var i=0;i<form.elements.length;i++){
		param_value=getRadioButtonSelectedValue(form.elements[i]);
		if (param_value!=undefined)s+="&"+form.elements[i].name+'='+sp_urlencode(param_value);//encodeURI
	}
	var url_proxy=url;
	var wds=window.location.hostname;
	var wdt=url.match(/:\/\/(.[^/:]+)/)[1];
	if(wds!=wdt)url_proxy=sp_get_url()+"/proxy/index.php?url="+sp_urlencode(url);
	var datos="divID="+div+s;
	var jqxhr=$.ajax({
		type: "POST",
		url: url_proxy,
		data: datos,
		async: async,
		beforeSend: function(xhr){
			$.support.cors=true;
			xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
			xhr.setRequestHeader("X-Smartportal-Sessid",sp_cookie_get('PHPSESSID'));
			xhr.withCredentials=true;
			if (typeof(showloading)=="undefined"||showloading=="true"){sp_loading(div);}
		},
		success: function(msg){if(div!=''){$('#'+div).hide();$('#'+div).html(msg);$('#'+div).fadeIn('slow');}},
		error: function(xhr,desc,err){}
	});
	return false;
}
function reloadDivPeriodically(div,url,refresh,loading){cargar_contenido_div(div,url,loading);setTimeout('reloadDivPeriodically(\''+div+'\',\''+url+'\','+refresh+',\''+loading+'\');',refresh);}
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 ne=field.length;if(ne==undefined) field.checked=true;else{for(i=0;i<ne;i++)field[i].checked = true;}}
function uncheckAll(field){var ne=field.length;if(ne==undefined)field.checked=false;else{for(i=0;i<ne;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(typeof(CKEDITOR)!='undefined'&&CKEDITOR.instances[ctrl.name]!=undefined){return CKEDITOR.instances[ctrl.name].getData();}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(e){$('#'+e).fadeOut('slow');}
function ajaxAppearEffect(e){$('#'+e).fadeIn('slow');}
function field_plus(id,min,max){var x=parseInt(T$(id).value);if(isNaN(x)){T$(id).value=1;}else{if(x<max)T$(id).value++;}}
function field_minus(id,min,max){var x=parseInt(T$(id).value);if(isNaN(x)){T$(id).value=1;}else{if(x>min)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 sp_cookie_set(name,value){document.cookie=name+"="+value+"; path=/";}
function sp_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;}
function sp_get_url(base_url){if(typeof(base_url)!='undefined') return base_url;var url=window.location.href.split('/web/');if(url.lenght==2)return url[0];else{url=url[0].split('/index.php');return url[0];}}
function sp_loading(div){T$(div).innerHTML="<div class='fullwidth'><img src='"+sp_get_url()+"/images/ajaxloading.gif' alt='Loading...' class='center' /></div>";}
function sp_urlencode(s){var o='';var x=0;s=s.toString();var regex= /(^[a-zA-Z0-9_.]*)/;while(x<s.length){var match=regex.exec(s.substr(x));if(match!=null && match.length>1 && match[1]!=''){o += match[1];x+=match[1].length;}else{if(s[x]==' ')o+='+';else{var charCode=s.charCodeAt(x);var hexVal=charCode.toString(16);o+='%'+(hexVal.length<2?'0':'')+hexVal.toUpperCase();}x++;}}return o;}
function sp_async_preload(a){var h=document.getElementsByTagName('head')[0];for(var i=0;i<a.length;i++){var s=document.createElement('script');s.type='text/javascript';s.src=a[i];h.appendChild(s);}}
function sp_autosuggest(id,url,nshow,callback,multi){if(multi!=true)multi=false;if(typeof(nshow)=="undefined")nshow=20;$("#"+id).autocomplete({source:function(request,response){var jqxhr=$.ajax({type:"GET",dataType:'json',url:url+'&'+id+'='+T$(id).value,beforeSend:function(xhr){$.support.cors=true;xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");xhr.setRequestHeader("X-Smartportal-Sessid",sp_cookie_get('PHPSESSID'));xhr.withCredentials=true;},success:function(data){response($.map(data.results,function(item){return{label:item.value+((typeof(item.info)!='undefined'&&item.info!='')?' ['+item.info+']':''),value:item.id,id:item.id};}));},error:function(xhr,desc,err){}});},minLength:2,focus:function(){return false;},select:function(event,ui){if(multi){if(typeof(callback)=='function')callback(ui.item);}else{T$(id).value=ui.item.label;T$(id+'_ID').value=ui.item.value;$("#"+id+'_valueselected').html(ui.item.label);if(typeof(callback)=='function')callback();}return false;}});}
function sp_sizeof(obj){var size=0,key;for(key in obj){if (obj.hasOwnProperty(key))size++;}return size;}
