var ib_invertir_dt = false;  //Indica si los campos fecha se invierten o no
var ib_itemerror=false
var ColumnaClickeada
var numFilaClickeada
var existeError=false;

//IB_ITEMERROR, sirve para saber en la función itemerror si se pasó antes por el itemchanged
//ib_itemerror==false: No se paasó por el itemchanged, ib_itemerror==true: Si se pasó por el itemchanged
//EXISTEERROR, Sirve para saber en la función RowFocusChanging si ocurró algún error
//para no marcar como seleccionada la fila que toma el foco, sino que devolver a la erronea
/************************************************************************************/
//ITEMCHANGED genérico para todas las datawindows
function ItemChanged(sender, rowNumber, columnName, newValue) {
	var	ls_functionitemchanged = Right(sender.name,(sender.name.length)-3) ;
	ls_functionitemchanged = ls_functionitemchanged + "_ItemChanged"
	//comprueba si existe el evento itemchanged en el cliente
    if (eval ('typeof ' + ls_functionitemchanged) == 'function') {
		ib_itemerror=true;
		existeError=true;
		var retorno =  eval(ls_functionitemchanged + "(sender, rowNumber, columnName, newValue)")
		if (retorno!=1) { existeError=false;ib_itemerror=false;}
		if ((retorno + "" == "undefined") || (retorno == 0)) {
			if ((sender.currentControl.gob.getEditFormat == "dd-mm-yyyy") && newValue > "") {
				var ld_fecha = sender.GetItemDateTime(rowNumber, columnName);
				if (ld_fecha != null) var ls_fecha = Left(ld_fecha.aString(),10);
				else var ls_fecha = '';
				if (newValue != ls_fecha) window.setTimeout("Invertir_dt(" + sender.name + ", " + rowNumber + ", '" + columnName + "')",0);
			}
		}
		return retorno;
	}	 
	if ((sender.currentControl.gob.getEditFormat == "dd-mm-yyyy") && newValue > "") {
		var ld_fecha = sender.GetItemDateTime(rowNumber, columnName);
		if (ld_fecha != null) var ls_fecha = Left(ld_fecha.aString(),10);
		else var ls_fecha = '';
		if (newValue != ls_fecha) window.setTimeout("Invertir_dt(" + sender.name + ", " + rowNumber + ", '" + columnName + "')",0);}
}
/************************************************************************************/
//CLICKED genérico para todas las datawindows
function Clicked(sender, rowNumber, objectName) {
	var	ls_functionClicked = Right(sender.name,(sender.name.length)-3) ;
	ls_functionClicked = ls_functionClicked + "_Clicked"
	//comprueba si existe el evento clicked en el cliente
    if (eval ('typeof ' + ls_functionClicked) == 'function') {
		var retorno =  eval(ls_functionClicked + "(sender, rowNumber, objectName)")
		
	}	
	 ColumnaClickeada = objectName
 	 numFilaClickeada = rowNumber

}



/************************************************************************************/
//ITEMERROR genérico para todas las datawindows
/************************************************************************************/
function ItemError(sender, rowNumber, columnName, newValue) {
	existeError=true

	var	ls_functionItemError = Right(sender.name,(sender.name.length)-3) ;
	ls_functionItemError = ls_functionItemError + "_ItemError"
	//comprueba si existe el evento ItemError en el cliente
    if (eval ('typeof ' + ls_functionItemError) == 'function') {
		var retorno =  eval(ls_functionItemError + "(sender, rowNumber, columnName, newValue)")
		
	}	

		// Reestablece el valor que había antes del error
		var anterior = (sender.GetItem(rowNumber,columnName));
		document.getElementById(Right(sender.name,sender.name.length - 3)).focus()
		window.setTimeout(sender.name +".currRow=" + (rowNumber -1),0)
		
		// Si la columna es una fecha debe usar la funcion GetItemDateTime
		if (typeof(anterior) == "object") anterior = (sender.GetItemDateTime(rowNumber,columnName));
		
		if (anterior != null) {
			if (typeof(anterior) == "object") {
					var ano = anterior.year + 1900;
					var mes = anterior.month + 1;
					ls_anterior = new String(anterior.day + '-' + mes + '-' + ano);
					}
			else ls_anterior = anterior;
		}

		
		if (anterior != null) {
			window.setTimeout(sender.name + ".currentControl.value = '"+ ls_anterior + "'",0);
			}
		else {
			window.setTimeout(sender.name + ".currentControl.value = ''",0);
		}
		window.setTimeout(sender.name + ".currCol = "  + sender.getColNum(columnName),0);
		window.setTimeout(sender.name + ".currentControl.select()",0)
		
		ItemFocusChanged(sender, rowNumber, columnName)
		if (ib_itemerror==true) {
			ib_itemerror=false;
			return 1;
		}

		return 0;
		
}

/************************************************************************************/
//ITEMFOCUSCHANGED genérico para todas las datawindows
function ItemFocusChanged(sender, rowNumber, columnName) {

	//	var mh = WebFormBase.ExisteTagm(sender.name,columnName).value
	//	window.setTimeout("window.status='" + mh +"'",0)
	 
	var	ls_functionItemFocusChanged = Right(sender.name,(sender.name.length)-3) ;
		ls_functionItemFocusChanged = ls_functionItemFocusChanged + "_ItemFocusChanged"
	 if (eval ('typeof ' + ls_functionItemFocusChanged) == 'function') {
		var retorno =  eval(ls_functionItemFocusChanged + "(sender, rowNumber, columnName)")
	}	
//	if (tagsm[sender.name + columnName]==null)  window.status = "Listo"
//	else window.status=tagsm[sender.name + columnName]
	
	
}

/************************************************************************************/
//ROWFOCUSCHANGING genérico para todas las datawindows
function RowFocusChanging(sender, currentRowNumber, newRowNumber, ColorSel, ColorNoSel) {
	//Agregado para que no se ejecute cuando la datawindow está paginada
	if ((sender.lastRow + 1)<newRowNumber || (sender.firstRow + 1)>newRowNumber ) return;
	
	if (existeError) {
		existeError=false;
		return;
	}
	var	ls_functionRowFocusChanging = Right(sender.name,(sender.name.length)-3) ;
		ls_functionRowFocusChanging = ls_functionRowFocusChanging + "_RowFocusChanging"
	 if (eval ('typeof ' + ls_functionRowFocusChanging) == 'function') {
		var retorno =  eval(ls_functionRowFocusChanging + "(sender, currentRowNumber, newRowNumber)")
		
	}	

	window.status ="Listo"
	if (currentRowNumber>0)
		document.getElementById(sender.name +"_detail_"+(currentRowNumber - 1)).style.backgroundColor=ColorNoSel;
	
	document.getElementById(sender.name +"_detail_"+(newRowNumber - 1)).style.backgroundColor=ColorSel;

}

/************************************************************************************/
//Utilizada para capturar el F9 en una datawindow
function dwkeydown(objdw) {
	var ls_retorno
	if (event.keyCode==120 ) {
		if (objdw.currentControl==null) return;
		if (objdw.currentControl.readOnly==false) {
			var ls_nomcol = objdw.cols[objdw.currCol].name;					
			var ll_numcol = objdw.GetRow();
			var oe_keyF9Retorno = 0;
			
			if (typeof(oe_keyF9)=="function")
			{
				oe_keyF9Retorno = oe_keyF9(objdw);
			}
			if (oe_keyF9Retorno == 0)
			{
				if (!WebFormBase.ExisteTagl(objdw.name,objdw.cols[objdw.currCol].name).value) return;
				ls_retorno = keySearch(objdw.name,objdw.cols[objdw.currCol].name);
				if (ls_retorno==null) return;
				//objdw.SetItem(ll_numcol,ls_nomcol,ls_retorno);
				//Si existe itemchanged para la datawindow lo ejecuta
				//if (objdw.ItemChanged!=null) objdw.ItemChanged(objdw, objdw.GetRow(), ls_nomcol, ls_retorno)

				window.setTimeout(objdw.name + ".currentControl.value = '" + ls_retorno + "';",0);
			
			}
		}
	}
	
	if (event.keyCode==40) {
		ll_fila=objdw.GetRow();
		if (ll_fila + 1 >objdw.RowCount()) return
		if (ll_fila<=0) ll_fila = 1;
		else ll_fila = ll_fila + 1;
		
		RowFocusChanging(objdw, ll_fila-1, ll_fila) 
		
		
		objdw.SetRow(ll_fila)
		return false
	}


	if (event.keyCode==38) {
		ll_fila=objdw.GetRow();
		if (ll_fila - 1 <=0) return
		if (ll_fila<=0) ll_fila = 1;
		else ll_fila = ll_fila - 1;
		RowFocusChanging(objdw, ll_fila + 1, ll_fila) 
		objdw.SetRow(ll_fila)
		return false;
	}
	
	if (event.keyCode==13) {
		//emula la tecla tab al presionar enter
		if( window.event.keyCode == 0x0d ) 	{ 
			window.event.keyCode = 0x09; 
		} 
		return; 
	}

	return true;
}

/************************************************************************************/
//Quita los caracteres en blanco a la izquierda y derecha de una cadena
function Trim(TRIM_VALUE){
	if (TRIM_VALUE==null) return "";
	if(TRIM_VALUE.length < 1){
		return "";
	}
	TRIM_VALUE = RTrim(TRIM_VALUE);
	TRIM_VALUE = LTrim(TRIM_VALUE);
	if(TRIM_VALUE==""){
		return "";
	}
	else{
		return TRIM_VALUE;
	}
} 

/************************************************************************************/
//Quita los caracteres en blanco a la derecha de una cadena
function RTrim(VALUE){
	var w_space = String.fromCharCode(32);
	if (VALUE==null) return "";
	var v_length = VALUE.length;
	var strTemp = "";
	
	if(v_length < 0){
		return"";
	}
	var iTemp = v_length -1;

	while(iTemp > -1){
		if(VALUE.charAt(iTemp) == w_space){
		}
		else{
			strTemp = VALUE.substring(0,iTemp +1);
		break;
		}
		iTemp = iTemp-1;
	} 
	return strTemp;
} 

/************************************************************************************/
//Quita los caracteres en blanco a la izquierda de una cadena
function LTrim(VALUE){
	var w_space = String.fromCharCode(32);
	if (VALUE==null) return "";
	if(v_length < 1){
		return"";
	}
	var v_length = VALUE.length;
	var strTemp = "";

	var iTemp = 0;

	while(iTemp < v_length){
		if(VALUE.charAt(iTemp) == w_space){
		}
		else{
			strTemp = VALUE.substring(iTemp,v_length);
			break;
		}
		iTemp = iTemp + 1;
	} //End While
	return strTemp;
} //End Function


//Prepara un Rut agragandole los espacios en blanco necesarios
/************************************************************************************/
function PrepararRut(Rut) {
  Rut = Trim(Rut)
        Rut = Fill(" ", 10 - Rut.length) + Rut
        return Rut


}

//Formatea un Rut colocandole los puntos y el guión correspondientes
/************************************************************************************/
function FormatearRut(Rut) {
	var ls_rut
	
	Rut = replaceSubstring(Rut,".","")
	Rut = replaceSubstring(Rut,"-","")
	ls_rut = Rut.substring((Rut.length-4),(Rut.length-1)) + '-' +Right(Rut,1)
	if (Trim(Rut).length>4) {
		ls_rut=Rut.substring((Rut.length-7),(Rut.length-4)) + '.' + ls_rut
	}
	if (Trim(Rut).length>7) {
		ls_rut=Rut.substring((Rut.length -10),(Rut.length -7)) + '.' + ls_rut
	}
	
	return LTrim(ls_rut)

}					

/************************************************************************************/
//Crea un string de largo n con algún caracter específico.
/************************************************************************************/
function replaceSubstring(inputString, fromString, toString) {
   // Goes through the inputString and replaces every occurrence of fromString with toString
   var temp = inputString;
   if (fromString == "") {
      return inputString;
   }
   if (toString.indexOf(fromString) == -1) { // If the string being replaced is not a part of the replacement string (normal situation)
      while (temp.indexOf(fromString) != -1) {
         var toTheLeft = temp.substring(0, temp.indexOf(fromString));
         var toTheRight = temp.substring(temp.indexOf(fromString)+fromString.length, temp.length);
         temp = toTheLeft + toString + toTheRight;
      }
   } else { // String being replaced is part of replacement string (like "+" being replaced with "++") - prevent an infinite loop
      var midStrings = new Array("~", "`", "_", "^", "#");
      var midStringLen = 1;
      var midString = "";
      // Find a string that doesn't exist in the inputString to be used
      // as an "inbetween" string
      while (midString == "") {
         for (var i=0; i < midStrings.length; i++) {
            var tempMidString = "";
            for (var j=0; j < midStringLen; j++) { tempMidString += midStrings[i]; }
            if (fromString.indexOf(tempMidString) == -1) {
               midString = tempMidString;
               i = midStrings.length + 1;
            }
         }
      } // Keep on going until we build an "inbetween" string that doesn't exist
      // Now go through and do two replaces - first, replace the "fromString" with the "inbetween" string
      while (temp.indexOf(fromString) != -1) {
         var toTheLeft = temp.substring(0, temp.indexOf(fromString));
         var toTheRight = temp.substring(temp.indexOf(fromString)+fromString.length, temp.length);
         temp = toTheLeft + midString + toTheRight;
      }
      // Next, replace the "inbetween" string with the "toString"
      while (temp.indexOf(midString) != -1) {
         var toTheLeft = temp.substring(0, temp.indexOf(midString));
         var toTheRight = temp.substring(temp.indexOf(midString)+midString.length, temp.length);
         temp = toTheLeft + toString + toTheRight;
      }
   } // Ends the check to see if the string being replaced is part of the replacement string or not
   return temp; // Send the updated string back to the user
} // Ends the "replaceSubstring" function


/************************************************************************************/
//Crea un string de largo n con algún caracter específico.
/************************************************************************************/
function Fill(chars, n) {
	s=""
	while (--n >= 0) {
		s+=chars
	}
	return s
}
/************************************************************************************/
// Devuelve los n últimos caracteres de la cadena
function Right(s, n){
	
	var t=s.length;
	if(n>t)
		n=t;
		
	return s.substring(t-n, t);
}
/************************************************************************************/
// Devuelve los n primeros caracteres de la cadena
function Left(s, n){
	
	if(n>s.length)
		n=s.length;
		
	return s.substring(0, n);
}
/************************************************************************************/
	// Devuelve una cadena desde la posición n, con c caracteres
	// Si c = 0 devolver toda la cadena desde la posición n
function Mid(s, n, c){
	
	var numargs=Mid.arguments.length;
	
	// Si sólo se pasan los dos primeros argumentos
	if(numargs<3)
		c=s.length-n+1;
		
	if(c<1)
		c=s.length-n+1;
	if(n+c >s.length)
		c=s.length-n+1;
	if(n>s.length)
		return "";
		
	return s.substring(n-1,n+c-1);
}
/************************************************************************************/
//Valida un rut ingresado
function valida_rut(rut)
{
//	rut = replaceSubstring(rut,".","")
//	rut = replaceSubstring(rut,"-","")
	var rut=rut;
	var largo=rut.length-1;
	var i=0;
	var dv=Right(rut,1).toUpperCase();
	var mult=2;
	var suma=0;

	largo--;

	while(largo>=0)
		{
		suma=suma+(rut.charAt(largo)*mult);
		if(mult>6)
		mult=2;
		else
		mult++;
		largo--;
		}

	var resto = suma%11;
	var digito = 11-resto
	if(digito==10)
	digito="K" ;
	else
	if(digito==11)
		digito=0;
	if(digito!=dv)
	return false;
	else
	return true;
}
/************************************************************************************/

function valida_numerico(valor)
{
	if (isNaN(valor))
		return false
	else
		return true
}
/************************************************************************************/
function keySearch(nom_dw,num_col,param) {
	var Retorno
	nom_dw=Right(nom_dw,nom_dw.length - 3)
	//El parámetro "a" manda a la ventana modal un valor distinto cada vez para que siempre se recarge
	Retorno = window.showModalDialog("../Objetos/keySearch.aspx?a=" + Math.random() + "&nom_dw="+ nom_dw + "&nom_col=" + num_col + "&param=" + param, param, 'dialogWidth:560px;dialogHeight:390px;resizable:no;status:no;scroll:no;unadorned:no;help:no;');
	return Retorno;
}


/************************************************************************************/
function MensajeError(descripcion,detalle) {
	window.showModalDialog("../Objetos/msgError.aspx?descripcion=" + descripcion + "&detalle=" + detalle,'','dialogWidth:420px;dialogHeight:170px;resizable:no;status:no;scroll:no;unadorned:no;help:no;');
}

/************************************************************************************/

/////////////////////////////////////////////////////////////////////////////////////
// Modified and enhanced by: 
//      Roberto Vargas O
//      Email: robvarga@gmail.com
//
// Created by: 
//      Simon Willison - http://simon.incutio.com
/////////////////////////////////////////////////////////////////////////////////////


// Configuration options

// Available date types (us|iso)
var configDateType = 'iso';

// Dates such as 2/29/2005 to rollover to 3/1/2005
var configAutoRollOver = false;


//////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////

function keyListener(e) {
    if(!e){
	    //for IE
		e = window.event;
	}
	switch (e.keyCode) {
		case 10: // return
		case 13: // enter
			// perform the update
			magicDate('dateField');
			return false;
		default:
		    return true;
	}
}

switch (configDateType) {
    case 'us':
        var calendarIfFormat = '%m/%d/%Y';
        var calendarFormatString = 'mm/dd/yyyy';
        break;
    case 'iso':
    default:
        var calendarIfFormat = '%Y-%m-%d';
        var calendarFormatString = 'yyyy-mm-dd';
        break;
}       

// add indexOf function to Array type
// finds the index of the first occurence of item in the array, or -1 if not found
Array.prototype.indexOf = function(item) {
    for (var i = 0; i < this.length; i++) {
        if (this[i] == item) {
            return i;
        }
    }
    return -1;
};

// add filter function to Array type
// returns an array of items judged true by the passed in test function
Array.prototype.filter = function(test) {
    var matches = [];
    for (var i = 0; i < this.length; i++) {
        if (test(this[i])) {
            matches[matches.length] = this[i];
        }
    }
    return matches;
};

// add right function to String type
// returns the rightmost x characters
String.prototype.right = function( intLength ) {
   if (intLength >= this.length)
      return this;
   else
      return this.substr( this.length - intLength, intLength );
};

// add trim function to String type
// trims leading and trailing whitespace
String.prototype.trim = function() { return this.replace(/^\s+|\s+$/, ''); };

// arrays for month and weekday names
var monthNames = "January February March April May June July August September October November December".split(" ");
var weekdayNames = "Sunday Monday Tuesday Wednesday Thursday Friday Saturday".split(" ");

/* Takes a string, returns the index of the month matching that string, throws
   an error if 0 or more than 1 matches
*/
function parseMonth(month) {
    var matches = monthNames.filter(function(item) { 
        return new RegExp("^" + month, "i").test(item);
    });
    if (matches.length == 0) {
        throw new Error("Invalid month string");
    }
    if (matches.length < 1) {
        throw new Error("Ambiguous month");
    }
    return monthNames.indexOf(matches[0]);
}

/* Same as parseMonth but for days of the week */
function parseWeekday(weekday) {
    var matches = weekdayNames.filter(function(item) {
        return new RegExp("^" + weekday, "i").test(item);
    });
    if (matches.length == 0) {
        throw new Error("Invalid day string");
    }
    if (matches.length < 1) {
        throw new Error("Ambiguous weekday");
    }
    return weekdayNames.indexOf(matches[0]);
}

function DateInRange( yyyy, mm, dd )
   {

   // if month out of range
   if ( mm < 0 || mm > 11 )
      throw new Error('Invalid month value.  Valid months values are 1 to 12');

   if (!configAutoRollOver) {
       // get last day in month
       var d = (11 == mm) ? new Date(yyyy + 1, 0, 0) : new Date(yyyy, mm + 1, 0);
    
       // if date out of range
       if ( dd < 1 || dd > d.getDate() )
          throw new Error('Invalid date value.  Valid date values for ' + monthNames[mm] + ' are 1 to ' + d.getDate().toString());
   }

   return true;

   }

function getDateObj(yyyy, mm, dd) {
    var obj = new Date();

    obj.setDate(dd);
    obj.setMonth(mm);
    obj.setYear(yyyy);
    
    return obj;
}

/* Array of objects, each has 're', a regular expression and 'handler', a 
   function for creating a date from something that matches the regular 
   expression. Handlers may throw errors if string is unparseable. 
*/
var dateParsePatterns = [
    // Today
    {   re: /^hoy/i,
        handler: function() { 
            return new Date();
        } 
    },
    // Tomorrow
    {   re: /^tom/i,
        handler: function() {
            var d = new Date(); 
            d.setDate(d.getDate() + 1); 
            return d;
        }
    },
    // Yesterday
    {   re: /^yes/i,
        handler: function() {
            var d = new Date();
            d.setDate(d.getDate() - 1);
            return d;
        }
    },
   
    // mm/dd/yyyy (American style)
    {   re: /(\d{1,2})\/(\d{1,2})\/(\d{4})/,
        handler: function(bits) {

            var yyyy = parseInt(bits[3], 10);
            var mm = parseInt(bits[2], 10) - 1;
            var dd = parseInt(bits[1], 10);

            if ( DateInRange( yyyy, mm, dd ) )
               return getDateObj(yyyy, mm, dd);

        }
    },
    // mm/dd/yy (American style) short year
    {   re: /(\d{1,2})\/(\d{1,2})\/(\d{1,2})/,
        handler: function(bits) {

            var d = new Date();
            var yyyy = d.getFullYear() - (d.getFullYear() % 100) + parseInt(bits[3], 10);
            var mm = parseInt(bits[2], 10) - 1;
            var dd = parseInt(bits[1], 10);

            if ( DateInRange(yyyy, mm, dd) )
               return getDateObj(yyyy, mm, dd);

        }
    },
    // dd Solo dia
    {   re: /(\d{1,2})/,
        handler: function(bits) {

            var d = new Date();
            var yyyy = d.getFullYear();
            var mm = d.getMonth();
            var dd = parseInt(bits[1], 10);

            if ( DateInRange(yyyy, mm, dd) )
               return getDateObj(yyyy, mm, dd);

        }
    },
    // mm/dd (American style) omitted year
    {   re: /(\d{1,2})\/(\d{1,2})/,
        handler: function(bits) {

            var d = new Date();
            var yyyy = d.getFullYear();
            var mm = parseInt(bits[2], 10) - 1;
            var dd = parseInt(bits[1], 10);

            if ( DateInRange(yyyy, mm, dd) )
               return getDateObj(yyyy, mm, dd);

        }
    },
    // yyyy-mm-dd (ISO style)
    {   re: /(\d{4})-(\d{1,2})-(\d{1,2})/,
        handler: function(bits) {

            var yyyy = parseInt(bits[3], 10);
            var mm = parseInt(bits[2], 10) - 1;
            var dd = parseInt(bits[1], 10);

            if ( DateInRange( yyyy, mm, dd ) )
               return getDateObj(yyyy, mm, dd);

        }
    },
    // yy-mm-dd (ISO style) short year
    {   re: /(\d{1,2})-(\d{1,2})-(\d{1,2})/,
        handler: function(bits) {

            var d = new Date();
            var yyyy = d.getFullYear() - (d.getFullYear() % 100) + parseInt(bits[3], 10);
            var mm = parseInt(bits[2], 10) - 1;
            var dd = parseInt(bits[1], 10);

            if ( DateInRange( yyyy, mm, dd ) )
               return getDateObj(yyyy, mm, dd);

        }
    },
    // mm-dd (ISO style) omitted year
    {   re: /(\d{1,2})-(\d{1,2})/,
        handler: function(bits) {

            var d = new Date();
            var yyyy = d.getFullYear();
            var mm = parseInt(bits[2], 10) - 1;
            var dd = parseInt(bits[1], 10);

            if ( DateInRange( yyyy, mm, dd ) )
               return getDateObj(yyyy, mm, dd);

        }
    },
];


function parseDateString(s) {
    for (var i = 0; i < dateParsePatterns.length; i++) {
        var re = dateParsePatterns[i].re;
        var handler = dateParsePatterns[i].handler;
        var bits = re.exec(s);
        if (bits) {
            return handler(bits);
        }
    }
    throw new Error("Invalid date string");
}


function magicDate(value) {
    try {
        var d = parseDateString(value);
		var retorno;
        switch (configDateType) {
            case 'us':
                retorno = (d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear();
                break;
            case 'iso':
            default:
                retorno = d.getDate() + '-' + (d.getMonth() + 1) + '-' + d.getFullYear();
                break;
        }
                
    }
    catch (e) {
    var message = e.message;
    // Fix for IE6 bug
    return null;
    if (message.indexOf('is null or not an object') > -1) {
        message = 'Invalid date stri	ng';
    }
    }
    return retorno;
}


/************************************************************************************/
	function confirmar_eliminar(as_boton,mensaje){
				if (document.getElementById(as_boton).disabled) return false;
		 		
		 		if (mensaje==null) mensaje="ESTA SEGURO QUE DESEA ELIMINAR EL REGISTRO?"
		 		if (!confirm(mensaje)) return false;						
				else return true;
			}
/************************************************************************************/			

function f_FechaHoy() {
	var nuevaFecha = new DW_DatetimeClass();
	var FechaHoy = WebFormBase.f_FechaHoy();
	
	nuevaFecha.year = FechaHoy.value[2] - 1900;
	nuevaFecha.month = FechaHoy.value[1] - 1;
	nuevaFecha.day = FechaHoy.value[0] - 0;
	return nuevaFecha
}

/************************************************************************************/
// Ordena las filas al hacer doble click sobre el encabezado.

function dblclick(objdw) {
	var ls_ColumnName;
	// Si se hizo doble click sobre el encabezado...
	// La variable ColumnaClickeada se asigna al momento de hacer el primer click en el evento Personalizado Clicked
	if (numFilaClickeada<=0 && objdw.RowCount()>1)  {
		ls_ColumnName = ColumnaClickeada;
		ls_ColumnName = ls_ColumnName.substring(0,ls_ColumnName.length - 2);

		//var Resp = WebFormBase.f_set_SessionOrdena(objdw.name, ls_ColumnName);
		//document.Form1.submit();

		
	}
}


function Invertir_dt(sender, rowNumber, columnName)
{
	if (ib_invertir_dt) {
		if (sender.GetItem(rowNumber, columnName)==null) return;
		var ColNumber = sender.getColNum(columnName);
		var Mes = sender.rows[rowNumber-1][ColNumber].month;
		var Dia = sender.rows[rowNumber-1][ColNumber].day;
		
		sender.rows[rowNumber-1][ColNumber].month = Dia - 1;
		sender.rows[rowNumber-1][ColNumber].day = Mes + 1;
		sender.rows[rowNumber-1][ColNumber].inv = true;
		
	}
}
function GetItemDateTime(sender, rowNumber, columnName)
{
	var ColNumber = sender.getColNum(columnName);
	
	if ((sender.rows[rowNumber-1][ColNumber] != null) && (sender.rows[rowNumber-1][ColNumber].inv)) {
		var nuevaFecha = new DW_DatetimeClass();
		
		nuevaFecha.year = sender.rows[rowNumber-1][ColNumber].year;
		nuevaFecha.month = sender.rows[rowNumber-1][ColNumber].day - 1;
		nuevaFecha.day = sender.rows[rowNumber-1][ColNumber].month + 1;
		return nuevaFecha;
	}
	
	return sender.GetItem(rowNumber, columnName);
}

/************************************************************************************/
// Estructura donde se almacena el |m para cada columna de cada datawindow
function crea_tagm( nom_dw , nom_col , tag_m ) {
	this.nom_dw=nom_dw;
	this.nom_col;
	this.tag_m=tag_m;
}

/************************************************************************************/
// Funciones que permite hacer drag de cualquier elemento dentro de la página. Basta con 
// crearle al control la propiedad class="drop"

			var dragapproved=false
			var z,x,y
			function move(){
				if (event.button==1&&dragapproved){
					z.style.pixelLeft=temp1+event.clientX-x
					z.style.pixelTop=temp2+event.clientY-y
					return false
				}
			}
	
			function drags(){
				if (!document.all)
					return
				if (event.srcElement.className=="drag"){
					dragapproved=true
					z=event.srcElement
					temp1=z.style.pixelLeft
					temp2=z.style.pixelTop
					x=event.clientX
					y=event.clientY
					document.onmousemove=move
				}
			}
			document.onmousedown=drags
			document.onmouseup=new Function("dragapproved=false")
/************************************************************************************/
// Funciones que valida la hora devolviendo true o false según corresponda
			
function f_validaHora(str)
{
	var hora=Trim(str);
	var puntos;
	if (hora.length<4 || hora.length>5) return false;
	
	puntos = hora.indexOf(':');
	
	a=hora.charAt(0)
	b=hora.charAt(1)
	c=hora.charAt(2);

	if (puntos>0) {
		if (c==':'){

			d=hora.charAt(3);
			if (d=="") return false;
			e=hora.charAt(4);
			if (e=="") return false;
		}
		else return false;
	}
	else
		{
			c=':';
			d=hora.charAt(2);
			if (d=="") return false;
			e=hora.charAt(3);
			if (e=="") return false;
	}	
	
	
	if (!valida_numerico(a)) return false
	if (!valida_numerico(b)) return false
	if (!valida_numerico(d)) return false
	if (!valida_numerico(e)) return false
	

	if (a>=2 && b>3) return false;
	if (d>5) return false;
					
	return true
}

/************************************************************************************/
// VALIDA FECHA
/************************************************************************************/
function validaFecha(aaaa,mm,dd){
	if(aaaa != '' && aaaa != 0 && mm != '' && mm != 0 &&dd != '' && dd != 0) {	
		var nAgno	= aaaa;
		var nMes	= mm;
		var nDia	= dd;	
			
		if(nDia < 1 || nDia > 31) return false;
		if((nMes < 1) || (nMes > 12)) return false;
		if(nAgno < 1900) return false;

		if(!valida_numerico(nDia)) return false;
		if(!valida_numerico(nMes)) return false;
		if(!valida_numerico(nAgno)) return false;
		
		if (((nMes==4 || nMes==6 || nMes==9 || nMes==11) && nDia==31) || (nAgno%4!=0 && nMes==2 && nDia>28))
			return false; 
		return true;
	}

	return false;
}			

/************************************************************************************/
//Reemplaza un caracter dentro de un string todas las veces que se encuentre
/************************************************************************************/
function replaceChars(string,reemplazar,reemplazar_con) {
	
	r1 = reemplazar; 
	r2 = reemplazar_con;
	temp = string;

	while (temp.indexOf(r1)>-1) {
		temp =temp.replace(r1,r2)
	}

	return temp;
}			
/************************************************************************************/
//Abre una ventana modal pasando el objeto para que no se pierda la sesión al abrir una nueva página desde la modal
/************************************************************************************/
function AbrirVentanaModal(url,param)
{
	var args = new Object;
	var ret
	args.window = window;
	ret=showModalDialog(url, args, param);
	return ret
}
