	function getMicrotime(){
		var micro = "";
		$.ajax({
		   async: false,
		   type: "POST",
		   url: "_ajax.php",
		   data: "opc=getMicrotime",
		   success: function(data){
		     micro = data;
		   }
		 });
		return micro;
	}
	
	$.fn.clearForm = function() {
	  return this.each(function() {
	    var type = this.type, tag = this.tagName.toLowerCase();
	    if (tag == 'form')
	      return $(':input',this).clearForm();
	    if (type == 'text' || type == 'password' || tag == 'textarea')
	      this.value = '';
	    else if (type == 'checkbox' || type == 'radio')
	      this.checked = false;
	    else if (tag == 'select')
	      this.selectedIndex = -1;
	  });
	};
	
	
	$.fn.serializeForm = function() {
		var string = "";
		var value  = "";
		
		
		$(this).find("input,textarea,select").each(function(){
			if($(this).val()!=null){
				/*
				value = $(this).val().replace(/[\u00A0-\u2666]/g, function(c) { //Convert unicode to html entities
					return '&#'+c.charCodeAt(0)+';';
				});
				*/
				value = $(this).val();
				value = value.replace(/\+/g,'%2B'); //Url encode '+' symbol
			}
			else{
				value="";
			}
			if(this.type=='checkbox' && this.checked==false){
				value = "";
			}
			
			string += (string==''?"":"&")+($(this).attr("name")+"="+ encodeURIComponent(value) );
		});
		return string;
	};
	
	$.fn.serializeFormDescriptions = function() {
		var string = "";
		var value  = "";
		$(this).find("input,textarea,select").each(function(){
			
			if($(this).attr("title")!=null){
				value = $(this).attr("title");
				value = value.replace(/\+/g,'%2B'); //Url encode '+' symbol
			}
			else{
				value="";
			}
			string += (string==''?"":"&")+($(this).attr("name")+"_desc="+ encodeURIComponent(value) );
		});
		return string;
	};
	
	$.fn.image = function(src, f){ 
		   return this.each(function(){ 
		     var i = new Image(); 
		     i.src = src; 
		     i.onload = f; 
		     this.appendChild(i);
		   }); 
	 }; 
	 
	 $.clientHeight = function(){
		if(window.innerHeight){
		    return window.innerHeight;
		}
		else{
			return document.documentElement.clientHeight;
		}
	 };
	 
	 $.clientWidth = function(){
		if(window.innerWidth){
		    return window.innerWidth;
		}
		else{
			return document.documentElement.clientWidth;
		}
	 };

    $.fn.addAjaxLoader=function(){
        var w = $(this).outerWidth();
        var h = $(this).outerHeight();
        var paddingLeft = parseInt($(this).css("paddingLeft"));
        var paddingTop  = parseInt($(this).css("paddingTop"));

        if(typeof(DIR_PREFIX) == "undefined"){
			window.DIR_PREFIX = '';
		}

        if($(this).find(".ajax_loader").length==0){
            $(this).prepend('<div style="position:relative;"><div class="ajax_loader" style="z-index:9999;position:absolute;top:'+(paddingTop > 0?'-'+paddingTop+'px':"0px")+';left:'+(paddingLeft > 0?'-'+paddingLeft+'px':"0px")+';margin:0px;padding:0px;width:'+w+'px;height:'+h+'px; background: url('+DIR_PREFIX.replace(/ /g,"%20")+'img/admin/ajax-loader.gif) no-repeat center center  #FFFFFF;filter: alpha(opacity=60);opacity:0.6"></div></div>');
        }
    };

    $.fn.removeAjaxLoader=function(){
        $(this).parent().find(".ajax_loader").parent().remove();
    };
	 
	 
	 function emailCheck (emailStr) {
			var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
			return reg.test(emailStr) == false?false:true;
	 }
	 
	 function checkDate(y,m,d){
		y=document.getElementById(y);
		m=document.getElementById(m);
		d=document.getElementById(d);
		if(m.value==2){
			if(y.value % 4==0){
				if(d.value>29){
					d.value=29;
				}
			}
			else{
				if(d.value>28){
					d.value=28;
				}
			}
	   }
	   else{
		   if(m.value==4||m.vlaue==6||m.value==9||m.value==11){
			   if(d.value>30){
				   d.value=30;
			   }
		   }
	   }	 
	}	
	 

		function getTranslateEntry(word){
			var translation="";
			$.ajax({
			   async: false,
			   type: "POST",
			   url: "_ajax.php",
			   data: "opc=translate&word="+encodeURIComponent(word),
			   success: function(data){
			    translation = data;
			   }
			 });
			return translation;
		}
		
		function getDictionaryEntry(word){
			var translation="";
			$.ajax({
			   async: false,
			   type: "GET",
			   url: "_ajax.php",
			   data: "opc=dictionary&word="+word,
			   success: function(data){
			    translation = data;
			   }
			 });
			return translation;
		}
	 
		 function checkFormFields(frm,animate,animate_msg,field_font_color,field_background_color){ //(formulario, array de campos a validar,idioma,animar(1|0)?,mostrar alerta(1|0)?)
				var msg="";
				var verify = true;
				var show_alert  = false;
				var count=0;
				$("#"+frm+" input,#"+frm+" select,#"+frm+" textarea,#"+frm+" div").each(function(){
					count++;
					
					if($(this).hasClass("required")){
						
						if($(this).attr('id').indexOf('captcha')!=-1){
							//verify = isCaptchaCodeCorrect($(this).val());
						}
						
						if( (jQuery.trim($(this).val())=='' || ($(this).attr('name').toLowerCase().indexOf('email')!=-1 && !emailCheck($(this).val())) || ($(this).attr('type')=='checkbox' && !$(this).attr('checked')) ||  ($(this).attr('id').lastIndexOf("_confirmation")!=-1 && $(this).val()!= $("#"+$(this).attr('id').replace("_confirmation","")).val()) || verify==false) && ( $(this).parents(".no_display").length==0 ) ){
							
							show_alert = true;
							msg=msg+"<br />"+$(this).attr('title')+"\n";
							if($(this).attr('type')!='checkbox' && $(this).attr('type')!='radio'){
								if(animate==1){
									if(animate_msg!=1){   
										$(this).effect("highlight", {color:"#FF0000"},1000,function(){});
									}
									else{
										$(this).css("backgroundColor","#FF0000");
										$(this).css("color","#FFFFFF");
									}
								}
							}
							if(($(this).attr('type')=='checkbox' || $(this).attr('type')=='radio') && $(this).attr('checked')!=true){
								var type = $(this).attr('type');
								var w=15;
								var	h=15;
								
								var style = $(this).attr("style");
								var className = $(this).attr("class");
								var title = $(this).attr("title");
								var chk_id = "chk_"+count;
								var div = '<div id="'+chk_id+'" class="'+className+'" title="'+title+'" style="background-color:#FF0000;height:'+h+'px;width:'+w+'px; float:left; margin:2px 5px 2px 0;"></div>';
								$(this).replaceWith(div);
								$("#"+chk_id).click(function(){
									var chk = '<input checked="checked" type="'+type+'" class="'+className+'" style="'+style+'" title="'+title+'"/>';
									$(this).replaceWith(chk);
								});
							}
							if($(this).attr("name").indexOf("_group")!=-1){
								if(animate==1){
									if(animate_msg!=1){   
										$("#"+$(this).attr("id")+"_desc").effect("highlight", {color:"#FF0000"},1000,function(){});
									}
									else{
										$("#"+$(this).attr("id")+"_desc").css("backgroundColor","#FF0000");
										$("#"+$(this).attr("id")+"_desc").css("color","#FFFFFF");
									}
								}
								
							}
							
							$(this).one("click", function(){
								$(this).css("backgroundColor",field_background_color);
						   		$(this).css("color",field_font_color);
						   		$("#"+$(this).attr("id")+"_desc").css("backgroundColor","transparent");
								$("#"+$(this).attr("id")+"_desc").css("color",field_font_color);
						   		//$(this).val("");
							});
							$(this).one("focus", function(){
								$(this).css("backgroundColor",field_background_color);
						   		$(this).css("color",field_font_color);
						   		$("#"+$(this).attr("id")+"_desc").css("backgroundColor","transparent");
								$("#"+$(this).attr("id")+"_desc").css("color",field_font_color);
						   		//$(this).val("");
							});
							$(this).one("keypress", function(){
						   		$(this).css("backgroundColor",field_background_color);
							   	$(this).css("color",field_font_color);
							   	$("#"+$(this).attr("id")+"_desc").css("backgroundColor","transparent");
								$("#"+$(this).attr("id")+"_desc").css("color",field_font_color);
							   	//$(this).val("");
						   		
							});
							$(this).one("change", function(){
								if($(this).val()!=''){
							   		$(this).css("backgroundColor",field_background_color);
								   	$(this).css("color",field_font_color);
								   	$("#"+$(this).attr("id")+"_desc").css("backgroundColor","transparent");
									$("#"+$(this).attr("id")+"_desc").css("color",field_font_color);
								   	//$(this).val("");
								}
							});
							
						}	
					}
					
					if($(this).hasClass("repeat_email")){
						if(document.getElementById("email").value!=document.getElementById("email-repeat").value){
							msg+="<br />El campo E-mail no coincide con el campo repetir -email.";
							show_alert = true;
							$(this).effect("highlight", {color:"#FF0000"},1000,function(){});
						}
					}
				});
			  
				if(show_alert){
					if(animate!=1){
						try{
							msg = getTranslateEntry("COMPLETE_REQUIRED_FIELDS");
						}
						catch(ex){
							msg = getDictionaryEntry("COMPLETE_REQUIRED_FIELDS");
						}
						alert(msg);
				   	}
					else{
						if(animate_msg==1){
							try{
								showAlertMessage(getTranslateEntry("complete_required_fields"),1);
							}
							catch(ex){
								showAlertMessage(getDictionaryEntry("complete_required_fields"),1);
							}
						}
					}
					return false;
			   }
			   else{
					return true;
			   }	
			}
		
	
		 function showAlertMessage(message,icon,close_on_click,close_all){
				/* ICONS:ajax,info,alert,error */
				var img_icon="";
				close_on_click = close_on_click == '' || close_on_click == undefined  ? false: close_on_click;
				close_all = close_all == '' || close_all == undefined  ? false: close_all;
				if(typeof(DOCUMENT_ROOT) == "undefined"){
					window.DOCUMENT_ROOT = '';
				}
				if(icon=='ajax'){img_icon=DOCUMENT_ROOT+"images/admin/ajax-loader.gif";}
				else if (icon=='info'){img_icon=DOCUMENT_ROOT+"images/admin/icon-dialog-info.png"; color="#868686";}
				else if (icon=='error'){img_icon=DOCUMENT_ROOT+"images/admin/icon-dialog-error.png"; color="#bd183b";}
				else if (icon=='password'){img_icon=DOCUMENT_ROOT+"images/admin/icon-dialog-password.png"; color="#868686";}
				else if (icon=='warning'){img_icon=DOCUMENT_ROOT+"images/admin/icon-dialog-warning.png"; color="#bd183b";}
				else{img_icon=DOCUMENT_ROOT+"images/admin/icon-dialog-warning.png"; color="#bd183b";}
				
				var html ='<div id="alert_msg" class="lightbox" style="cursor:pointer;" onclick="MySimpleLightBox.close('+(close_all?"true":"false")+');">';
				html+='<p>'+message+'</p>';
				html+='</div>';
				
				MySimpleLightBox.border='1px solid #999999';
				MySimpleLightBox.loadHTML(html);
				
				$("#lbox").bind("click",function(){
					if(close_on_click){
						MySimpleLightBox.close();
					}	
				});
			}
		
		function restrictInputLength(form_id){
			var inputs=null;
			if(form_id!='' && form_id!=undefined){
				inputs = $("#"+form_id+" input[type='text'],input[type='password'], textarea");
			}
			else{
				inputs = $("input[type='text'],input[type='password'], textarea");
				
			}
			inputs.each(function(){
				var maxlength = 0;
				
				var class_name = $(this).attr("class").split(" ");
			 	for(var i=0; i<class_name.length;i++){
					if(jQuery.trim(class_name[i]).indexOf("maxlength_")!=-1){
						maxlength = parseInt(jQuery.trim(class_name[i]).replace("maxlength_",""));
					}
				}
				
			 	if(maxlength > 0){
					$(this).keypress(function(evt){
						textCounter(this,maxlength,evt);
					});
					$(this).change(function(evt){
						textCounter(this,maxlength,evt);
					});
					
					if(document.all){
						this.onpaste = function(){
							maxLengthPaste(this,maxlength);
						};
					}
					else{
						$(this).attr("oninput",'textCounter(this,'+maxlength+',event)');
					}	
					
				}
			 	
			});	
		}
		
		function maxLengthPaste(field,maxChars){
		    event.returnValue=false;
		    if((field.value.length + window.clipboardData.getData("Text").length) > maxChars){
		       return false;
		    }
		    event.returnValue=true;
		} 
		
		function textCounter(field,maxlimit,evento) {
			
			var ex=new Array('8','46','37','38','39','40','116');
			if(in_array(ex,evento.keyCode)){
				return;	
			}
			if (field.value.length >= maxlimit){ // if too long...trim it!
					cancelEvent(evento);
					field.value = field.value.substring(0, maxlimit);
			}
		}		
		
		function in_array(mat,field){
				var i;
				for(i=0;i<mat.length;i++){
					if(mat[i].toLowerCase()==new String(field).toLowerCase()){
						return true;
					}	
				}
				return false;	
		}
		
		function onlyMoneyInputAllowed(e){
			var keynum;
			var keychar;
			var numcheck;
			if(window.event) // IE
			{
			keynum = e.keyCode;
			}
			else if(e.which) // Netscape/Firefox/Opera
			{
			keynum = e.which;
			} 
			keychar = String.fromCharCode(keynum);
			numcheck = /\d/;
			
			if(numcheck.test(keychar)==false && keynum!=8 && keynum!=undefined){
				if(keychar=='.'){
					var input = eventTrigger(e);
					if(input.value.indexOf('.')!=-1){
						cancelEvent(e);
					}
				}
				else{
					cancelEvent(e);
				}
			}
		}
		
		function onlyIntegerInputAllowed(e){
			var keynum;
			var keychar;
			var numcheck;
			if(window.event){ // IE
				keynum = e.keyCode;
			}
			else if(e.which){ // Netscape/Firefox/Opera
				keynum = e.which;
			} 
			keychar = String.fromCharCode(keynum);
			numcheck = /\d/;
			
			if(numcheck.test(keychar)==false && keynum!=8 && keynum!=undefined){
				cancelEvent(e);
			}
		} 


		function eventTrigger (e) {
		    	if (! e) e = event;
			    return e.target || e.srcElement;
		}
			
		function cancelEvent(e){
				if(navigator.userAgent.indexOf("MSIE")!=-1){
					e.returnValue=0;	
				}
				if(navigator.userAgent.indexOf("Gecko")!=-1){
					e.preventDefault();	
				}
		}
		
		function validateExtensions(file,ext,evt){
			var auxext=new String(file);
			var extPosibles;
			for (var i=0;i<ext.length;i++){
				if(i==0){
					extPosibles=ext[i];
				}
				else{
					extPosibles += ","+ext[i];
				}
			}
			auxext=auxext.substring(auxext.lastIndexOf('.')+1);
			if(!in_array(ext,auxext)){
				alert ("Slo se admiten las siguientes extensiones: \n"+extPosibles);
				cancelEvent(evt);	
			}
			else{
				return true;	
			}
		
		}
