digits = "1234567890";
float_chars= digits+".+-eE";
int_chars= digits + "+-";
phone_chars = digits + "()- ";
zip_chars = digits+"-";
alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
lowAlpha = "abcdefghijklmnopqrstuvwxyz";

function trim(str) {
    return ltrim(rtrim(str));
}

function rtrim(str) {
    var last = str.length - 1;

    if ( str.length == 0 || str.charAt(last) != ' ' )
        return str;

    var i;

    for ( i = last ; str.charAt(i) == ' ' ; i-- ) {
    }

    return str.substring(0, str.length - i);
}

function ltrim(str) {
    if ( str.length == 0 || str.charAt(0) != ' ' )
        return str;

    var i;

    for ( i = 0 ; str.charAt(i) == ' ' ; i++ ) {
    }

    return str.substring(i);
}

function openWindow(url, w, h, scrollbars) {
    args = "width=" + w + ",height=" + h + ",resizable=yes,scrollbars=" + scrollbars + ",status=0";
    window.open(url, "", args);
}

function openFloatWindow(url,target,width,height) {
   var woptions='toolbar=no,directories=no,menubar=no,location=no,resizable=no,scrollbars=yes,status=no,width=' + width + ',height=' + height;
   var FLOAT=open(url,target,woptions);
   if (FLOAT.focus!=null) FLOAT.focus();
}

function openFloatWindowReturn(url,target,width,height,top,left) {
   var woptions='toolbar=no,directories=no,menubar=no,location=no,resizable=no,scrollbars=no,status=no,top=' + top + ',left=' + left + ',width=' + width + ',height=' + height;
   var FLOAT=open(url,target,woptions);
   if (FLOAT.focus!=null) FLOAT.focus();
   return FLOAT;
}

function setValue(obj, value) {
    var i = 0;

    for ( ; i < obj.length ; i++ ) {
        if ( obj[i].value == value ) {
            obj.options[i].selected = true;
            break;
        }
    }
}

function diff(day1, month1, year1, day2, month2, year2) {
    var d1 = new Date(year1, month1, day1);
    var d2 = new Date(year2, month2, day2);

    var ret = (d2.getTime() - d1.getTime()) / 1000 / 60 / 60 / 24;

    return ret;
}

function FormatoFecha()
{
	var fecha = new Date();
	var texto = "";

	if ( fecha.getDate() < 10 )
		texto += "0";

	texto += fecha.getDate() + "/";

	if ( fecha.getMonth() < 9 )
		texto += "0";

	texto += (fecha.getMonth() +1) + "/";

	if (navigator.appName.indexOf("Netscape") != -1)
	{

		texto += (1900 + fecha.getYear());
	}
	else
	{
		texto += fecha.getYear();
	}
	return texto;
}

function FormatoFechaTexto()
{
    var fecha = new Date();
    var texto = "";
    var mes = new Array("Enero", "Febrero", "Marzo", "Abril", "Mayo", "Junio","Julio", "Agosto", "Setiembre", "Octubre", "Noviembre","Diciembre");


    if ( fecha.getDate() < 10 )
        texto += "0";

    texto += fecha.getDate() + " de ";

    texto += mes[fecha.getMonth()]  + " de ";

    if (navigator.appName.indexOf("Netscape") != -1)
    {

        texto += (1900 + fecha.getYear());
    }
    else
    {
        texto += fecha.getYear();
    }
    return texto;
}

function notEmptyCheck(val,mens) {
   var message="Ingrese un valor";

   if (mens!=null) message=mens;
   if (val.length==0) return message;

   return null;
}

function lengthCheck(val,mens,len)
{
   var message="Ingrese un valor de " + len + " caracteres";
   if (mens!=null) message=mens;
   if (val.length<len) return message;
   return null;
}

function integerCheck(val,mens) {
   var i=0, start=0;
   var message="Ingrese un valor numerico";

   if (mens!=null) message=mens;
   if (val.length==0) return null;
   if (val.length>0 && (val.charAt(0)=="+" || val.charAt(0)=="-"))
      start=1;

   for (i=start; i<val.length; i++)
      if ("0123456789".indexOf(val.charAt(i))==-1)
         return message;
   return null;
}

function realCheckOld(val,mens,decimales)
{
   var i=0, j=0, start=0;
   var pref, suf, message="Ingrese un valor numerico (NNNNNN,NN)";

   if (decimales == null) decimales = 2;
   if (mens!=null) message=mens;
   if (val.length==0) return null;
   i=val.indexOf(",");

   if (i==-1) {
      if (integerCheck(val,mens)!=null) return message;
      else return null;
   }
   if (i==0) return message;
   if (i==(val.length-1)) return message;
   if (i<(val.length-decimales-1)) return message;

   if (val.length>0 && (val.charAt(0)=="+" || val.charAt(0)=="-"))
      start=1;

   pref=val.substring(start,i);
   suf=val.substring(i+1,val.length);

   if (i>0)
      for (j=0; j<pref.length; j++)
         if ("0123456789".indexOf(pref.charAt(j))==-1)
            return message;

   for (j=0; j<suf.length; j++)
      if ("0123456789".indexOf(suf.charAt(j))==-1)
         return message;

   return null;
}

function realCheck(val,mens,enteros,decimales,negativos)
{
   var i=0, j=0, start=0;
   var pref, suf;
   var message="Ingrese un valor numerico (NNNNNN,NN)";
   var messageNegativos="Ingrese un valor positivo";
   var messageEnteros="Ingrese un valor con a lo sumo " + enteros + " enteros";
   var messageDecimales="Ingrese un valor con a lo sumo " + decimales +" decimales";


   if (mens!=null)
       message=mens;

   if (val.length==0)
       return null;

   if (negativos=="no" && val.charAt(0)=="-")
           return messageNegativos;

   if (val.charAt(0)=="+")
	   return message;

   // busco la posicion del separador de decimales
   i=val.indexOf(",");

   // NNN
   if (i==-1)
   {
      if (integerCheck(val,mens)!=null)
           return message;
      else
      {
         if (val.length>enteros)
	     return messageEnteros;
         else
	     return null;
      }
   }
   // ,NNN
   if (i==0)
      return message;

   // NNN,
   if (i==(val.length-1))
      return message;

   if (val.length>0 && (val.charAt(0)=="+" || val.charAt(0)=="-"))
      start=1;

   // la longitud de la parte entera debe ser <= que el parametro enteros
   pref=val.substring(start,i);
   if (pref.length>enteros)
       return messageEnteros;

   // la longitud de la parte decimal debe ser <= que el parametro decimales
   suf=val.substring(i+1,val.length);
   if (suf.length>decimales)
       return messageDecimales;

   // me fijo que la parte entera sean todos numeros
   if (i>0)
      for (j=0; j<pref.length; j++)
         if ("0123456789".indexOf(pref.charAt(j))==-1)
            return message;

   // me fijo que la parte decimal sean todos numeros
   for (j=0; j<suf.length; j++)
      if ("0123456789".indexOf(suf.charAt(j))==-1)
         return message;

   return null;
}


function emailCheck(val,mens)
{
   var message="Ingrese una direccion de email valida.";
   var pref, suf;
   var i = 0;
   var c = "";

   if (val.charAt(0)=="." || val.charAt(0)=="@")
      return message;

   i = val.indexOf(".");
   if (i == -1 || i == 0 || i == (val.length -1))
      return message;

   i = val.indexOf("@");
   if (i == -1 || i == 0 || i == (val.length -1))
      return message;

   pref = val.substring(0, i);
   suf = val.substring(i + 1, val.length);
   i = suf.indexOf(".");

   if (i == -1 || i == 0 || i == (suf.length -1))
      return message;

   for (i = 0; i < pref.length; i++)
   {
      c = pref.charAt(i);
      if (c < "!" || c > "~")
         return message;

      if ("<>()[]\,;:@".indexOf(c) != -1)
         return message;
   }

   for (i = 0; i < suf.length; i++)
   {
      c = suf.charAt(i);
      if (c < "!" || c > "~")
         return message;

      if ("<>()[]\,;:@".indexOf(c) != -1)
         return message;
   }
   return null;
}


function intCheck(val,mens)
{
   var message="Ingrese un numero valido";
   var i = 0;
   for (i = 0; i < val.length; i++)
   {
	c = val.charAt(i);
	if (digits.indexOf(c) == -1) return message;
   }
   return null;
}

function passCheck(val,mens)
{
   var message="Ingrese solamente letras (a - z, A - Z) y numeros (0 - 9)";
   var i = 0;
   for (i = 0; i < val.length; i++)
   {
	c = val.charAt(i);
	if (( digits.indexOf(c) == -1 ) && ( alpha.indexOf(c) == -1 ) && ( lowAlpha.indexOf(c) == -1 ) ) return message;
   }
   return null;
}


function validatePrompt(Ctrl,PromptStr)
{
     Ctrl.focus();
     Ctrl.select();
     alert(PromptStr);
}

function gt0Check(val,mens) {
   var message="Ingrese un numero mayor que cero";

   if (mens!=null) message=mens;
   if (parseFloatSpanish(val)<=0) return message;
   return null;
}

function ge0Check(val,mens) {
   var message="Ingrese un numero mayor o igual que cero";

   if (mens!=null) message=mens;
   if (parseFloatSpanish(val)<0) return message;
   return null;
}

function lt0Check(val,mens) {
   var message="Ingrese un numero menor que cero";

   if (mens!=null) message=mens;
   if (0<=parseFloatSpanish(val)) return message;
   return null;
}

function le0Check(val,mens) {
   var message="Ingrese un numero menor o igual que cero";

   if (mens!=null) message=mens;
   if (0<parseFloatSpanish(val)) return message;
   return null;
}

function dateCheck(val,mens) {
   var i=0, j=0;
   var day, month, year, message="Ingrese una fecha (DD/MM/AAAA)";

   if (val.length==0) return message;

   if (mens!=null) message=mens;
   i=val.indexOf("/");
   if (i==-1 || i==0) return message;

   j=val.lastIndexOf("/");
   if (i==j || j==val.length) return message;

   day=val.substring(0,i);
   month=val.substring(i+1,j);
   year=val.substring(j+1,val.length);

   if (day.length==0) return message;
   for (i=0; i<day.length; i++)
      if ("0123456789".indexOf(day.charAt(i))==-1)
         return message;
   j=parseInt(day, 10);
   if (!(1<=j && j<=31)) return message;

   if (month.length==0) return message;
   for (i=0; i<month.length; i++)
      if ("0123456789".indexOf(month.charAt(i))==-1)
         return message;
   j=parseInt(month, 10);
   if (!(1<=j && j<=12)) return message;

   if (year.length!=4) return message;
   for (i=0; i<year.length; i++)
      if ("0123456789".indexOf(year.charAt(i))==-1)
         return message;
   if (!(0<parseInt(year, 10)))  return message;

   return null;
}

function gtDate(val1,val2,mens) {
   var i=0, j=0;
   var day1, day2;
   var month1, month2;
   var year1, year2;
   var message="FECHAS INVALIDAS: Ingrese una fecha de inicio menor a la fecha de finalización";

   if (mens!=null) message=mens;

   i=val1.indexOf("/");
   if (i==-1 || i==0) return message;

   j=val1.lastIndexOf("/");
   if (i==j || j==val1.length) return message;

   day1=val1.substring(0,i);
   month1=val1.substring(i+1,j);
   year1=val1.substring(j+1,val1.length);

   i=val2.indexOf("/");
   if (i==-1 || i==0) return message;

   j=val2.lastIndexOf("/");
   if (i==j || j==val2.length) return message;

   day2=val2.substring(0,i);
   month2=val2.substring(i+1,j);
   year2=val2.substring(j+1,val2.length);

   // compare year, month & day
   if (parseInt(year1, 10)>parseInt(year2, 10))  return message;
   if (parseInt(year1, 10)==parseInt(year2, 10)) {
      if (parseInt(month1, 10)>parseInt(month2, 10))  return message;
      if (parseInt(month1, 10)==parseInt(month2, 10)) {
         if (parseInt(day1, 10)>parseInt(day2, 10))  return message;
      }
   }

   return null;
}

function patternMatchCheck(val,mask,mens) {
   var message="Ingrese un valor de la forma '" + mask + "'";
   var i=0, m=null, c=null;

   if (mens!=null) message=mens;
   // Chequeo longitud
   if (val.length!=mask.length) return message;

   // Comparo caracteres uno a uno
   for (i=0; i<val.length; i++) {
      m=mask.charAt(i);
      c=val.charAt(i);
      if (m=="?") continue;
      if (m=="N") {
         if ("0123456789".indexOf(c)==-1) return message;
      } else if (m=="A") {
         if ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".indexOf(c)==-1) return message;
      } else if (m!=c) return message;
   }

   return null;
}

function parseFloatSpanish(val) {
   var i = val.indexOf(",");

   var coma = val.indexOf(",");
   var punto = val.indexOf(".");

   var pentera="";
   var pdecimal="";
   var retval=val;


   if ( coma != -1 && punto != -1 ) {
     val = val.substring (0,punto) + val.substring (punto+1);
   }

   if (!(i==-1 || i==0)) {
      pentera=val.substring(0,i);
      pdecimal=val.substring(i+1,val.length);
      retval=pentera + '.' + pdecimal;
   }

   return parseFloat(retval);
}

function CleanForm(frm) {

   return true;
}

function checkGreaterThanCero(field, fieldName, errors) {
    var i = field.indexOf(",");

    if (i > 0 ) {
        field = takeDot(field.substring(0, i)) + "."  + field.substring(i+1, field.length);
    }

    if ( field > 0 ) {
        return errors;
    }
    errors += "\n - El campo " + fieldName + " es invalido.";
    return errors;
}

//function checkNumeric(num, fieldName, errors) {
//    var i;
//
//    for ( i = 0 ; i < num.length ; i++ ) {
//        if ( num.charAt(i) != '.'  && num.charAt(i) != ',') {
//            if ( (num.charAt(i) < '0') || (num.charAt(i) > '9') ) {
//                errors += "\n - El campo " + fieldName + " debe ser numerico.";
//                break;
//            }
//        }
//    }
//    return errors;
//}

function checkNumericLength(field, fieldName, errors) {
        var i = 0;
        i = field.indexOf(",");
        if ( i > 0 ) {
            field = field.substring(0, i);
        } else {
            i = field.indexOf(".");
            if ( i > 0 ) {
                    field = field.substring(0,i);
            }
        }

        if( field.length > 10 )  {
        errors += "\n - El campo " + fieldName + " es demasiado grande.";
        }

        return errors;
}

function alphaCheck(msgInput,msg)
{
	var ret=null;
	var i=0;

	while(ret==null && i<msgInput.length)
	{
		var alphaChar=msgInput.charAt(i);
		if( alpha.indexOf(alphaChar.toUpperCase())==-1 && digits.indexOf(alphaChar)==-1 )
			ret=msg;
		i++;
	}

	return ret;
}

function lengthLimitCheck(val,mens,len)
{
	var message="El limite permitido es de " + len + " caracteres";
	if (mens!=null) message=mens;
	if (val.length>len) return message;
	return null;
}


function ltCheck(val,lim,mens)
{
	var message="Ingrese un numero menor o igual que "+ lim;

	if (mens!=null) message=mens;
	if (lim<parseFloatSpanish(val)) return message;
	return null;
}


function AlfaNumCheck(val,mens)
{
	var message="Ingrese al menos una letra (a - z, A - Z) y un numero (0 - 9)";
	var i = 0;
	var j = 0;
	var k = 0;
	for (i = 0; i < val.length; i++)
	{
		c = val.charAt(i);
		if (( digits.indexOf(c) != -1 ) && ( j != -1 ) )
			 j = 1;

		if (( alpha.indexOf(c) != -1) || ( lowAlpha.indexOf(c) != -1 ) && ( k != -1 ))
			 k = 1;

	}

	if (( j == 0 ) || ( k == 0 ))
	    return message;
	else
	    return null;
}

function tr(s,a,b) {
   var r = "";
   for(i=0; i<s.length ; i++)
      r = r + ((s.charAt(i) == a) ? b : s.charAt(i));

   return r;
}

//
// wrapper para pesos
//
function actualizarPesos(checkbox, importe)
{
	var form = checkbox.form;
	actualizar(checkbox, importe, form.montoTotalPesos);
	form.pesosDisplay.value = form.montoTotalPesos.value;
}

//
// wrapper para dolares
//
function actualizarDolares(checkbox, importe)
{
	var form = checkbox.form;
	actualizar(checkbox, importe, form.montoTotalDolares);
	form.dolaresDisplay.value = form.montoTotalDolares.value;
}

//
// input es montoTotalDolares o montoTotalPesos
// checkbox es el checkbox invocante.
// importe es el valor a sumar/restar,
//
// importe: MONEDA <BLANK> P_ENTERA<COMA>P_DECIMAL
//
// MONEDA: $ | u$s
// P_ENTERA: puede ser cero
// P_DECIMAL: dos decimales
//
function actualizar(checkbox, importe, input)
{
	form = checkbox.form;

	x = tr(importe,',','.');
	total = tr(input.value,',','.');
	valorASumar = parseFloat(x);
	valorTotal  = parseFloat(total);

	if(checkbox.checked != true)
		x = valorTotal - valorASumar;
	else
		x = valorTotal + valorASumar;


	// La operacion es la siguiente, se multiplica el numero float por 100, se lo
	// pasa a string, se toma los substring decimales y enteros y se ubica donde
	// corresponda.
	//
	x = x * 100;

	//
	// Esto no deberia tener efecto porque siempre son DOS DECIMALES.
	//
	resultado = Math.round(x);
	//
	// Cast a string
	//
	result = "" + resultado;

	if (result.length == 1)
	{
		var entero = "";
		var decimales = "0" + result;
	}

	if (result.length == 2)
	{
		var entero = "";
		var decimales = result ;
	}


	if (result.length > 2)
	{
		var entero = "" + result.substring(0, result.length - 2);
		var decimales = "" + result.substring(result.length - 2, result.length);
	}
	if (entero == "")
		entero = "0";

	if(decimales != '0')
		input.value = "" + entero + "," + decimales;
	else
		input.value = "" + "0,00";
}

function formatValue(txt, lim) {
	//alert('formatValue()');

	var c = 0;
	while (txt.value.charAt(c) == '0' || txt.value.charAt(c) == ' ')
		c++;

	var auxaux = txt.value.substr(c);
	var aux = tr(auxaux, '.', ',');
	c = aux.indexOf(",");

	if (c == -1)    // No existe ','
	{
		if (aux.length == 0)
			aux = "0";

		t = aux + ",00";
	}
	else			// existe ','
	{
		if (c == 0)   // sin enteros
		{
			aux = "0" + aux;
			c++;
		}
		aux += "00";
		t = aux.substring(0, c + 3);
	}

	if(txt.name != "pesosDisplay" && txt.name != "dolaresDisplay")
	{
		message=realCheck(t,null,9,2,"no");
		if (message == null)
		{
			message = gt0Check(t, null);
		}

		if (message == null)
		{
			if ( lim != null )
			{
				message = ltCheck(t, lim, null);
			}

		}
		if (message != null)
		{
			validatePrompt(txt, message);
			return false;
		}

	}

	txt.value = t;

	return true;
}

function checkFocus(txt, cmb)
{
	if (cmb[cmb.selectedIndex].value == "OI")
		return true;
	else
	cmb.focus();
}

function changeImporte(cmb, txt)
{
//	alert('changeImporte()');

	if (cmb[cmb.selectedIndex].value != "OI")  // != OtroImporte
	{
		txt.value = cmb[cmb.selectedIndex].value;
		//txt.onFocus = cmb.focus;
	}
	else
	{
		//txt.value = "";
		//txt.onFocus = txt.focus;
	}

	return true;
}

function checkMandatory(field, fieldName, errors) {
    if ( field ) {
        if ( field != "" ) {
            return errors;
        }
    }
    errors += "\n - el campo " + fieldName + " debe ser ingresado.";
    return errors;
}

//function formatValue(txt) {
//   var c = 0;
//   while (txt.value.charAt(c) == '0' || txt.value.charAt(c) == ' ')
//     c++;
//
//   var auxaux = txt.value.substr(c);
//   var aux = tr(auxaux, '.', ',');
//   c = aux.indexOf(",");
//
//   if (c == -1) {    // No existe ','
//      if (aux.length == 0)
//         aux = "0";
//      t = aux + ",00";
//   } else {			// existe ','
//      if (c == 0) {   // sin enteros
//         aux = "0" + aux;
//        c++;
//      }
//      aux += "00";
//      t = aux.substring(0, c + 3);
//   }
//
//   if(txt.name != "pesosDisplay" && txt.name != "dolaresDisplay") {
//      message=realCheck(t,null,9,2,"no");
//         if (message == null) {
//            message = gt0Check(t, null);
//          }
//      if (message != null) {
//         validatePrompt(txt, message);
//         return false;
//      }
//   }
//
//   txt.value = t;
//
//   return true;
//}

//function realCheck(val,mens,enteros,decimales,negativos) {
//   var i=0, j=0, start=0;
//   var pref, suf;
//   var message="Ingrese un valor numerico (NNNNNN,NN)";
//   var messageNegativos="Ingrese un valor positivo";
//   var messageEnteros="Ingrese un valor con a lo sumo " + enteros + " enteros";
//  var messageDecimales="Ingrese un valor con a lo sumo " + decimales +" decimales";
//
//   if (mens!=null)
//      message=mens;
//
//   if (val.length==0)
//      return null;
//
//   if (negativos=="no" && val.charAt(0)=="-")
//      return messageNegativos;
//
//   if (val.charAt(0)=="+")
//      return message;
//
//   // busco la posicion del separador de decimales
//   i=val.indexOf(",");
//
//   // NNN
//   if (i==-1) {
//      if (integerCheck(val,mens)!=null)
//         return message;
//      else {
//         if (val.length>enteros)
//            return messageEnteros;
//         else
//            return null;
//      }
//   }
//   // ,NNN
//   if ( i == 0 )
//      return message;
//
//   // NNN,
//   if ( i == (val.length-1) )
//     return message;
//
//   if ( val.length > 0 && (val.charAt(0) == "+" || val.charAt(0) == "-") )
//      start=1;
//
//   // la longitud de la parte entera debe ser <= que el parametro enteros
//   pref = val.substring(start,i);
//   if ( pref.length > enteros )
//      return messageEnteros;
//
//   // la longitud de la parte decimal debe ser <= que el parametro decimales
//   suf = val.substring ( i+1,val.length );
//   if ( suf.length>decimales )
//      return messageDecimales;
//
//   // me fijo que la parte entera sean todos numeros
//   if ( i > 0 )
//      for ( j=0; j<pref.length; j++ )
//         if ("0123456789".indexOf(pref.charAt(j))==-1)
//            return message;
//
//   // me fijo que la parte decimal sean todos numeros
//   for (j=0; j<suf.length; j++)
//      if ("0123456789".indexOf(suf.charAt(j))==-1)
//         return message;
//
//   return null;
//}

//function checkMandatory(field, fieldName, errors) {
//    if ( field ) {
//        if ( field != "" ) {
//            return errors;
//        }
//    }
//    errors += "\n - el campo " + fieldName + " debe ser ingresado.";
//    return errors;
//}

function checkNumeric(num, fieldName, errors) {
    var i;

    for ( i = 0 ; i < num.length ; i++ ) {
        if ( (num.charAt(i) < '0') || (num.charAt(i) > '9') ) {
            errors += "\n - el campo " + fieldName + " debe ser numerico.";
            break;
        }
    }
    return errors;
}

function checkDV(cuit)
{
	var  pesos = "54327654321";
	var suma = 0;
	var mod = 0;
	var i = 0;
	var mensaje = "Por favor, ingrese un CUIT/CUIL/CDI valido.";

	for (i = 0; i < cuit.length; i++)
	{
		suma += cuit.charAt(i) * pesos.charAt(i);
	}
	mod = suma % 11;

	if (mod == 0)
		return null;
	else
		return mensaje;
}

