// JavaScript Document

/*-------Basic functions ---------------------------------*/

 /*
 Modifies the attribute "display"
	 objectDisplay String   Object Id
	 isBlocked     boolean  true=object visible
	 returns  	   String   new display value or null
 */
 
 
 actual=new Date();
 
 
 
 function GetXmlHttpObject() { 
	var objXMLHttp = null;
	if (window.XMLHttpRequest) {
		objXMLHttp = new XMLHttpRequest();
	} else if (window.ActiveXObject) {
		objXMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
	}
	return objXMLHttp;
}



 function xDisplay(objectDisplay,isBlocked){
	   newStyle= isBlocked?"block":"none";
	   //debug(actual.getDate() + " toyotaLibrary:xDisplay " + objectDisplay + "," + isBlocked)
 	if(findObj(objectDisplay)== null) {
		return null;
	}
	objectDisplay = findObj(objectDisplay);

    if(objectDisplay.length){
		for(i=0;i< objectDisplay.length; i++){
		 if(objectDisplay[i].style != null  && objectDisplay[i].style.display != null){
			objectDisplay[i].style.display = newStyle;
		  }
		}
		return objectDisplay;
	 }else{
	 if(objectDisplay.style){
			objectDisplay.style.display = newStyle;
		  }
  		return objectDisplay.style.display;
	}
	newStyle=null;
	return null;
}

 function xVisibility(objectVisibility,isVisible){
    newStyle= isVisible?"inherit":"hidden";
 	if(!(objectVisibility=findObj(objectVisibility))) {
		return null;
	}	
    if(objectVisibility.length){
		for(i=0;i< objectVisibility.length; i++){
  		 objectVisibility[i].style.visibility="inherit";	
		 if(objectVisibility[i].style){
			objectVisibility[i].style.visibility = newStyle;
		  }
		}
		return objectVisibility;
	 }else{
		 if(objectVisibility.style){
			objectVisibility.style.visibility = newStyle;
		  }
  		return objectVisibility.style.visibility;
	}
	newStyle=null;
	return null;
}



function xDisplayObject(objectDisplay,isBlocked){
    newStyle= isBlocked?"block":"none";		
	objectDisplay=findObj(objectDisplay);
	if(objectDisplay){
		if(objectDisplay.parentNode)
			container = objectDisplay.parentNode;
		if(container.style){
			container.style.display = newStyle;
			EnableDisableObject(objectDisplay.id,isBlocked)}
		if(container.previousSibling)
			previous = container.previousSibling;
		if(previous.style)
			previous.style.display=newStyle;
					
	}
	objectDisplay=null;newStyle=null
}	

function xVisibilityObject(objectDisplay,isBlocked){

    newStyle= isBlocked?"inherit":"hidden";		
	objectDisplay=findObj(objectDisplay);
	if(objectDisplay){
		if(objectDisplay.parentNode)
			container = objectDisplay.parentNode;
		if(container.style){
			container.style.visibility = newStyle;
			EnableDisableObject(objectDisplay.id,isBlocked)
			if(isBlocked && container.style.visibility) 
					container.style.visibility='inherit';
        }
		if(container.previousSibling)
			previous = container.previousSibling;
		if(previous.style){
			previous.style.visibility=newStyle;
			if(isBlocked && previous.style.visibility) 
		 	previous.style.visibility='inherit';
		}			
		
	}
	objectDisplay=null;newStyle=null;
}
 /* 
 Finds any object by Id, inside the document.  
	 theObj     String   Object Id. In order to find an object inside a frame use the number
						 of the frame and the object Id using a ? to concat . e.g. 1?objectId 
	 theDoc     boolean  true=object visible
	 returns   Object or null
*/

function findObj(theObj, theDoc){
  var p, i, foundObj;
  foundObj=null;
  try{
  if(!theDoc) theDoc = document;
  if(!theObj) return null;
  if( (p = theObj.indexOf("?")) > 0 && parent.frames.length){
    theDoc = parent.frames[theObj.substring(p+1)].document;
    theObj = theObj.substring(0,p);
  }
  if(!(foundObj = theDoc[theObj]) && theDoc.all) 
  	foundObj = theDoc.all[theObj];
	
  for (i=0; !foundObj && i < theDoc.forms.length; i++) 
    foundObj = theDoc.forms[i][theObj];
	
  for(i=0; !foundObj && theDoc.layers && i < theDoc.layers.length; i++) 
    foundObj = findObj(theObj,theDoc.layers[i].document);
	
  if(!foundObj && document.getElementById) 
  	foundObj = document.getElementById(theObj);
  }catch(error){}
  
  return foundObj;
  foundObj=null;
}

 /* 
 Sets the objects value.  
	 object     String     Object Id.   
	 valueSel   Stirng     New Value
	 returns    String     New value or null
	 Onl works for Text and Select elements
  */
function setValue(object,value){
	objectoriginal = object
	object=findObj(object);
	try{
	if(object!=null && object.options){
		var a=-1;
		var nuevo=true;
		for(ai=0; ai < object.length ; ai++){
			if(object.options[ai].value.toUpperCase()==value.toUpperCase()){
			   object.options[ai].selected= true;
			   nuevo=false;
			   if(object.onchange)object.fireEvent("onchange");
			   break;
			}
		}
		if(nuevo && value!= null && trim(value)!= '' ){addOption(object.name,value); setValue(object.name,value)};
		nuevo=null;
		return value;	
	}else if (object != null){
		object.value=value;
		return value;
	}else
	object=null;}catch(error){alert("No se encontro el objeto: " + objectoriginal + error+object+value)}
	return null;

}


 /* 
 Gets the objects value.  
	 object     String     Object Id.   
	 returns    String current value or null
	 Onl works for Text and Select elements
 */
function getValue(object){
	object=findObj(object);
	return object != null ? object.value : null ;
}

function setAttribute(objectID,attributeName,value){
	if(findObj(objectID)!=null && attributeName != null && attributeName != "")
		findObj(objectID).setAttribute(attributeName,value);
	
	}


function fireEvent(objectID,eventName){
	eventName=eventName.toLowerCase()
	try{
		if(findObj(objectID)!= null){
			findObj(objectID).fireEvent(eventName);
			return true;
		}else return false;
	}catch(error){}
}

function getSelectText(object){
	object=findObj(object);
	valor='';
	if(object.options){
		for(ai=0; ai < object.length ; ai++){
			if(object.options[ai].selected){
			   valor= object.options[ai].text;
			}
		}
	}	
	return valor;
	object=null; valor= null;
}
/* 
 Verifies if a object.value is a number  
	 object     String     Object Id.   
	 returns    boolean    true?is a number
*/
function isNumValue(object){
return  !isNaN(getValue(object)== "" ? "n" :getValue(object));
}




/* 
 Evaluates if a pattern occurs during the String  and replace it using the substitution model 
	 strVal     String     Original statement.
	 expression RegExp     Pattern expression
	 replaceStr String     Substitution  model 
	 returns    String     the new value
*/
function regExpReplace(strVal,expression,replaceStr){
	if(expression.test(strVal)){
	    return strVal.replace(expression,replaceStr);
		}else  return strVal;
}


/* 
 Attaches a specific event handler to an object  
	 element     String     Object id.
	 type        String     event name i.e. focus, blur...
	 expression  String     function to call 
	 bubbling    boolean    thows up the event to the parent element.
	 returns     boolean    true?Event was attached sucessfully
For IE the type should be written without preposition 'on'
*/
function addListener(element, type, expression, bubbling){
	bubbling = bubbling || false;
	if(!element.id)element=findObj(element);
	if(element){
		if(window.addEventListener)	{ // Netscape
			element.addEventListener(type, expression, bubbling);
			return true;
		}else if(window.attachEvent) { // IE
      		element.attachEvent('on' + type,expression);
	   		return true;
		} 
	}	return false;
} 



//------------------------------------------------------------------

//Control and User Interaction functions ---------------------

/*
Changes the content of any container as DIV, SPAN, etc
objectDisplay String   object id
text          String   new HTML code
isAdd         String   true?adds the new HTML to current HTML 
returns       String   object Id or null 
*/
 function changeInnerHTML(objectDisplay,text,isAdd){
 	if(!(objectDisplay=findObj(objectDisplay))) {
		return null;
	}	
	if(isAdd)
		objectDisplay.innerHTML= objectDisplay.innerHTML + text;
	else
		objectDisplay.innerHTML=text;
	return objectDisplay.id; 
 }


/*
Removes the Option Seleccione from a Select element
objectSelect  String  Select object id
*/
function removeSeleccione(){
   evento=window.event.srcElement ? window.event : null;
   objectSelect=evento.srcElement;
	if(objectSelect.options){ 	
		oldIndex=objectSelect.selectedIndex;
		if(objectSelect.length > 0 && objectSelect.options[0].text=="SELECCIONE" && oldIndex != 0){
			objectSelect.options[0]=null;
			if(oldIndex)
			objectSelect.options[oldIndex-1].selected=true;
		}
		oldIndex=null;
	}
	objectSelect=null;return null;	
 }


/*
Changes the value and text of an Option element.
object   String    Object Id.
value    String    new value
index    String    index of the option to change
*/ 
 function changeOption(object,value,index){
 	if(object.options && object.options[index]){
   	  object.options[index].value=value;
   	  object.options[index].text=value;
	  }
 }
 
/*
Adds an option to a SELECT object.
object   String    Object Id.
value    String    new value
Note: Adds a first dummy option with label "Seleccione" 
*/  
 function addOption(object,value){
 	  object=findObj(object);
	  if(object != null && object.type != null && object.type=="select-one"){
		  if(object.options.length==0){
			  var nuevo = document.createElement("OPTION");
			  nuevo.text="SELECCIONE";
			  nuevo.value="";
			  object.options.add(nuevo);
			  nuevo=null;
		  }      
		  nuevo = document.createElement("OPTION");
		  nuevo.value=value[0]?value[0]:value;
		  nuevo.text=value[1]?value[1]:value;
		  object.options.add(nuevo);
		  nuevo=null;
		  }
	  object= null; 
 }
 
 
 /*
Attaches the array elements to a SELECT object as Options.
object   String    Object Id.
arreglo  Array     new value
*/  
function cargaSelect(object,arreglo){
  for (e=0 ; e < arreglo.length ; e++){
		addOption(object,arreglo[e]);
	}
  //selObj=findObj(object);
}


/*
Delete all options for a SELECT object.
object   String    Object Id.
*/  
function resetOptions(object){
  	  object=findObj(object);
	  if(object != null )
      for(a=object.length-1; a>-1;a--)
	    object.options[a]=null;
	  object=null;
 }


//--Format and User experience Functions
/*
Defines row with standard proportions depending the number of the cells.
numCell    Integer   Number of data cells  
*/
function templateTable(numCell){
//numCell:   tab cell number
sizes=new Array(); 
sizes[1]=["100"];
sizes[2]=["48","4","48"];
sizes[3]=["30","4","30","4","30"];
sizes[4]=["22","1","22","1","22","1","22"];
sizes[5]=["18","2","18","2","18","2","18","2","18"];
sizes[6]=["15","2","15","2","15","2","15","2","15","2","15"];
setTable(sizes[numCell],"%");
}


/*
Writes a table row to the document.
tabArray    Array    dimension of data cells  
type		String	 dimension unit.	
*/
function setTable(tabArray,type){
		document.writeln('<tr>');
		for (i=0; i<tabArray.length; i++){
			document.writeln('<td height="0" width="' + tabArray[i]+type+'">&nbsp;</td>');
		}
		document.writeln('</tr>');
}


/*
Checks the length of a String and cuts it to the length defined.
object   String    Number of data cells  
maxlen	 Integer   Chars allowed.
*/

function maxlength(object,maxlen){
	    if(object.value.length >maxlen){
		  alert("Se ha excedido la longitud del campo: " + maxlen +" caracteres. Corriga por favor" );
		  object.value= object.value.substr(0,maxlen);
		  return true;
		}		
		else return false;
	}

/*
Checks the length of a String and cuts it to the length defined.
object   String    Number of data cells  
maxlen	 Integer   Chars allowed.
*/
	
	
function fnCheckEmptyFields(array) {
	var element = null;
	var respuesta = false;
	var objectFocus = null;
	if (array != null && array.length != null) {
		respuesta = true;
		for (i = 0; i < array.length; i++) {
			  element = findObj(array[i]);
			if ( element != null && element.value == "" ) {
			    objectFocus=respuesta?element:objectFocus;
				respuesta = false;
				element.style.background="#D00D17";
				element.style.color="#FFFFFF";
			}else{
			   if(element.type=="text" ){
			   	element.className="DSP" ; 
			   }else{
			    element.style.background="#FFFFFF";
				element.style.color="#000000";
				} 
			}
		}
	}
   if(!respuesta){
   				alert('Es necesario llenar todos los campor requeridos. Se muestran en rojo los campos faltantes');
				changeVis("ANALISTINFO");
				setFocus(objectFocus.id);
   }
   	element=null;objectFocus = null;	
	return respuesta;
}


function setFocus(objectId){
    try{
		findObj(objectId).focus();
		}catch(err){}
	
}
 

function removeCommas( strValue ) {
 if(strValue != null){
  var objRegExp = /,/g; 
  return strValue.replace(objRegExp,'');
  }
}


function addCommas( strValue ) {
 if(!isNaN(strValue)){
   var  objRegExpDecimal= /(^[\-\+]?)(\d+)(\.?$)/;
   if(objRegExpDecimal.test(strValue)){
		strValue=strValue.replace(objRegExpDecimal, '$1$2.00');
		}
   
    var objRegExp  = /(\#?)(^[.*\s*\$*]?)([-+]?\d+)(\d{3})/;
 	while(objRegExp.test(strValue)) {
         strValue = strValue.replace(objRegExp, '$1$2$3,$4');
   	}
	objRegExpDecimal=null;	
 } 
 return strValue;
}



function formatNumber() {
    evento=window.event.srcElement ? window.event : null;
	if(evento){
		obj=evento.srcElement;
		if (obj) 
			switch(evento.type){
			case "focus" : 
				 obj.value=removeCommas(obj.value);
				 obj.select();
				 break;
			case "blur"  : 
				 obj.value=addCommas(obj.value);
				 break;
			case "keyup"  :
				 if(evento.keyCode< 65) return null;
				 var regu1 = /(^\.$)/;    //adds a 0 integer to floats....
			  	  setValue(obj.name,regExpReplace(getValue(obj.name),regu1,'0$1'));
				 var regu2 = /(0\.)(\D+$)/g; // accepts  only (##.) for integers
				  setValue(obj.name,regExpReplace(getValue(obj.name),regu2,'$1'));
 				 var regu3 = /(^\D*$)/; // accepts  only (##.) for integers
				  setValue(obj.name,regExpReplace(getValue(obj.name),regu3,''));
 				 var regu4 = /(\d*)(\.)(\d{0,2})(\d*)(\D*)/; // accepts  only (##.) for integers
				  setValue(obj.name,regExpReplace(getValue(obj.name),regu4,'$1$2$3'));
 				 var regu5 = /(^\d*)(\.?)(\D*$)/; // accepts  only (##.) for integers
				  setValue(obj.name,regExpReplace(getValue(obj.name),regu5,'$1$2'));
				 var regu6 = /\s/g;    //removes whitespace
				  setValue(obj.name,regExpReplace(getValue(obj.name),regu6,''));
				 var regu7= /(^0)(\d+$)/;    //removes 
				  setValue(obj.name,regExpReplace(getValue(obj.name),regu7,'$2'));
					 
			regu1=null;	regu2=null;	regu3=null; regu5=null;regu6=null;regu7=null;
			}
	}
	evento=null;
}

function setOnlyCurrency(arrObjects){
	var arregloFormat=["focus","blur","keyup"];
	for (var e=0;e<arrObjects.length;e++){
 		if(findObj(arrObjects[e]))
			for(var i=0;i<arregloFormat.length;i++){
			  addListener(arrObjects[e],arregloFormat[i],formatNumber);
			}
	}
	arregloFormat=null;
}





/*Modifies an attribute REQUIRED to an element
objName     String, Array    Id of object to set
isReg       boolean          true=required
*/
function setRequired(objName,isReg){
	isReg= isReg == false ? false : true;
	if(objName[1]){
		for (i=0 ; i < objName.length ; i++){
			objAux = findObj(objName[i]);
			if (objAux!= null)objAux.required= isReg;
		}
	}else{
		
		obj = findObj(objName);
		if(obj != null)
		obj.required= isReg;
	}

}

/*Checks if all required elements inside a cotainer have a value
node     	String       Container's id.  (container = DIV, TABLE, SPAN, etc..)
*/
function REQ(node){
    var node=findObj(node);
    var messageReq="Los siguientes campos son requeridos para continuar:" ;
	var messageReq1Final;
	if(node.hasChildNodes()){
 	messageReq1= requiredCheck(node.getElementsByTagName('input'));
  	messageReq2= requiredCheck(node.getElementsByTagName('select'));
	messageReq3= requiredCheck(node.getElementsByTagName('textarea'));
	}

	messageReq1Final= messageReq1 +  messageReq2 + messageReq3;

		 
	if(messageReq1Final.length>0 ){alert(messageReq + messageReq1Final);return false;}else return true;
}
function REQNA(node){
    var node=findObj(node);
    var messageReq="Los siguientes campos son requeridos para continuar:" ;
	var messageReq1Final;
	if(node.hasChildNodes()){
 	messageReq1= requiredCheckNA(node.getElementsByTagName('input'));
  	messageReq2= requiredCheckNA(node.getElementsByTagName('select'));
	messageReq3= requiredCheckNA(node.getElementsByTagName('textarea'));
	}

	messageReq1Final= messageReq1 +  messageReq2 + messageReq3;

		 
	if(messageReq1Final.length>0 ){return false;}else return true;
}

/*Checks the attribute required 
elementosb     	Collection   of elements
*/
function requiredCheck(elementos){
var faltantesREQ="";
var faltante="";
var primero=true;
	for (ireq=0 ; ireq <elementos.length ; ireq++){
			//alert("1" +elementos[ireq].id + elementos[ireq].value + elementos[ireq].disabled );		
		if(elementos[ireq].required && !elementos[ireq].disabled){			
			if(elementos[ireq].required && elementos[ireq].value.length == 0){
			  if(primero){
			  	elementos[ireq].scrollIntoView(true);
			  	primero= false;
			  }
				if(elementos[ireq].messReq){
					faltante =  elementos[ireq].messReq;
				}else faltante  = "Campo " + elementos[ireq].name ;
				//if(elementos[ireq].type!='select-one')
				if(elementos[ireq].className.indexOf('required')== -1 )
					elementos[ireq].className='required' + elementos[ireq].className;
				faltantesREQ+=   "\n" +  faltante;
			}else{
				//if(elementos[ireq].type!='select-one')
					elementos[ireq].className= elementos[ireq].className.replace('required','');
			}
		}else{
						//if(elementos[ireq].type!='select-one')
					elementos[ireq].className= elementos[ireq].className.replace('required','');
			}

	}
return faltantesREQ;	
}
function requiredCheckNA(elementos){
var faltantesREQ="";
var faltante="";
var primero=true;
	for (ireq=0 ; ireq <elementos.length ; ireq++){
			//alert("1" +elementos[ireq].id + elementos[ireq].value + elementos[ireq].disabled );		
		if(elementos[ireq].required && !elementos[ireq].disabled){			
			if(elementos[ireq].required && elementos[ireq].value.length == 0){
			  if(primero){
			  	elementos[ireq].scrollIntoView(true);
			  	primero= false;
			  }
				if(elementos[ireq].messReq){
					faltante =  elementos[ireq].messReq;
				}else faltante  = "Campo " + elementos[ireq].name ;
				//if(elementos[ireq].type!='select-one')
				if(elementos[ireq].className.indexOf('required')== -1 )
					elementos[ireq].className='' + elementos[ireq].className;
				faltantesREQ+=   "\n" +  faltante;
			}else{
				//if(elementos[ireq].type!='select-one')
					elementos[ireq].className= elementos[ireq].className.replace('required','');
			}
		}else{
						//if(elementos[ireq].type!='select-one')
					elementos[ireq].className= elementos[ireq].className.replace('required','');
			}

	}
return faltantesREQ;	
}

function onlyLetters() {
   	evento=window.event.srcElement ? window.event : null;
   	if (evento.type== 'keyup' ){
        if(evento.keyCode<48 ) return null;
		obj=evento.srcElement;
		position=getSelectionEnd(obj);
		setValue(obj.name,getValue(obj.name).replace(/[^A-Z\sa-z\u00D1\u00F1\u00C1\u00E1\u00C9\u00E9\u00CD\u00ED\u00D3\u00F3\u00DA\u00FA\u00FC\.]/g,'').replace(/^\s+|\s+$/g,'').replace(/\b\s\s+\b/gi,' ').toUpperCase());
		obj.fireEvent("onchange");
		moveCursorTo(obj, position);
	}	
  evento=null;	
}	
function setOnlyLetters(arrObjects){
	for (var e=0;e<arrObjects.length;e++){
 		if(findObj(arrObjects[e]) != null){
			  addListener(arrObjects[e],'keyup',onlyLetters);
			  addListener(arrObjects[e],'change',onlyLetters);
			   findObj(arrObjects[e]).title="Solo letras";
		}
	}
}
 // Funcion para permitir comas tambien
function onlyLettersCommas() {
   	evento=window.event.srcElement ? window.event : null;
   	if (evento.type== 'keyup' ){
        if(evento.keyCode<48 ) return null;
		obj=evento.srcElement;
		position=getSelectionEnd(obj);
		setValue(obj.name,getValue(obj.name).replace(/[^A-Z\sa-z\u00D1\u00F1\u00C1\u00E1\u00C9\u00E9\u00CD\u00ED\u00D3\u00F3\u00DA\u00FA\u00FC\.\,]/g,'').replace(/^\s+|\s+$/g,'').replace(/\b\s\s+\b/gi,' ').toUpperCase());
		obj.fireEvent("onchange");
		moveCursorTo(obj, position);
	}	
  evento=null;	
}	
function setOnlyLettersCommas(arrObjects){
	for (var e=0;e<arrObjects.length;e++){
 		if(findObj(arrObjects[e]) != null){
			  addListener(arrObjects[e],'keyup',onlyLettersCommas);
			  addListener(arrObjects[e],'change',onlyLettersCommas);
			   findObj(arrObjects[e]).title="Solo letras";
		}
	}
}
		
function onlyNumbers() {
   evento=window.event.srcElement ? window.event : null;
 	if(evento){
		obj=evento.srcElement;
		if (obj){
				 if(evento.keyCode<48 && evento.keyCode != 8 ) return null;
				  if(evento.keyCode>47){ 
				  	setValue(obj.name,getValue(obj.name).replace(/[^\d]/g,''));
				  	obj.fireEvent("onchange");

				  }
		}
	}evento=null;


}
function setOnlyNumbers(arrObjects){    
	for (var e=0;e<arrObjects.length;e++)
 		if(findObj(arrObjects[e]) != null){
			  addListener(arrObjects[e],"keyup",onlyNumbers);
			   findObj(arrObjects[e]).title="Solo cifras";
		 }
	
}

function onlyLettersNumbers() {
   	evento=window.event.srcElement ? window.event : null;
	obj=evento.srcElement;

	 if(evento.keyCode<48 && evento.keyCode != 8 ) return null;
	  if(evento.keyCode>47){
		position=getSelectionEnd(obj);
		setValue(obj.name,getValue(obj.name).replace(/[^\dA-Z\sa-z\u00D1\u00F1\u00C1\u00E1\u00C9\u00E9\u00CD\u00ED\u00D3\u00F3\u00DA\u00FA\u00FC\.\,\-/#&]/g,'').replace(/^\s+|\s+$/g,'').replace(/\b\s\s+\b/gi,' ').toUpperCase());
		//fireEvent(obj.id,"onchange");
		moveCursorTo(obj, position);
	 }
	evento=null;
}

function onlyLettersNumbersExplicit() {
   	evento=window.event.srcElement ? window.event : null;
	obj=evento.srcElement;

	 if(evento.keyCode<48 && evento.keyCode != 8 ) return null;
	  if(evento.keyCode>47){
		position=getSelectionEnd(obj);
		setValue(obj.name,getValue(obj.name).toUpperCase().replace(/[^\dA-Z\sa-z\u00D1\u00C1\u00C9\u00CD\u00D3\u00DA]/g,'').replace(/^\s+|\s+$/g,'').replace(/\b\s\s+\b/gi,' '));
		//fireEvent(obj.id,"onchange");
		moveCursorTo(obj, position);
	 }
	evento=null;
}


function onlyLettersNumbersNoCursor() {
	evento=window.event.srcElement ? window.event : null;
	obj=evento.srcElement;
	
	if(evento.keyCode<48 && evento.keyCode != 8 ) return null;
	if(evento.keyCode>47){
		//position=getSelectionEnd(obj);
		//setValue(obj.name,getValue(obj.name).replace(/[^\dA-Z\sa-zÑ\u00F1Á\u00E1ÉéÍ\u00EDÓ\u00F3Úúü\.\,\-/#&]/g,'').replace(/^\s+|\s+$/g,'').replace(/\b\s\s+\b/gi,' ').toUpperCase());
		//obj.fireEvent("onchange");
		//moveCursorTo(obj, position);
	}
	evento=null;
}

function setOnlyLettersNumbers(arrObjects){
	for (var e=0;e<arrObjects.length;e++)
 		if(findObj(arrObjects[e])){
			  addListener(arrObjects[e],"keyup",onlyLettersNumbers);
		 }
}

function setOnlyLettersNumbersExplicit(arrObjects){
	for (var e=0;e<arrObjects.length;e++)
 		if(findObj(arrObjects[e])){
			  addListener(arrObjects[e],"keyup",onlyLettersNumbersExplicit);
		 }
}



function onlyTelephones() {
   evento=window.event.srcElement ? window.event : null;
    obj=evento.srcElement;
		if (obj){
			 if(!isNaN(obj.value) && (obj.value *1)== 0){
			 obj.value=''
			 return false;
			 }
			 	
			 
			if(obj.asociado)
			objAsoc=findObj(obj.asociado);
			if (obj.tipo=='lada' && objAsoc ){
				 objAsoc.maxLength = obj.value.length==3 ? 7 : 8;
				 objAsoc.value.substr(obj.value.length==3 ? 7 : 8);
		 	}else{ 
				 objAsoc.maxLength = obj.value.length==8? 2 : 3; 
				 objAsoc.value.substr(obj.value.length==8 ? 2 : 3);
			}
			if(objAsoc && objAsoc.value.length > 0  &&  obj.value.length>0 )
				val=objAsoc.value + obj.value;
			else 
			    val= -1;
					
			if( val.length != 10 && val > 0  ){alert('La marcaci\u00F3n debe ser igual a 10 d\u00EDgitos'); setFocus(objAsoc.id);}
				  			  
				

				val=null;objAsoc=null;obj=null;
			}evento=null;
}
function setOnlyTelephones(lada,tel){
			
			lada = findObj(lada);
			tel = findObj(tel);
			if(lada && tel){
			  lada.asociado=tel.id;
			  lada.tipo="lada";
			  lada.title="La marcaci\u00F3n (tel + lada) debe ser de 10 d\u00EDgitos";
			  tel.asociado=lada.id;
			  tel.tipo="telefono";
			   tel.title="La marcaci\u00F3n (tel + lada) debe ser de 10 d\u00EDgitos";
			  lada.maxLength=3;
			  tel.maxLength=8;
			  addListener(lada.name,"keyup",onlyNumbers);
			  addListener(tel.name,"keyup",onlyNumbers);
			  addListener(lada.name,"blur",onlyTelephones);
			  addListener(tel.name,"blur",onlyTelephones);

			  }
}

function onlyDates() {
   evento=window.event.srcElement ? window.event : null;
   obj=evento.srcElement;
		if (obj){
			var mesAsoc=null; anoAsoc=null; diaAsoc=null; 
			if(obj.tipo == "dia"){
					if(!onlyDays())return null;
					mesAsoc= obj.mes; anoAsoc= obj.ano;	diaAsoc= obj.name;
	
			}else if(obj.tipo == "mes"){
					if(!onlyMonths())return null;
					diaAsoc= obj.dia; anoAsoc= obj.ano; mesAsoc= obj.name;
					
			}else if(obj.tipo == "ano"){
					if(!onlyYears())return null;
					diaAsoc= obj.dia; mesAsoc= obj.mes; anoAsoc= obj.name;
			}
			
			if(diaAsoc && mesAsoc && anoAsoc ){
				diaAsoc=findObj(diaAsoc); mesAsoc=findObj(mesAsoc); anoAsoc=findObj(anoAsoc); 
			}	
			
			if (diaAsoc && mesAsoc && anoAsoc && diaAsoc.value.length>0  && mesAsoc.value.length>0 && anoAsoc.value.length>0 ){
				var fecha = new Date(); 
				//fecha.setMonth((1*mesAsoc.value)-1);
				fecha.setFullYear((1 * anoAsoc.value),((1 * mesAsoc.value)-1), (1 * diaAsoc.value));
				//fecha.setDate((1 * diaAsoc.value));
				if (fecha.getFullYear() < 1900 ) {
					alert('A\u00F1o no v\u00E1lido'); anoAsoc.value=""; setFocus(anoAsoc.id); 
					if(obj.edadAnos && findObj(obj.edadAnos)!= null ) findObj(obj.edadAnos).value="";
					return false;
					}
			    

			    if( (fecha.getDate() != (1 * diaAsoc.value)) ){ // || (fecha.getFullYear() != (1 * anoAsoc.value)) || (fecha.getMonth() != ((1 * mesAsoc.value)-1))){
						alert('Fecha no v\u00E1lida'); diaAsoc.select(); setFocus(diaAsoc.id); 
						if(obj.edadAnos)  findObj(obj.edadAnos).value= "";
						if(obj.edadMeses) findObj(obj.edadMeses).value= "";
						if(diaAsoc.onchange) diaAsoc.fireEvent("onchange");
						if(obj.edadAnos && findObj(obj.edadAnos)!= null ) findObj(obj.edadAnos).value="";
						
				}else{
					if(obj.edadAnos){
							if ( actual.getTime() >  fecha.getTime()){
								anioss = actual.getFullYear() - fecha.getFullYear(); 
								if(actual.getMonth() < fecha.getMonth())
									anioss--;
								else if (actual.getMonth()  ==  fecha.getMonth() && actual.getDate() < fecha.getDate())
									anioss--;
										
								 findObj(obj.edadAnos).value= anioss;
									// borrado por error acumulativo en anios de 366 dias
								//findObj(obj.edadAnos).value= Math.floor((actual.getTime()  - fecha.getTime()  )/ (1000 * 60 * 60 * 24* 365));
								findObj(obj.edadAnos).fireEvent("onchange");
							}else {
								alert('La fecha de nacimiento no es puede ser posterior al d\u00EDa de hoy');
								anoAsoc.value= "";
								}
							
							
					}
					if(obj.edadMeses){
							actual =new Date();
							mesesExtras = actual.getMonth() - fecha.getMonth()
							findObj(obj.edadMeses).value= mesesExtras > -1 ? mesesExtras : mesesExtras * -1 ;
							findObj(obj.edadMeses).fireEvent("onchange");
					}
				}
			}
			
			
				
		diaAsoc=null;mesAsoc=null;anoAsoc=null;
		}evento=null;
}

function onlyDays() {
   evento=window.event.srcElement ? window.event : null;
   obj=evento.srcElement;
		if (obj){
		if(obj.value.length > 0 && ((1 * obj.value) > 31 || (1 *obj.value) < 1) ){
		    obj.value="";obj.select(); setFocus(obj.id);cleanEdad(obj);
			return false;
		}else{ 
				 obj.value = (1 * obj.value) < 10 && obj.value.length == 1 ? ('0' + obj.value):obj.value;
				 obj.fireEvent("onchange");
				}
		evento=null;
		}
		return true;
}
function onlyMonths() {
   evento=window.event.srcElement ? window.event : null;
   obj=evento.srcElement;
  		if (obj){
		if(obj.value.length > 0 && ((1 * obj.value) < 1 || (1*obj.value) > 12) ){
			obj.value="";setFocus(obj.id);cleanEdad(obj);
			return false;
		}else 
		 obj.value = (1 * obj.value) < 10 && obj.value.length ==1 ? ('0' + obj.value):obj.value;
		 obj.fireEvent("onchange");
		}evento=null;
		
		return true;
}



function onlyYears() {
   evento=window.event.srcElement ? window.event : null;
   obj=evento.srcElement;
		if (obj){
			obj.value =  obj.value.length == 2 ? (1900+ parseInt(-(-obj.value))) :obj.value ;
			if( obj.value.length ==4 && parseInt(1* obj.value) < 1910 || (parseInt(1 * obj.value) > (parseInt(new Date().getYear())+1)) ){
				alert('A\u00F1o no v\u00E1lido');
					obj.value="";setFocus(obj.id);cleanEdad(obj);
			return false;
			}else if(obj.value.length ==4 ){obj.fireEvent("onchange");}
		}evento=null;
		return true;
}


function cleanEdad(obj){
					if(obj.edadAnos){
						if(findObj(obj.edadAnos))
							findObj(obj.edadAnos).value= "";
					}
					if(obj.edadMeses){
						if(findObj(obj.edadMeses))
							findObj(obj.edadMeses).value= "";
					}
}


function setOnlyDates(dia,mes,ano,anioCalculo,mesCalculo){
			dia = findObj(dia);
			mes = findObj(mes);
			ano = findObj(ano);
			if(dia && mes && ano){
			  dia.mes=mes.name;
			  ano.mes=mes.name;
			  mes.dia=dia.name;
			  ano.dia=dia.name;
			  mes.ano=ano.name;
			  dia.ano=ano.name;
			   if(anioCalculo){anioCalculo=findObj(anioCalculo);
				   anioCalculo.setAttribute('mes',mes.name);
				   anioCalculo.setAttribute('ano',ano.name);
				   anioCalculo.setAttribute('dia',dia.name);
			   }
			   if(mesCalculo)mesCalculo=findObj(mesCalculo);
			   if(anioCalculo){
			   	  anioCalculo.readOnly=true;
				  ano.edadAnos=anioCalculo.name;
				  mes.edadAnos=anioCalculo.name;
				  dia.edadAnos=anioCalculo.name;
				  ano.setAttribute('nextSlide',anioCalculo.id);
			  }
			  if(mesCalculo){
			 	  mesCalculo.readOnly=true;
				  ano.edadMeses=mesCalculo.name;
				  mes.edadMeses=mesCalculo.name;
				  dia.edadMeses=mesCalculo.name;
			  }
			  dia.tipo="dia";
			  mes.tipo="mes";
			  ano.tipo="ano";			  			  
			  dia.maxLength=2;
			  mes.maxLength=2;
  			  ano.maxLength=4;
			  
			dia.setAttribute('nextSlide',mes.id);
		    mes.setAttribute('nextSlide',ano.id);			
			
			  
			  
			  addListener(dia.name,"keyup",onlyNumbers);
			  addListener(mes.name,"keyup",onlyNumbers);
			  addListener(ano.name,"keyup",onlyNumbers);
			  addListener(dia.name,"blur",onlyDates);
			  addListener(mes.name,"blur",onlyDates);
			  addListener(ano.name,"blur",onlyDates);
			  addListener(dia,'keyup',Slide);
	          addListener(mes,'keyup',Slide);
	          addListener(ano,'keyup',Slide);
			  }
}


function validMonths() {
   evento=window.event.srcElement ? window.event : null;
	if(evento) 	obj=evento.srcElement;
	if (obj){
	   obj.value=obj.value.replace(/[^\d]/g,'');
		if(obj.value.length > 0 && !isNaN(obj.value * 1) && parseInt(1 * obj.value) > 11 )
		 {alert('No es un mes v\u00E1lido, 0 a 11 meses ');obj.value="";setFocus(obj.id);obj.select();}
		else {var reg= /(^\d$)/;obj.value=regExpReplace(obj.value,reg,'0$1');} 
	}
	evento=null;obj=null;reg=null;
}


function setValidMonths(arrObjects){
	for (var e=0;e<arrObjects.length;e++)
 		if(findObj(arrObjects[e])){
			  addListener(arrObjects[e],"blur",validMonths);
			  findObj(arrObjects[e]).title="0 a 11 meses";
			  }
}





function onlyRFC() {
   evento=window.event.srcElement ? window.event : null;
	if(evento){
		obj=evento.srcElement;
		if (obj){
			 obj.value= obj.value.toUpperCase();
	  		 var reg= /^[a-zA-Z]{3}[a-zA-Z]?\d\d[01]\d[0123]\d$/;
			 if(!reg.test(obj.value) && obj.value.length>0 ){
			 	alert('RFC no v\u00E1lido');
				obj.value="";
				return false;
			 }else  if(obj.maxLength != null && obj.maxLength != obj.value.length && obj.value.length > 0){
			 	alert('RFC no v\u00E1lido');
				obj.value="";
				return false;
			 }
			 if( obj.maxLength == obj.value.length){
				 if(! isNaN(obj.value.substring(obj.value.length,obj.value.length-2))){// validar los dias validos
						if (obj.value.substring(obj.value.length,obj.value.length-2)*1 > 31  || obj.value.substring(obj.value.length,obj.value.length-2)*1 == 0) {
							alert('RFC no v\u00E1lido');
							obj.value="";
							return false;				  
						}
				 } if(! isNaN(obj.value.substring(obj.value.length-4,obj.value.length-2)) ){// validar los meses validos
						if (obj.value.substring(obj.value.length-4,obj.value.length-2)*1 > 12  || obj.value.substring(obj.value.length-4,obj.value.length-2)*1 == 0 ) {
							alert('RFC no v\u00E1lido');
							obj.value="";
							return false;				  
						}
				 }
			 } 
			 
			 }  
		}
  evento=null;
  	
}
function onlyHomoClave() {
   evento=window.event.srcElement ? window.event : null;
	if(evento){
		obj=evento.srcElement;
		if (obj){ 
			obj.value= obj.value.toUpperCase();
	  		 var reg= /^[A-Z0-9]{3}$/;
			 if(!reg.test(obj.value) && obj.value.length>0  ){
			 	alert('Homoclave no v\u00E1lida');
				obj.value='';
				setFocus(obj.id);}
			 } 
		}
  evento=null;
  	
}	


function setOnlyHomoclave(arrObjects){
	for (var e=0;e<arrObjects.length;e++){
 		if(findObj(arrObjects[e])!= null){
			  addListener(arrObjects[e],'blur',onlyHomoClave);
			  findObj(arrObjects[e]).maxLength=3;
		}
	}
}

	
function setOnlyRFC(arrObjects){
	for (var e=0;e<arrObjects.length;e++){
 		if(findObj(arrObjects[e]))
			  addListener(arrObjects[e],'blur',onlyRFC);
			  objAux=null;
			  objAux=findObj(arrObjects[e]);
		      if(objAux!=null)objAux.maxLength=10;
	}
}





function setCalculaRFC(pRFC,pHomoClave,ppaterno,pmaterno,pnombre,pdia,pmes,panios){
			var rfcObj = findObj(pRFC), homoObj = findObj(pHomoClave); 
			var paternoObj = findObj(ppaterno), maternoObj = findObj(pmaterno), nombreObj = findObj(pnombre);
			var diaObj = findObj(pdia), mesObj = findObj(pmes),    anoObj = findObj(panios);
			
			if(rfcObj ){
			  if(paternoObj && maternoObj && nombreObj){
					rfcObj.setAttribute('paterno' ,(paternoObj.id?paternoObj.id:paternoObj.name));
					rfcObj.setAttribute('materno',(maternoObj.id?maternoObj.id:maternoObj.name));
					rfcObj.setAttribute('nombre',(nombreObj.id?nombreObj.id:nombreObj.name));
					paternoObj.setAttribute('RFC',(rfcObj.id?rfcObj.id:rfcObj.name));
					maternoObj.setAttribute('RFC',(rfcObj.id?rfcObj.id:rfcObj.name))
					nombreObj.setAttribute('RFC',(rfcObj.id?rfcObj.id:rfcObj.name));
					
					addListener(paternoObj.name,"change",CalculaRFC);
				  	addListener(maternoObj.name,"change",CalculaRFC);
				  	addListener(nombreObj.name,"change",CalculaRFC);
					addListener(paternoObj.name,"blur",CalculaRFC);
				  	addListener(maternoObj.name,"blur",CalculaRFC);
				  	addListener(nombreObj.name,"blur",CalculaRFC);
				}
				
				if(rfcObj && homoObj){
					rfcObj.setAttribute('homoclave',(homoObj.id?homoObj.id:homoObj.name));
					
					homoObj.setAttribute('RFC',(rfcObj.id?rfcObj.id:rfcObj.name));
					addListener(homoObj.name,"blur",onlyHomoClave);
					homoObj.maxLength=3;
				}
				
			  if(diaObj && mesObj && anoObj){
			  		rfcObj.setAttribute('dia' ,(diaObj.id?diaObj.id:diaObj.name));
					rfcObj.setAttribute('mes',(mesObj.id?mesObj.id:mesObj.name));
					rfcObj.setAttribute('anio',(anoObj.id?anoObj.id:anoObj.name));
					diaObj.setAttribute('RFC',(rfcObj.id?rfcObj.id:rfcObj.name));
					mesObj.setAttribute('RFC',(rfcObj.id?rfcObj.id:rfcObj.name))
					anoObj.setAttribute('RFC',(rfcObj.id?rfcObj.id:rfcObj.name));
				 	addListener(diaObj.name,"change",CalculaRFC);
				  	addListener(mesObj.name,"change",CalculaRFC);
				  	addListener(anoObj.name,"change",CalculaRFC);
					addListener(diaObj.name,"blur",CalculaRFC);
				  	addListener(mesObj.name,"blur",CalculaRFC);
				  	addListener(anoObj.name,"blur",CalculaRFC);
			  }
			   
			  } 
}



function CalculaRFC(){
 evento=window.event.srcElement ? window.event : null;
 obj=evento.srcElement;
		if (obj){
			var rfcAsoc=null; 
			var patObj=null,matObj=null,nomObj=null,diaObj=null,mesObj=null,anioObj=null,homoObj=null;
			if(obj.getAttribute('RFC')){
					rfcAsoc= findObj(obj.getAttribute('RFC'));
					if(rfcAsoc != null){ 
						if(rfcAsoc.getAttribute('paterno')) patObj=findObj(rfcAsoc.getAttribute('paterno' ));
						if(rfcAsoc.getAttribute('materno')) matObj=findObj(rfcAsoc.getAttribute('materno' ));
						if(rfcAsoc.getAttribute('nombre')) nomObj=findObj(rfcAsoc.getAttribute('nombre' ));
						if(rfcAsoc.getAttribute('homoclave')) homoObj=findObj(rfcAsoc.getAttribute('homoclave' ));
						if(rfcAsoc.getAttribute('dia'))   diaObj=findObj(rfcAsoc.getAttribute('dia' ));			 
						if(rfcAsoc.getAttribute('mes'))   mesObj=findObj(rfcAsoc.getAttribute('mes' ));
						if(rfcAsoc.getAttribute('anio'))  anioObj=findObj(rfcAsoc.getAttribute('anio' ));
						
						if(patObj && matObj && nomObj && diaObj && mesObj && anioObj ){
							var RFC='';
							var homoclave='';
						if( (patObj.value.length > 2 || matObj.value.length > 2) && nomObj.value.length >2 )	
							RFC = getRFCBasico(quitarAcentos(patObj.value),quitarAcentos(matObj.value),quitarAcentos(nomObj.value));
							
							if(anioObj.value.length==4 && mesObj.value.length ==2 && diaObj.value.length == 2  ){
								RFC += anioObj.value.substr(2,2)+ mesObj.value+ diaObj.value;
								if( RFC.length > 8) 
									rfcAsoc.value=RFC;
					
								if(homoObj && RFC.length==10){
									homoclave= calculaHomoclave(quitarAcentos(patObj.value) + ' ' + quitarAcentos(matObj.value)+ ' ' +quitarAcentos(nomObj.value));
									
									homoObj.value=homoclave + DigitoVerificardor(RFC+homoclave);
								}
							}else{
								if( RFC.length > 8) rfcAsoc.value=RFC;
							    if(homoObj) homoObj.value='';
							}

						}
				}			
			}
		}		
}

function quitarAcentos(strAcentos){
return strAcentos.toUpperCase().replace('\u00C1','A').replace('\u00C9','E').replace('\u00CD','I').replace('\u00D3','O').replace('\u00DA','U');


}
function getRFCBasico(pOrgPaterno,pOrgMaterno,pOrgNombre){
	var rfcStr_1=null;
	var orgPaterno=pOrgPaterno.replace(/^\s+|\s+$/g,'').replace(/\b\s\s+\b/gi,' ');
	var orgMaterno=pOrgMaterno.replace(/^\s+|\s+$/g,'').replace(/\b\s\s+/gi,' ');
	var orgNombre=pOrgNombre.replace(/^\s+|\s+$/g,'').replace(/\b\s\s+\b/gi,' ');
	//quitar articulos de apellidos
	var paternoRFC = orgPaterno.replace(/\b(DE(L)?|LA(S)?|los|y|a|mac|von|van)\s+/gi,'').replace(/\bmc/,'');
	var maternoRFC = orgMaterno.replace(/\b(de(l)?|la(s)?|los|y|a|mac|von|van)\s+/gi,'').replace(/\bmc/,'');
	//quitar nombres comunes, solo si no van solos, ademas de articulos
	var nombreRFC = orgNombre.replace(/\b(j(ose|\.)?|ma(ria|\.)?)\s+/i,'');
	nombreRFC = nombreRFC.replace(/\b(de(l)?|la(s)?|los|y|a|mac|von|van)\s+/gi,'');
	nombreRFC = nombreRFC.replace(/\bmc/,'');
	var malas ="BUEI,BUEY,CACA,CACO,CAGA,CAGO,CAKA,CAKO,COGE,COJA,KOGE,KOJO,KAKA,KULO,MAME,MAMO";
		malas = malas + ",MEAR,MEAS,MEON,MION,COJE,COJI,COJO,CULO,FETO,GUEY,JOTO,KACA,KACO,KAGA";
		malas = malas +  ",KAGO,MOCO,MULA,PEDA,PEDO,PENE,PUTA,PUTO,QULO,RATA,RUIN";
	var arre11 = malas.split(',');
	if( paternoRFC.length == 0){
		paternoRFC = maternoRFC; 
		maternoRFC='';
	}	
	if( maternoRFC.length ==  0 )
		maternoRFC= 'X';
		

	var iniPaternoReg= /(^\D)([^AEIOU]*)([AEIOU])(\D*$)/;    //removes 
		ini1=regExpReplace(paternoRFC,iniPaternoReg,'$1$3');
		rfcStr_1=ini1.substr(0,2) + maternoRFC.substr(0,1) + nombreRFC.substr(0,1);


      //Eliminar del RFC palabras no coherentes
	  
	  	for  (yy = 0; yy < arre11.length;yy ++){
			  if(rfcStr_1==arre11[ yy ]){
			  	rfcStr_1=	rfcStr_1.replace(/(\D)(\D)(\D)(\D)/,'$1X$3$4'); 	
				break;
			 } 
	   		}

	    
		
	//	alert(rfcStr_1); 
//		-------------------------------

		return rfcStr_1;
}
function calculaHomoclave(nombreCompleto){
 		var nomTotal =nombreCompleto.replace(/\b\s\s+\b/gi,' ');
		var nomNum='0';
		//alert(nomTotal)
	for(xy=0 ; xy <nomTotal.length ; xy++){
		if (nomTotal.charAt(xy)== 'A')      auxNum =  '11';
		else if (nomTotal.charAt(xy)== 'B') auxNum = '12';
		else if (nomTotal.charAt(xy)== 'C') auxNum = '13';
		else if (nomTotal.charAt(xy)== 'D') auxNum = '14';
		else if (nomTotal.charAt(xy)== 'E') auxNum = '15';
		else if (nomTotal.charAt(xy)== 'F') auxNum = '16';
		else if (nomTotal.charAt(xy)== 'G') auxNum = '17';
		else if (nomTotal.charAt(xy)== 'H') auxNum = '18';
		else if( nomTotal.charAt(xy)== 'I') auxNum = '19';
		else if( nomTotal.charAt(xy)== 'J') auxNum = '21';
		else if( nomTotal.charAt(xy)== 'K') auxNum = '22';
		else if( nomTotal.charAt(xy)== 'L') auxNum = '23';
		else if( nomTotal.charAt(xy)== 'M') auxNum = '24';
		else if( nomTotal.charAt(xy)== 'N') auxNum = '25';
		else if( nomTotal.charAt(xy)== 'O') auxNum = '26';
		else if (nomTotal.charAt(xy)== 'P') auxNum = '27';
		else if (nomTotal.charAt(xy)== 'Q') auxNum = '28';
		else if (nomTotal.charAt(xy)== 'R') auxNum = '29';
		else if (nomTotal.charAt(xy)== 'S') auxNum = '32';
		else if (nomTotal.charAt(xy)== 'T') auxNum = '33';
		else if (nomTotal.charAt(xy)== 'U') auxNum = '34';
		else if (nomTotal.charAt(xy)== 'V') auxNum = '35';
		else if (nomTotal.charAt(xy)== 'W' )auxNum = '36';
		else if (nomTotal.charAt(xy)== 'X') auxNum = '37';
		else if (nomTotal.charAt(xy)== 'Y') auxNum = '38';
		else if (nomTotal.charAt(xy)== 'Z' )auxNum = '39';
		else if (!isNaN(parseInt(nomTotal.charAt(xy))))  auxNum = '0' + nomTotal.charAt(xy);
		else if (nomTotal.charAt(xy)=='&') auxNum = '10';
		else if (nomTotal.charCodeAt(xy)==209 )auxNum = '10';
		else auxNum= '00';
		nomNum=nomNum + auxNum;
	}
	
	sumas=0;
	for(xz=0 ; xz < nomNum.length-1; xz++){
		prod1 = parseInt(nomNum.substr(xz, 2));
		prod2 = parseInt(nomNum.substr(xz + 1, 1));
		prod3 = prod1 * prod2;
		sumas += prod3;
	 }
	T_DIVID = sumas%1000 ;// -- Obtener residuo de los ultimos 3 digitos
	T_MOD = T_DIVID%34; ///-- Obtener el residuo de los ultimos 3 digitos-- entre 34
	T_DIVID = (T_DIVID - T_MOD) /34; // -- Obtener el Cociente entero
	residuos=[T_DIVID,T_MOD];
	homoc= new Array();
	
	
	for (x=0  ; x < residuos.length ; x++){
		if (residuos[x] ==  0) homoc[x]= '1' ; 
		else if (residuos[x] ==  1 ) homoc[x]= '2';
		else if (residuos[x] ==  2 ) homoc[x]= '3';
		else if (residuos[x] ==  3 ) homoc[x]= '4';
		else if (residuos[x] ==  4 ) homoc[x]= '5';
		else if (residuos[x] ==  5 ) homoc[x]= '6';
		else if (residuos[x] ==  6 ) homoc[x]= '7';
		else if (residuos[x] ==  7 ) homoc[x]= '8';
		else if (residuos[x] ==  8 ) homoc[x]= '9' ;
		else if (residuos[x] ==  9 ) homoc[x]= 'A';
		else if (residuos[x] ==  10 ) homoc[x]= 'B';
		else if (residuos[x] ==  11 ) homoc[x]= 'C';
		else if (residuos[x] ==  12 ) homoc[x]= 'D';
		else if (residuos[x] ==  13 ) homoc[x]= 'E';
		else if (residuos[x] ==  14 ) homoc[x]= 'F';
		else if (residuos[x] ==  15 ) homoc[x]= 'G';
		else if (residuos[x] ==  16 ) homoc[x]= 'H';
		else if (residuos[x] ==  17 ) homoc[x]= 'I';
		else if (residuos[x] ==  18 ) homoc[x]= 'J';
		else if (residuos[x] ==  19 ) homoc[x]= 'K';
		else if (residuos[x] ==  20 ) homoc[x]= 'L';
		else if (residuos[x] ==  21 ) homoc[x]= 'M';
		else if (residuos[x] ==  22 ) homoc[x]= 'N';
		else if (residuos[x] ==  23 ) homoc[x]= 'P';
		else if (residuos[x] ==  24 ) homoc[x]= 'Q';
		else if (residuos[x] ==  25 ) homoc[x]= 'R';
		else if (residuos[x] ==  26 ) homoc[x]= 'S';
		else if (residuos[x] ==  27 ) homoc[x]= 'T';
		else if (residuos[x] ==  28 ) homoc[x]= 'U';
		else if (residuos[x] ==  29 ) homoc[x]= 'V';
		else if (residuos[x] ==  30 ) homoc[x]= 'W';
		else if (residuos[x] ==  31 ) homoc[x]= 'X';
		else if (residuos[x] ==  32 ) homoc[x]= 'Y';
		else if (residuos[x] ==  33 ) homoc[x]= 'Z';
		else homoc[x]='Z';
}

//alert(homoc[0] + homoc[1]);
return homoc[0] + homoc[1];
}
function DigitoVerificardor(rfcStr){
	if (rfcStr.length !=12 	) return '';
	var digVer='';
	var T_PARCIAL=0;	
	for (xy= 0 ; xy < rfcStr.length; xy++){
		if (!isNaN(parseInt(rfcStr.charAt(xy))))  digito= parseInt(rfcStr.charAt(xy));
		else if (rfcStr.charAt(xy)== 'A' ) digito= 10;
		else if (rfcStr.charAt(xy)== 'B' ) digito= 11;
		else if (rfcStr.charAt(xy)== 'C' ) digito= 12;
		else if (rfcStr.charAt(xy)== 'D' ) digito= 13;
		else if (rfcStr.charAt(xy)== 'E' ) digito= 14;
		else if (rfcStr.charAt(xy)== 'F' ) digito= 15;
		else if (rfcStr.charAt(xy)== 'G' ) digito= 16;
		else if (rfcStr.charAt(xy)== 'H' ) digito= 17;
		else if (rfcStr.charAt(xy)== 'I' ) digito= 18;
		else if (rfcStr.charAt(xy)== 'J' ) digito= 19;
		else if (rfcStr.charAt(xy)== 'K' ) digito= 20;
		else if (rfcStr.charAt(xy)== 'L' ) digito= 21;
		else if (rfcStr.charAt(xy)== 'M' ) digito= 22;
		else if (rfcStr.charAt(xy)== 'N' ) digito= 23;
		else if (rfcStr.charAt(xy)== '&')  digito= 24;
		else if (rfcStr.charAt(xy)== 'O' ) digito= 25;
		else if (rfcStr.charAt(xy)== 'P' ) digito= 26;
		else if (rfcStr.charAt(xy)== 'Q' ) digito= 27;
		else if (rfcStr.charAt(xy)== 'R' ) digito= 28;
		else if (rfcStr.charAt(xy)== 'S' ) digito= 29;
		else if (rfcStr.charAt(xy)== 'T' ) digito= 30;
		else if (rfcStr.charAt(xy)== 'U' ) digito= 31;
		else if (rfcStr.charAt(xy)== 'V' ) digito= 32;
		else if (rfcStr.charAt(xy)== 'W' ) digito= 33;
		else if (rfcStr.charAt(xy)== 'X' ) digito= 34;
		else if (rfcStr.charAt(xy)== 'Y' ) digito= 35;
		else if (rfcStr.charAt(xy)== 'Z' ) digito= 36;
		else if (rfcStr.charAt(xy)== ' ')  digito= 37;
		else digito=0;
		T_PARCIAL+= digito * (13 - xy);
	} 
	
		T_MOD = Math.round(T_PARCIAL%11);
		if (T_MOD == 0){
			digVer =  '0';
		}else {
			T_PARCIAL = 11 - T_MOD;
			if( T_PARCIAL == 10){
			digVer = 'A';
			}else{
			digVer = T_PARCIAL;
			}
		}	
		return digVer;	
}

function onlyMail(){
	evento=window.event.srcElement ? window.event : null;
     obj=evento.srcElement;
	if (obj){
	   if(obj.value.length>0){
		var mailfilter  = /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/;
		if (!mailfilter.test(obj.value)){
			alert('email no v\u00E1lido');obj.select();setFocus(obj.id);
		}
	  }
	 mailfilter=null;obj=null;
	}		
		
}
function setOnlyMail(arrObjects){
	for (var e=0;e<arrObjects.length;e++)
 		if(findObj(arrObjects[e]))
			  addListener(arrObjects[e],"blur",onlyMail);
}


function validMinutes() {
   evento=window.event.srcElement ? window.event : null;
	if(evento) 	obj=evento.srcElement;
	if (obj){
	   obj.value=obj.value.replace(/[^\d]/g,'');
		if(!isNaN(parseInt(obj.value)) && parseInt(obj.value) > 59 )
		 {alert('Ingrese un valor entre  0 - 59 minutos ');obj.value="";}
		else {var reg= /(^\d$)/;obj.value=regExpReplace(obj.value,reg,'0$1');} 
	}
	evento=null;obj=null;reg=null;
}

function setValidMinutes(arrObjects){
	for (var e=0;e<arrObjects.length;e++)
 		if(findObj(arrObjects[e])!=null){
			  addListener(arrObjects[e],"blur",validMinutes);
			  findObj(arrObjects[e]).title="0 a 59 minutos";
			  }  
}


function validHours() {
   evento=window.event.srcElement ? window.event : null;
	if(evento) 	obj=evento.srcElement;
	if (obj){
	   obj.value=obj.value.replace(/[^\d]/g,'');
	   //obj.value=obj.value.length==0?'0':obj.value;
		if(!isNaN(parseInt(obj.value)) && parseInt(obj.value) > 23 )
		 {alert('Ingrese un valor entre 0 - 23 horas ');obj.value="";}
		else{var reg= /(^\d$)/;obj.value=regExpReplace(obj.value,reg,'0$1');} 
	}
	evento=null;obj=null;reg=null;
}

function setValidHours(arrObjects){
	for (var e=0;e<arrObjects.length;e++)
 		if(findObj(arrObjects[e])!=null){
			  addListener(arrObjects[e],"blur",validHours);
			  findObj(arrObjects[e]).title="0 a 23 horas";
			  }  
}


function EnableDisableNode(node,enable){

	var a =null;
	document.uniqueID;
	a= document.getElementById(node);
	//alert(a.id + ' ' + node)
	EnableDisableInputsNode(a,enable);
	if(a){
    var tables = a.getElementsByTagName('table')
	   for(var i=0;i<tables.length;i++){
			if(tables[i] != a && tables[i].hasChildNodes()){
				EnableDisableInputsNode(tables[i],enable);
				trs=tables[i].getElementsByTagName('tr');
				for (yccf=0;yccf.length;yccf++){
					if(trs[yccf]!= a.id  && trs[yccf] != tables[i] )
						EnableDisableInputsNode(trs[yccf],enable);
						tds=trs[yccf].getElementsByTagName('td');
						for (xss=0;xss.length;xss++){
							if(tds[xss]!= a.id  && tds[xss] != tables[i] &&  tds[xss] != trs[yccf] )
								EnableDisableInputsNode(tds[xss],enable);

						}
				}
			}
		}
	
	
	  var divs = a.getElementsByTagName('div')
		   for(i=0;i<divs.length;i++){
		   if(divs[i] != a )
			   EnableDisableInputsNode(divs[i],enable);
		   }	   
	

		var trs = a.getElementsByTagName('tr')
		   for(i=0;i<trs.length;i++){
		   if(trs[i] != a)
		     EnableDisableInputsNode(trs[i],enable);
			}
		var tds = a.getElementsByTagName('td')
		   for(i=0;i<tds.length;i++){
		   	 if(tds[i] != a)
		     EnableDisableInputsNode(tds[i],enable);
			}
	}					 
}



function EnableDisableInputsNode(inputContainer,enable){
	if(inputContainer && inputContainer.hasChildNodes()){
		var inputs1 = inputContainer.getElementsByTagName('input');
	   for(ih=0;ih<inputs1.length;ih++){
		   inputs1[ih].disabled = !enable;
	   }
	   var selects1 = inputContainer.getElementsByTagName('select');
	   for(var ig=0;ig<selects1.length;ig++){
		   selects1[ig].disabled = !enable;
		}
		var textareas1 =inputContainer.getElementsByTagName('textarea');
		for(var ij=0;ij<textareas1.length;ij++){
			textareas1[ij].disabled = !enable;
		}
	}
}

function EnableDisableObject(object,enable){
	if(findObj(object)!=null)findObj(object).disabled = !enable;
}

function ActivateDisplayNode(node,isActive){
	  //debug("toyotaLibrary:ActivateDisplayNode " + node + "," + isActive)
xDisplay(node,isActive);
EnableDisableNode(node,isActive);
}
function ActivateVisibilityNode(node,isActive){
xVisibility(node,isActive);
EnableDisableNode(node,isActive);
}

function ActivateVisibilityObject(object,isActive){
xVisibilityObject(object,isActive);
EnableDisableObject(object,isActive);
}

function ActivateDisplayObject(object,isActive){
xDisplayObject(object,isActive);
EnableDisableObject(object,isActive);
}

// SKIPTAB
function setSkipTab(object,jumpto){
	    setAttribute(object,'jumpto',jumpto);
		addListener(object,'focus',skipTab);
}
function skipTab(){
	evento=window.event.srcElement ? window.event : null;
    jumpedObj = evento.srcElement;
	setFocus(jumpedObj.getAttribute('jumpto'));
}

//SET CLICK ON  TAB
function setClickOnTab(object){
		addListener(object,'keyup',clickOnTab);
}

function clickOnTab(){
   evento=window.event.srcElement ? window.event : null;
   SrcObj=evento.srcElement   ;
   if(evento.keyCode=9 && (SrcObj.style.display != "none" && SrcObj.style.visibility != "hidden"))   
   SrcObj.fireEvent('onclick');
}

//SET VALID OFFICE HOURS
function setOfficeHours(hour,minute){
	    setAttribute(minute,'hour',hour);
		addListener(minute,'blur',OfficeHours);
}

function OfficeHours(){
	evento=window.event.srcElement ? window.event : null;
    source = evento.srcElement;
	minute = source.value;
	hour = findObj(source.getAttribute('hour')) != null ? findObj(source.getAttribute('hour')).value : "";
	//alert(hour + ":" + minute);
	
	if ((hour != "" && minute != "")  && ((hour == 8 && minute < 30)  ||  hour < 8 || hour > 21)){ 
		alert("Horario de Investigaci\u00F3n no v\u00E1lido. El horario de oficina es de 8:30 a 22:00 hrs.");
		findObj(source.getAttribute('hour')).value = ""
		setFocus(source.getAttribute('hour'));

		source.value = ""
	}else {}

}


// DATE SLIDE

function Slide(){
   evento=window.event.srcElement ? window.event : null;
   SrcObj=evento.srcElement ;
 
   if(SrcObj.getAttribute('nextSlide')){
      if(evento.keyCode > 47 ) {   
   		  if ( SrcObj.value.length == SrcObj.getAttribute('maxlength')) {
		  //findObj('datos').innerHTML += SrcObj.id + "  -->  " + SrcObj.getAttribute('nextSlide') + "<br>";
		       if ( findObj(SrcObj.getAttribute('nextSlide')).value.length != findObj(SrcObj.getAttribute('nextSlide')).getAttribute('maxlength')){
	           setFocus(SrcObj.getAttribute('nextSlide'));		 
			   }
		  }else return false;
      }else return false;
   }else return false;
}


function getSelectionEnd(o) {
	if (o.createTextRange) {
		var r = document.selection.createRange().duplicate()
		r.moveStart('character', -o.value.length);
		return r.text.length;
	} else return o.selectionEnd;
}


function moveCursorTo(obj, position){
	var inputText = obj.createTextRange();
	inputText.move("character",position);
	inputText.select() ;
}


function cancelBackSpace(){
	document.onkeydown = document.onkeypress = function (evt) {
		if (typeof evt == 'undefined') {
			evt = window.event;
		}
		if (evt) {
			var keyCode = evt.keyCode ? evt.keyCode : evt.charCode;
			var type = evt.srcElement.type ? evt.srcElement.type + ''  : 'noeditField';
			if (keyCode == 8 && (type.indexOf('noedit') > -1 || type.indexOf('select') > -1)) {
				if ( evt.preventDefault ) {
					evt.preventDefault();
				}return false;
			}else {return true;}
			keyCode=null;type=null;
		}else {return true;}
	}
	
} 

function makePrintParamString(form){
	var poststr='';
	for (i=0; i< form.elements.length; i++){
		if(!form.elements[i].disabled){
			if(!form.elements[i].id)
				form.elements[i].id=form.elements[i].name;
				if(form.elements[i].type.indexOf('select')>=0)
					poststr+= form.elements[i].id + '='  +  getSelectText(form.elements[i].id) + '&';
				else					
					poststr+= form.elements[i].id + '='  +  form.elements[i].value + '&';
		}
	}	
	return encodeURI(poststr);
}

//-------------------------------

   function trim(str)  {
     s = str.replace(/^(\s)*/, '');
     s = s.replace(/(\s)*$/, '');
     return s;
   }

//--------------------------
//CCF: Aug 10, 2007   
function onlyVIN() {
evento=window.event.srcElement ? window.event : null;
    obj=evento.srcElement;
		if (obj){
			var objRegExp  = /[A-Z\d]{17}/;
			if(obj.value!= "" && !objRegExp.test(obj.value.toUpperCase())) {
				alert('No. de Serie o VIN incorrecto, 17 carcteres alfanuméricos');
				obj.value= "";
			}		
		}
  evento=null;	
}	
function setOnlyVIN(arrObjects){
	for (var e=0;e<arrObjects.length;e++){
 		if(findObj(arrObjects[e])!=null)
			  addListener(arrObjects[e],'blur',onlyVIN);
			    findObj(arrObjects[e]).title="17 alfanuméricos";
		        findObj(arrObjects[e]).maxLength=17;
	}
}
function onlyMotor() {
evento=window.event.srcElement ? window.event : null;
    obj=evento.srcElement;
		if (obj){
			var objRegExp  = /[A-Z\d]{3}\-[A-Z\d]{7}/;
			if(obj.value!= "" && !objRegExp.test(obj.value.toUpperCase())) {
				alert('No. de Motor incorrecto, formato: XXX-XXXXXXX');
				obj.value= "";
				obj.focus();
			}		
		}
  evento=null;	
}	
function setOnlyMotor(arrObjects){
	for (var e=0;e<arrObjects.length;e++){
 		if(findObj(arrObjects[e])!=null)
		{
		  addListener(arrObjects[e],'blur',onlyMotor);
		  addListener(arrObjects[e], 'keyup', AgregaGuion);
		  findObj(arrObjects[e]).title="XXX-XXXXXXX";
		  findObj(arrObjects[e]).maxLength=11;
		}
	}
}
function AgregaGuion()
{
	evento=window.event.srcElement ? window.event : null;
    obj=evento.srcElement;
	keycode = window.event.keycode;
	if (obj)
	{
		if (keycode != 8)
			if (obj.value.length == 3)
				obj.value = obj.value + "-";
	}	
}

function debug(text){
	if(findObj("datos")!=null)
		findObj("datos").innerHTML= findObj("datos").innerHTML + "<br>" +text;
	}


