/****************************************/
/*   Project:							*/
/*   Date: MMM/dd/yy					*/
/*   Customer: 							*/
/*										*/
/*   Company: Desarrollos Web			*/
/*	 URL: www.desarrollosweb.com		*/
/*   Author: René Gallardo				*/
/*	 Description: deweb JS				*/
/****************************************/


/*

------------ Funciones para creacion de ventanas

*/

/** Crea una ventana tipo pop up
* @param url direccion URL de la página a abrir
* @param name Nombre que se le dará a la ventana
* @param popW ancho de la ventana (num. entero)
* @param popH alto de la ventana (num. entero)
* @param scroll si va a llevar scroll la ventana o no ('yes', 'no')
*/
function popup(url, name, popW, popH, scroll) { // V 1.0
	var winleft = (screen.width - popW) / 2;
	var winUp = (screen.height - popH) / 2;
	winProp = 'width='+popW+',height='+popH+',left='+winleft+',top='+winUp+',scrollbars='+scroll+',resizable,menubar=no,location=no';
	Win = window.open(url, name, winProp);
	if (parseInt(navigator.appVersion) >= 4) { Win.window.focus(); }
}


var child = null;

/** Crea una ventana tipo pop up
* @param URL de la página a abrir
* @param Nombre que se le dará a la ventana
* @param ancho de la ventana (num. entero)
* @param alto de la ventana (num. entero)
* @param si va a llevar scroll la ventana o no ('yes', 'no')
*/
function openWindow(page, windowID, height, width, scroll){
     var winleft = (screen.width - width) / 2;
     var winUp = (screen.height - height) / 2;
     winProp = 'width='+width+',height='+height+',left='+winleft+',top='+winUp+',scrollbars='+scroll+',resizable,menubar=no,location=no';
   child = window.open(page, windowID, winProp);
}

/** Esta funcion debe ir en el evento onFocus de la ventana padre
* donde se pretende que no se muestre si un pop up aun esta abierta
* (<body onFocus="javascript:keep_child_on_top();">)
* y se debe utilizar la funcion 'openWindow'
*/
function keep_child_on_top(){
  if (child != null){
     if (child.closed)
         child = null;
      else
         child.focus();
  }
}

/*

------------ Funciones para validaciones de números

*/

/** Valida que una cadena sea un número entero valido
* @param sText cadena a validar
*/
function IsInteger(sText)
{
   var ValidChars = "0123456789-";
   var IsNumber=true;
   var Char;

   for (i = 0; i < sText.length && IsNumber == true; i++)
      {
      Char = sText.charAt(i);
      if (ValidChars.indexOf(Char) == -1)
         {
         IsNumber = false;
         }
      }
   return IsNumber;
}

/** Verifica que la cadena sea un numero valido
* @param sNumber cadena a validar
*/
function IsValidNumber(sNumber) {
   if (!((sNumber.charAt(0) == '-') || (IsDigit(sNumber.charAt(0))) || (sNumber.charAt(0) == '.')))
      return false;
   if (!(HasDigit(sNumber))) return false; 
   if (sNumber.charAt(0) == '-') sNumber = sNumber.substring(1, sNumber.length);
   if (!((IsDigit(sNumber.charAt(0))) || (sNumber.charAt(0) == '.'))) return false;
   if (IsDigit(sNumber.charAt(0))) {
      for (i = 1; i < sNumber.length; i++) {
         if (!(IsDigit(sNumber.charAt(i))) && sNumber.charAt(i) != '.') return false;
         if (sNumber.charAt(i) == '.') {
            sNumber = sNumber.substring(i, sNumber.length);
            break;
         }
      }
   }
   if (sNumber.charAt(0) == '.') {
      for (i = 1; i < sNumber.length; i++)
         if (!(IsDigit(sNumber.charAt(i)))) return false;
   }
   return true;
}

/** Verifica que el caracter que se le pasa sea un digito
* @param cDigit caracter a validar
*/
function IsDigit (cDigit) {
   var digits = "0123456789";
   if (digits.indexOf(cDigit) == -1)
      return false;
   return true;
}

/** Verifica que la cadena sean puros digitos (0 - 9)
* @param sNumber cadena a validar
*/
function HasDigit(sNumber) {
   for (i=0; i < sNumber.length; i++){
       if (IsDigit(sNumber.charAt(i))) return true;
   }
   return false;
}


/*

------------ Funciones para validaciones de números

*/

/** Verifica que la cadena sea una fecha valida segun el parametro habilitado
* @param dateStr fecha a validar
*/
function isValidDate(dateStr) {
	//var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;  //mm/dd/yyyy
	//var datePat = /^(\d{4})(\/|-)(\d{1,2})\2(\d{1,2})$/;  //yyyy/mm/dd	
	var datePat = /^(\d{1,2})(\/|-)(\d{1,2})\2(\d{4})$/;  //dd/mm/yyyy
	var matchArray = dateStr.match(datePat);
	if (matchArray == null) {
//		alert("La fecha " + dateStr + " no tiene un formato válido.\n El formato es dd/mm/yyyy" )
		return false;
	}
	day = matchArray[1]; 
	month = matchArray[3];
	year = matchArray[4];
        if(dateStr.length != 10){
//        alert("La fecha " + dateStr + " no tiene un formato válido.\n El formato es dd/mm/yyyy" )
		return false;
	    
        }
        
	if (month < 1 || month > 12) { 
//		alert("El Mes debe estar entre  1 y 12.");
		return false;
	}
	if (day < 1 || day > 31) {
//		alert("El Dia debe estar entre 1 y 31.");
		return false;
	}
	if ((month==4 || month==6 || month==9 || month==11) && day==31) {
//		alert("El mes "+month+" no tiene 31 dias!")
		return false;
	}
	if (month == 2) { 
	var isleap = (year % 4 == 0 && (year % 100 != 0 || year % 400 == 0));
	if (day>29 || (day==29 && !isleap)) {
//		alert("Febrero del " + year + " no tiene " + day + " dias!");
		return false;
	   }
	}
	return true;
}

/*

------------ Funciones para validaciones de cadenas

*/

/** Valida que una cadena sea una estructura de email valida
* @param sText cadena a validar
*/
function IsEmail(sText){
    var p, val;

    val = sText;
    p = val.indexOf('@');

    if (p < 1 || p == (val.length - 1)){
        return false;
    }

	return true;
}

/** Valida que una cadena sea un valida para login
* @param sText cadena a validar
*/
function IsLogin(sText){
	var ValidChars	= "0123456789ABCDEFGHIJKLMNÑOPQRSTUVWXYZabcdefghijklmnñopkrstuvwxyz";
	var IsValid		= true;
	var Char;

	for (i = 0; i < sText.length && IsValid == true; i++){
		Char = sText.charAt(i);
		if (ValidChars.indexOf(Char) == -1){
			IsValid = false;
		}
	}
	return IsValid;
}

/*
==================================================================
LTrim(string) : Returns a copy of a string without leading spaces.
==================================================================
*/
function LTrim(str)
/*
   PURPOSE: Remove leading blanks from our string.
   IN: str - the string we want to LTrim
*/
{
   var whitespace = new String(" \t\n\r");

   var s = new String(str);

   if (whitespace.indexOf(s.charAt(0)) != -1) {
      // We have a string with leading blank(s)...

      var j=0, i = s.length;

      // Iterate from the far left of string until we
      // don't have any more whitespace...
      while (j < i && whitespace.indexOf(s.charAt(j)) != -1)
         j++;

      // Get the substring from the first non-whitespace
      // character to the end of the string...
      s = s.substring(j, i);
   }
   return s;
}

/*
==================================================================
RTrim(string) : Returns a copy of a string without trailing spaces.
==================================================================
*/
function RTrim(str)
/*
   PURPOSE: Remove trailing blanks from our string.
   IN: str - the string we want to RTrim

*/
{
   // We don't want to trip JUST spaces, but also tabs,
   // line feeds, etc.  Add anything else you want to
   // "trim" here in Whitespace
   var whitespace = new String(" \t\n\r");

   var s = new String(str);

   if (whitespace.indexOf(s.charAt(s.length-1)) != -1) {
      // We have a string with trailing blank(s)...

      var i = s.length - 1;       // Get length of string

      // Iterate from the far right of string until we
      // don't have any more whitespace...
      while (i >= 0 && whitespace.indexOf(s.charAt(i)) != -1)
         i--;


      // Get the substring from the front of the string to
      // where the last non-whitespace character is...
      s = s.substring(0, i+1);
   }

   return s;
}

/*
=============================================================
Trim(string) : Returns a copy of a string without leading or trailing spaces
=============================================================
*/
function Trim(str)
/*
   PURPOSE: Remove trailing and leading blanks from our string.
   IN: str - the string we want to Trim

   RETVAL: A Trimmed string!
*/
{
   return RTrim(LTrim(str));
}

