
// --------------------------------------------------
var isGecko = /gecko/i.test(navigator.userAgent);
var isMSIE = /MSIE/.test(navigator.userAgent);
// --------------------------------------------------
function days_in_february(year) {
  return (((year % 4 == 0) && ((!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}
// --------------------------------------------------
function is_date(year, month, day) {
  var arr_days_in_month = new Array(null, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
  if (year < 1) {
    return false;
  }
  if (month < 1 || month > 12) {
    return false;
  }
  if (day < 1 || day > 31) {
    return false;
  }
  if (day > arr_days_in_month[month]) {
    return false;
  }
  if ((month == 2) && (day > days_in_february(year))) {
    return false;
  }
  return true;
}
// --------------------------------------------------
function is_email(str) {
  var regExpr = /^[0-9a-z\-\_]+(.[0-9a-z\-\_]+)*@[0-9a-z\-]+(.[0-9a-z\-]+)*\.[0-9a-z][0-9a-z]+$/;
  return regExpr.test(str);
}
// --------------------------------------------------
function is_extended_ascii(str) {
  var regExpr = /^[0-9a-z]+$/;
  return !regExpr.test(str);
}
// --------------------------------------------------
function is_integer(str) {
  var regExpr = /^-?[0-9]+$/;
  return regExpr.test(str);
}
// --------------------------------------------------
function move_option(from, to) {
  if (from.selectedIndex == -1) {
    alert("Por favor, seleccione un elemento de la lista");
    from.focus();
    return;
  }
  var value = from.options[from.selectedIndex].value;
  var text = from.options[from.selectedIndex].text;
  var option = new Option(text, value);
  to.options[to.length] = option;
  from.remove(from.selectedIndex);
}
// --------------------------------------------------
function popup(url, name, width, height, left, top, dependent, resizable) {
  if (left == 0) {
    left = (screen.width - width) / 2;
  }
  if (top == 0) {
    top = (screen.height - height) / 2;
  }
  if (resizable == "") {
    resizable = "no"
  }
  var popup = window.open(url, name, "dependent=" + dependent + ", height=" + height + ", left=" + left + ", resizable=" + resizable + ", scrollbars=yes, top=" + top + ", width=" + width);
  popup.focus();
}
// --------------------------------------------------
function trim(string) {
  var regExpr = /^\s*|\s*$/g;
  return string.replace(regExpr, "");
}
// --------------------------------------------------
function replaceStr(inputStr, findSubstr, replaceSubstr) {
  var outputStr = new String(inputStr);
  if (outputStr.length < 1) {
    return null;
  }
  var regExpr = eval("/" + findSubstr + "/g");
  outputStr = outputStr.replace(regExpr, replaceSubstr);
  return outputStr;
}
// --------------------------------------------------
Array.prototype.inArray = function(value) {
  var i;
  for (i = 0; i < this.length; i++) {
    if (this[i] == value) {
      return true;
    }
  }
  return false;
}
// --------------------------------------------------
function getSelectionStart(element) {
	if (isGecko) {
    return element.selectionStart;
  } else if (isMSIE) {
  	var range = document.selection.createRange();
  	var isCollapsed = range.compareEndPoints("StartToEnd", range) == 0;
  	if (!isCollapsed) {
      range.collapse(true);
    }
  	var bookmark = range.getBookmark();
  	return bookmark.charCodeAt(2) - 2;
  } else {
    return null;
  }
}
// --------------------------------------------------
function getSelectionEnd(element) {
	if (isGecko) {
    return element.selectionEnd;
  } else if (isMSIE) {
  	var range = document.selection.createRange();
  	var isCollapsed = range.compareEndPoints("StartToEnd", range) == 0;
  	if (!isCollapsed) {
  		range.collapse(false);
    }
  	var bookmark = range.getBookmark();
  	return bookmark.charCodeAt(2) - 2;
  } else {
    return null;
  }
}
// --------------------------------------------------
function setSelectionRange(element, start, end) {
	if (isGecko) {
		element.setSelectionRange(start, end);
	} else if (isMSIE) {
		var range = element.createTextRange();
		range.collapse(true);
		range.moveStart("character", start);
		range.moveEnd("character", end - start);
		range.select();
	} else {
    return null;
  }
}
// --------------------------------------------------
function formatNumber(num, decimals) {
  num = (num != "") ? parseFloat(replaceStr(num, ",", ".")) : 0;
  var sign = (num < 0) ? -1 : 1;
  decimals = (isNaN(decimals) || decimals < 0) ? 0 : parseInt(decimals);
  num *= Math.pow(10, decimals);
  num = Math.round(Math.abs(num));
  num /= Math.pow(10, decimals);
  var str = num.toString();
  var decPos = str.indexOf(".");
  if (decPos == -1) {
    var intPart = str;
    var decPart = "";
  } else {
    var intPart = str.substr(0, decPos);
    var decPart = str.substr(decPos + 1, str.length - 1);
  }
  var i = intPart.length - 3;
  while (i > 0) {
    intPart = intPart.substr(0, i) + "." + intPart.substr(i, intPart.length);
    i -= 3;
  }
  while (decPart.length < decimals) {
    decPart = "0" + decPart;
  }
  decPart = (decimals > 0) ? "," + decPart : decPart;
  return ((sign == -1) ? "-" : "") + intPart + decPart;
}
// --------------------------------------------------
function formatInput(element, decimals) {
  element.value = formatNumber(element.value, decimals);
  element.style.color = (element.value.indexOf("-") > -1) ? "#FF0000" : "#000000";
}
// --------------------------------------------------
function unformatInput(element) {
  element.value = replaceStr(element.value, "\\.", "");
}
// --------------------------------------------------
function checkInput(element, eventCode) {
  var keys = new Array(0, 8, 13, 44, 45, 46, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57);
  var key = window.event ? eventCode.keyCode : eventCode.which;
  var hyphen = (element.value.indexOf("-") > -1) ? true : false;
  var comma = (element.value.indexOf(",") > -1) ? true : false;
  var dot = (element.value.indexOf(".") > -1) ? true : false;
  var decPos = comma ? element.value.indexOf(",") : element.value.indexOf(".");
  if (!keys.inArray(key)) {
    return false;
  } else if (key == 45 && (getSelectionStart(element) > 0 || hyphen)) {
    return false;
  } else if ((key == 44 || key == 46) && (comma || dot) && !(getSelectionStart(element) <= decPos && getSelectionEnd(element) > decPos)) {
    return false;
  } else {
    return true;
  }
}
// --------------------------------------------------
