/*==============================================================================

PROYECTO  : 11itzulpen
NOMBRE    : js/lib.js
FECHA     : 21-AGO-07
AUTOR     : Ricardo Puerto <rpuerto@veoveo.es>
COPYRIGHT : Copyright (c) 2007 11itzulpen

SUMARIO

Funciones JavaScript de uso general específicas de 11itzulpen para ejecución
en cliente.

==============================================================================*/


/*------------------------------------------------------------------------------
Comprueba que una contraseña sea sintácticamente correcta.
Nota: No comprueba la longitud de la cadena, sólo los caracteres que la
componen, considerando una contraseña válida una cadena de al menos un
carácter válido (ver código).
Nota: Traducción literal de CheckPassword() en inc/lib.php.
------------------------------------------------------------------------------*/

function checkPassword(pwd){
	return pwd.match(/^[A-Za-z0-9._-]+$/);
}

/*------------------------------------------------------------------------------
Comprueba si una cadena de texto puede convertirse en valor numérico indicando
un precio.
'str' es la cadena de texto representando el valor numérico en la forma i[,f],
donde i es la parte entera y f es la parte decimal. La parte entera puede
contener puntos como separador de miles, pero en ese caso todos los separadores
deben aparecer y estar correctamente situados cada tres dígitos.
Devuelve el valor numérico (redondeado a dos decimales) o null si no puede
convertirse o está fuera de rango (0.00-9999999.99).
Nota: Traducción literal de CheckPrice() en inc/lib.php.
------------------------------------------------------------------------------*/

function checkPrice(str){
	var n;
	if(str.match(/^(\d+|(\d{1,3}(\.\d{3})+))(,\d+)?$/, str)){
		n = str.replace(".", "").replace(",", ".") - 0;
 		if(n >= 0 && n <= 9999999.99)
 			return Math.round(n * 100) / 100;
 	}
	return null;
}

/*------------------------------------------------------------------------------
Comprueba si una cadena de texto puede convertirse en valor numérico indicando
una tarifa (precio por palabra).
$str es la cadena de texto representando el valor numérico en la forma i[,f],
donde i es la parte entera y f es la parte decimal.
Devuelve el valor numérico (redondeado a cuatro decimales) o null si no puede
convertirse o está fuera de rango (0.00-99.9999).
Nota: Traducción literal de CheckRate() en inc/lib.php.
------------------------------------------------------------------------------*/

function checkRate(str){
	var n;
	if(str.match(/^\d+(,\d+)?$/, str)){
		n = str.replace(",", ".") - 0;
 		if(n >= 0 && n <= 99.9999)
 			return Math.round(n * 10000) / 10000;
 	}
	return null;
}

/*------------------------------------------------------------------------------
Formatea un precio para mostrar (dos decimales, coma como separador decimal y
punto como separador de miles).
Nota: Traducción literal de FormatPrice() en inc/lib.php.
------------------------------------------------------------------------------*/

function formatPrice(nr){
	var s, t, v;
	s = Math.abs(Math.round(nr * 100)) + "";
	s = ("000").substr(s.length) + s;
	for(k = s.length, j = k - 2, t = "", v = ","; j > 0; j -= 3){
		t = v + s.substring(j, k) + t;
		v = ".";
		k = j;
	}
	if(k)
		t = s.substring(0, k) + t;
	if(nr < 0)
		t = "-" + t;
	return t;
}

/*------------------------------------------------------------------------------
Formatea un número de palabras para mostrar (sin decimales y punto como
separador de miles).
Nota: Traducción literal de FormatWords() en inc/lib.php.
------------------------------------------------------------------------------*/

function formatWords(nr){
	var s, t;
	s = Math.abs(Math.round(nr)) + "";
	for(k = s.length, j = k - 3, t = ""; j > 0; j -= 3){
		t = "." + s.substring(j, k) + t;
		k = j;
	}
	if(k)
		t = s.substring(0, k) + t;
	if(nr < 0)
		t = "-" + t;
	return t;
}

/*------------------------------------------------------------------------------
Formatea una tarifa (dos decimales mínimo, cuatro decimales máximo, coma como
separador decimal y punto como separador de miles).
Nota: Traducción literal de formatRate() en inc/lib.php.
------------------------------------------------------------------------------*/

function formatRate(nr){
	var s, t, v;
	s = Math.abs(Math.round(nr * 10000)) + "";
	s = ("00000").substr(s.length) + s;
	for(k = s.length, j = k - 4, t = "", v = ","; j > 0; j -= 3){
		t = v + s.substring(j, k) + t;
		v = ".";
		k = j;
	}
	if(k)
		t = s.substring(0, k) + t;
	if(nr < 0)
		t = "-" + t;
	t = t.replace(/(0|00)$/, "");
	return t;
}

/*------------------------------------------------------------------------------
Calcula el número de días de entrega de una traducción en función del número de
palabras y el tipo de servicio.
'words' es el número de palabras.
'service' es el tipo de servicio (1=standard, 2=express).
Notas: 1500 palabras/día (mínimo 2 días) si estándar; 2000 palabras/día
(mínimo 1 día) si express.
Nota: Traducción literal de GetDeliveryDays() en inc/lib.php.
------------------------------------------------------------------------------*/

function getDeliveryDays(words, service){
	return service - 0 == 1 ? Math.max(Math.floor((words - 1) / 1500 + 1), 2) :
		Math.max(Math.floor((words - 1) / 2000 + 1), 1);
}
