// Macromedia
function MM_swapImgRestore() { //v3.0
 var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}

function MM_preloadImages() { //v3.0
 var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
 var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
 if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function MM_findObj(n, d) { //v4.01
 var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
 d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
 if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
 for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
 if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_swapImage() { //v3.0
 var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
 if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function print() {
	if (!document.getElementById || !document.createTextNode || !window.print) return;
	window.print();
}

String.prototype.htmlEncode = function(){
	var tmp = this;
	tmp=tmp.rep("&","&amp;");
	tmp=tmp.rep("'","&apos;");
	return tmp;
}

String.prototype.capitalize = function(){
	return this.substring(0,1).toUpperCase()+this.substring(1).toLowerCase();
}

String.prototype.capitalizeAll = function(){
	var str = this.toLowerCase();
	var len = str.length;
	if (len>0){
		for(x=0; x<len; x++){
			if (x==0){
				var tmpchar = str.substring(0, 1).toUpperCase();
				var poststr = str.substring(1, len);
				str = tmpchar+poststr;
			} else {
				var tmpchar = str.substring(x, x+1);
				if (tmpchar==" " && x<(len-1)){
					tmpchar = str.substring(x+1, x+2).toUpperCase();
					var prestr = str.substring(0, x+1);
					var poststr = str.substring(x+2, len);
					str = prestr+tmpchar+poststr;
				}
			}
		}
	}
	return str;
}

String.prototype.left = function(chars){
	if (this.indexOf(chars)>- 1 && chars.length>0){
		var init = this.indexOf(chars);
		return this.substring(0, init);
	} return null;
}

String.prototype.right = function(chars){
	if (this.lastIndexOf(chars)>- 1 && chars.length>0){
		var init = this.lastIndexOf(chars);
		return this.substring(init+chars.length);
	} return null;
}

String.prototype.rep = function(buscar, reemplazar){
	var temp=""+this;
	if (typeof(reemplazar)=="undefined") reemplazar="";
	while(temp.indexOf(buscar)>- 1){
		var pos=temp.indexOf(buscar);
		temp=""+(temp.substring(0, pos)+reemplazar+temp.substring((pos+buscar.length), temp.length));
	}
	return temp;
}

String.prototype.toDb = function(){
	var Html=this.rep("\r\n","");
	Html=Html.rep("\n","");
	Html=Html.rep("\t","");
	Html=Html.rep("  "," ");
	Html=Html.rep("> <","><");
	Html=Html.rep("<tbody>","").rep("</tbody>","");
	Html=Html.rep("alt=\"\"","");
	return Html;
}

String.prototype.contains = function(tosearch){
	if (this!=null && this.length>0) if (this.indexOf(tosearch)>-1) return true; return false;
}

String.prototype.trim = function() {
	var str = this;
	var ch = str.substring(0,1);
	while(ch==" "){ str=str.substring(1, str.length); ch=str.substring(0,1); }
	ch=str.substring(str.length-1, str.length);
	while(ch==" "){ str=str.substring(0, str.length-1); ch=str.substring(str.length-1, str.length); }
	while(str.indexOf("  ")!=- 1) str=str.substring(0, str.indexOf("  "))+str.substring(str.indexOf("  ")+1, str.length);
	return str;
}

String.prototype.isEmail = function(){
	var at="@"
	var dot="."
	var lat=this.indexOf(at)
	var lstr=this.length
	var ldot=this.indexOf(dot)
	if (this.indexOf(at)==-1) return false;
	if (this.indexOf(at)==-1 || this.indexOf(at)==0 || this.indexOf(at)==lstr) return false;
	if (this.indexOf(dot)==-1 || this.indexOf(dot)==0 || this.indexOf(dot)==lstr) return false;
	if (this.indexOf(at,(lat+1))!=-1) return false;
	if (this.substring(lat-1,lat)==dot || this.substring(lat+1,lat+2)==dot) return false;
	if (this.indexOf(dot,(lat+2))==-1) return false;
	if (this.indexOf(" ")!=-1) return false;
	return true;
}

String.prototype.delRight = function(num){
	return this.substring(0, this.length-num);
}

String.prototype.delLeft = function(num){
	return this.substring(num);
}

function number_format( number, decimals, dec_point, thousands_sep ) {
    var n = number, c = isNaN(decimals = Math.abs(decimals)) ? 2 : decimals;
    var d = dec_point == undefined ? "," : dec_point;
    var t = thousands_sep == undefined ? "." : thousands_sep, s = n < 0 ? "-" : "";
    var i = parseInt(n = Math.abs(+n || 0).toFixed(c)) + "", j = (j = i.length) > 3 ? j % 3 : 0;
    return s + (j ? i.substr(0, j) + t : "") + i.substr(j).replace(/(\d{3})(?=\d)/g, "$1" + t) + (c ? d + Math.abs(n - i).toFixed(c).slice(2) : "");
}

function size_format(filesize) {
	if (filesize >= 1073741824) {
	     filesize = number_format(filesize / 1073741824, 2, '.', '') + ' Gb';
	} else { 
		if (filesize >= 1048576) {
     		filesize = number_format(filesize / 1048576, 2, '.', '') + ' Mb';
   	} else { 
			if (filesize >= 1024) {
    		filesize = number_format(filesize / 1024, 0) + ' Kb';
  		} else {
    		filesize = number_format(filesize, 0) + ' bytes';
			};
 		};
	};
  return filesize;
};

// Elimina el número de caracteres a la izquierda
function delLeft (str, number){
	str=str.substring(number)
	return str;
}

function AjaxClean(){ // Realizada una llamada Ajax sincrónicamente vía jQuery y Json
	return $.ajax({
		async: false,
		type: "POST",
		cache: false,
		url: arguments[0],
		data: arguments[1],
		cache: false,
		contentType: "application/json; charset=iso-8859-1",
		dataType: "json"
	}).responseText;
}

function entityGet(t, f, v){
	var obj;
	$.ajax({
		async: false,
		cache: false,
		dataType: "json",
		type: "POST",
		url: "../services/entity.php",
		data: "action=get&t="+t+"&f="+f+"&v="+v,
		success:function(res){ obj=res; },
		error:function(XMLHttpRequest, textStatus, errorThrown){
			alert("Error:\n"+textStatus+"\n\nResponse:\n"+XMLHttpRequest.ResponseText);
			return null;
		}
	});
	return obj;
}

function entitySet(t, f, v){
	var obj = entityGet(t, f, v);
	if (obj!=null) {
		for (field in obj) $("#"+field).val(obj[field]!=null?obj[field]:'');
		return obj;
	}
}

function getJSON(text){
	var tmp = JSON.parse(text, function (key, value) {
		var type;
		if (value && typeof value === 'object') {
			type = value.type;
			if (typeof type === 'string' && typeof window[type] === 'function') return new (window[type])(value);
		}
		return value;
	});
	return tmp;
}

function Ajax(){ // Realizada una llamada Ajax sincrónicamente vía jQuery y Json
	var params = arguments[1]!=null?arguments[1]:"{}";
	var res = JSON.parse($.ajax({
		async: false,
		type: "POST",
		cache: false,
		contentType: "application/json; charset=iso-8859-1",
		dataType: "json",
		url: arguments[0],
		data: params,
		error: function(xhr, status, error) {
			var e = JSON.parse(xhr.responseText);
			alert("Error: "+e.Message+"\n\nStackTrace: "+e.StackTrace);
		}
	}).responseText).d;
	return res;
}

function ifrm(ifrmID){ // Devuelve la referencia a un iframe
	for(var x=0; x<window.frames.length; x++) if (window.frames[x].name==ifrmID || window.frames[x].id==ifrmID) { return window.frames[x]; break; }
	return null;
}

function handleShadowboxException(error){
	alert(error,true);
}

function setFlash(swf, div, width, height, flashvars){
	var params = new Object();
	params.wmode="transparent";
	if (typeof(flashvars)!="undefined") params.flashvars=flashvars;
	var attributes	= new Object();
	attributes.styleclass="no_outline";
	swfobject.embedSWF(swf, div, width, height, "9.0.28", "../app_movies/script_flashinstall.swf", false, params, attributes);
}

function confirm1(msg){
	originalColor=$("#shadowbox_body").css("background-color");
	originalBorder=$("#shadowbox_body").css("border");
	$("#shadowbox_body").css("background-color","transparent");
	$("#shadowbox_body").css("border","0px");
	$("#alert_buttons").css("display",arguments[1]=="load"?"none":"");
	$("#alert_msg").html(msg.replace("\n","<br>"));
	$("#alert_icon").html('<img src="../app_images/ico_'+(arguments[1]!=undefined?arguments[1]:'info')+'.png"/>')
	$("#alert").css("display","");
	var width=$("#alert_tbl").width();
	var height=$("#alert_tbl").height();
	$("#alert").css("display","none");
	Shadowbox.open({
		player:"inline",
		content:"#alert",
		width:width,
		height:height,
		enableKeys: arguments[1]=="load"?false:true
	},{
		animate: false,
		animateFade: true,
		modal:true,
		fadeDuration: 0.2,
		onOpen: function(){
			$("#shadowbox_info").css("display","none")
		},
		onClose: function(){
			$("#alert").css("display","none");
			$("#shadowbox_info").show();
			$("#shadowbox_body").css("background-color",originalColor);
			$("#shadowbox_body").css("border",originalBorder);
			if (arguments[2]!=undefined) arguments[2];
		}
	});
}

$.fn.addOptionAtIndex = function(){
	var _text = arguments[0];
	var _val = arguments[1]!=null?arguments[1]:arguments[0];
	var _idx = arguments[2]!=null?parseInt(arguments[2]):null;
	return this.each(function(){
		if (this.tagName.toLowerCase()!="select") return;
		if (_val!=null && _idx==null) _idx=this.options.length;
		for (var x=0; x<this.options.length; x++){
			var _opt = $(this.options[x]);
			var _optVal = _opt.val().toString().toLowerCase();
			var _optTxt = _opt.text().toString().toLowerCase();
			if (_optTxt==_text.toString().toLowerCase()){
				if (_val!=null && _optVal!=_val.toString().toLowerCase()) _opt.val(_val);
				_opt.attr("selected","selected");
				return _opt;
			} else if (_optVal==_val.toString().toLowerCase()){
				if (_optTxt!=_text.toString().toLowerCase()) _opt.text(_text);
				_opt.attr("selected","selected");
				return _opt;
			}
		}
		var _opt = document.createElement("option");
		_opt.value=_val, _opt.text=_text;
		this.options[_idx] = _opt;
	});
};

$.fn.clear = function() {
	return this.each(function() {
		var type = this.type, tag = this.tagName.toLowerCase();
		if (tag == 'form') return $(':input',this).clear();
		if (type == 'text' || type == 'password' || tag == 'textarea') this.value = '';
		else if (type == 'checkbox' || type == 'radio') this.checked = false;
		else if (tag == 'select') this.selectedIndex = 0;
	});
};

$.fn.format = function(f) {
	return this.each(function(){
		var type = this.type, tag = this.tagName.toLowerCase();
		if (tag=="input" && type == 'text'){
			var el = $(this);
			el.blur(function(e){
				el.val(eval("el.val().trim()."+f+"()"));
			});
		}
	});
};

function eventEl(e){
	var e = e || window.event;
	var el = e.target || e.srcElement;
	return $(el);
}

// Inicializa shadowbox en todas las páginas
if (typeof(Shadowbox)!="undefined"){
	Shadowbox.init({
		adapter:"jquery",
		allowFullScreen:true,
		animSequence:"sync", // "wh", "hw", "sync"
		animate:true, // enable all animations, except for fades
		animateFade:true, // enable fade animations
		autoDimensions:false, // use the dimensions of the first piece as the initial dimensions (if they are available)
		autoplayMovies:true, // automatically play movies
		bgcolor:'#000000',
		continuous:true, // enables continuous galleries. When enabled, user will be able to skip to the first gallery item from the last using next and vice versa
		counterLimit:10, // limit to the number of counter links that are displayed in a "skip" style counter
		counterType:'default', // counter type. May be either "default" or "skip". Skip counter displays a link for each item in gallery
		displayCounter:true, // display the gallery counter
		displayNav:true, // show the navigation controls
		ease:function(x){ return 1 + Math.pow(x - 1, 5); }, // Easing function used for animations. Based on a cubic polynomial. Number x The state of the animation (% complete), Return Number The adjusted easing value
		enableKeys:true, // enable keyboard navigation
		errors:null,
		fadeDuration:0.5, // duration of the fading animations (seconds)
		flashBgColor:"#000000",
		flashExpress:"movies/express.swf",
		flashPlayer:"movies/player.swf",
		flashParams:{},
		flashVars:{}, // flash vars
		flashVersion:'9.0.115', // minimum required flash version suggested
		handleException:handleShadowboxException,
		handleOversize:'resize', // 'resize', 'drag', 'none'
		handleUnsupported:'link', // 'remove' or 'link'
		initialHeight:140,
		initialWidth:280,
		language:'es', // the language to use
		modal:false,
		onChange:null,
		onClose:null,
		onFinish:null,
		onOpen:null,
		overlayColor:'#000', // color to use for modal overlay
		overlayOpacity:0.8, // opacity to use for modal overlay
		players:['img','iframe','html'], // the players to load
		resizeDuration:0.5, // duration of resizing animations (seconds)
		showMovieControls:true,
		showOverlay:true,
		skipSetup:false, // Salta el escaneo de tags
		slideshowDelay:0,
		useSizzle:false,
		viewportPadding:20 // amount of padding to maintain around the edge of the viewport at all times (pixels)
	});
}

// Adiciona métodos de validación a jQuery validator
if (typeof(jQuery.validator)!="undefined"){
	$.validator.addMethod("dateEN", function(value) {
		return dateEN(value);
	}, "<br>Please enter a valid date (mm/dd/yyyy)");

	$.validator.addMethod("dateES", function(value) {
		return dateES(value);
	}, "<br>Please enter a valid date (dd/mm/yyyy)");
}

$().ready(function() {
	// Elimina los bordes en los links dentro de IE
	$("a,map,area,input:radio,input:checkbox,object,embed").each(function(i) {
		$(this).focus(function(e){
			if (this.blur) this.blur();
		});
	});

	// Permite la transparencia en los iframes dentro de ie
	if($.browser.msie){
		$("iframe").each(function(i) {
			$(this).attr("allowtransparency","true");
		});
	}
});
