//////////////////////////////////////////////////
////////////////// By Matrak /////////////////////
/* Especificacion */
// ob -> Objeto input text
// ponMascara -> true o false, se refiere a si tiene que poner la mascara, se empleará en el evento onfocus
// valida -> true o false, se refiere a si tiene que validar, se empleará en el evento onblur
// Formato hh:mm
//
// input ejemplo:
//
// <input name="digitos" type="text" onfocus="mascaraHora(this,true,false)" onblur="mascaraHora(this,false,true)" onkeyup="mascaraHora(this,false,false)" value="">
//
function mascaraHora(ob,ponMascara,valida) {
cursor=ob.selectionStart;
/* Validacion cuando la caja pierde el foco*/
if(valida) {
if (/^(0[1-9]|1\d|2[0-3]):([0-5]\d)/.test(ob.value)) {
return true;
}else{
ob.value='';
return false;
}
}
/* Pone mascara si la caja esta en blanco */
if(ponMascara) {
if (ob.value=='') ob.value='hh:mm';
ob.setSelectionRange(0,0);
return true;
}
/* Una vez la hora es correcta no deja añadir mas nada */
if (ob.value.length>5 && /^(0[1-9]|1\d|2[0-3]):([0-5]\d)/.test(ob.value) && cursor > 5) {
ob.value=ob.value.slice(0,ob.value.length-1)
return true;
}
/* Procesa los numeros que se van introduciendo */
if (ob.value.length>5){
switch (cursor){
case 1:
if (/^[012]/.test(ob.value[cursor-1])) {
if (/^[4-9]/.test(ob.value[cursor+1]) && /^[2]/.test(ob.value[cursor-1])) {
//alert('siii')
ob.value=ob.value[cursor]+ob.value.substring(cursor+1,ob.value.length);
ob.setSelectionRange(cursor-1,cursor-1);
}else{
ob.value=ob.value.substring(0,cursor)+ob.value.substring(cursor+1,ob.value.length);
ob.setSelectionRange(cursor,cursor);
}
}else{
ob.value=ob.value.substring( cursor,ob.value.length)
ob.setSelectionRange(cursor-1,cursor-1);
}
break;
case 2:
if (/^[2]/.test(ob.value[cursor-2])) {
if (/^[0-3]/.test(ob.value[cursor-1])) {
ob.value=ob.value.substring(0,cursor)+ob.value.substring(cursor+1,ob.value.length);
ob.setSelectionRange(cursor+1,cursor+1);
}else{
ob.value=ob.value.substring( 0,cursor-1)+ob.value.substring( cursor,ob.value.length)
ob.setSelectionRange(cursor-1,cursor-1);
}
}else if (/^[01]/.test(ob.value[cursor-2])) {
if (/^[0-9]/.test(ob.value[cursor-1])) {
ob.value=ob.value.substring(0,cursor)+ob.value.substring(cursor+1,ob.value.length);
ob.setSelectionRange(cursor+1,cursor+1);
}else{
ob.value=ob.value.substring( 0,cursor-1)+ob.value.substring( cursor,ob.value.length)
ob.setSelectionRange(cursor-1,cursor-1);
}
}else{
ob.value=ob.value.substring( 0,cursor-1)+ob.value.substring( cursor,ob.value.length)
ob.setSelectionRange(cursor-1,cursor-1);
}
break;
case 3:
if (/^:/.test(ob.value[cursor-1])) {
ob.value=ob.value.substring(0,cursor)+ob.value.substring(cursor+1,ob.value.length);
ob.setSelectionRange(cursor,cursor);
}else{
ob.value=ob.value.substring( 0,cursor-1)+ob.value.substring( cursor,ob.value.length)
ob.setSelectionRange(cursor-1,cursor-1);
}
break;
case 4:
if (/^[0-5]/.test(ob.value[cursor-1])) {
ob.value=ob.value.substring(0,cursor)+ob.value.substring(cursor+1,ob.value.length);
ob.setSelectionRange(cursor,cursor);
}else{
ob.value=ob.value.substring( 0,cursor-1)+ob.value.substring( cursor,ob.value.length)
ob.setSelectionRange(cursor-1,cursor-1);
}
break;
case 5:
if (/^[0-9]/.test(ob.value[cursor-1])) {
ob.value=ob.value.substring(0,cursor)+ob.value.substring(cursor+1,ob.value.length);
ob.setSelectionRange(cursor,cursor);
}else{
ob.value=ob.value.substring( 0,cursor-1)+ob.value.substring( cursor,ob.value.length)
ob.setSelectionRange(cursor-1,cursor-1);
}
break;
default:
alert('Error!!!')
break;
}
return true
}else if(ob.value.length<5){
ob.value='hh:mm';
ob.setSelectionRange(0,0);
}
}