/**
* Javascript Library
* Version 1.002
* Copyright eChiron 2005
* All Rights Reserved
*
* Functions:
*
* validateInt( iString )
* validateFloat( iString )
* isLeapYear( year )
* isStringDate( )
* isDate()
* isDateBefore( testDate, otherDate )
* isDateBeforeToday( testDate )
* isEmail( email )
* isScriptFree()
* isPhoneNumber( string )
* isPhoneNumber( string, base ) base - ISO country code ("pt")
* isPostCode( string )
* isAlpha( string )
* isNumber( string )
* isAlphaNumber( string )
* isAlphaName( string )
* isCarStringNumber( carString )
* isCarNumber( base1, base2, base3 )
* isNIB( string )
* isISBN( string )
* isBI( string )
* isNIF( string )
* _isValNum( string ) - string with a number
*/

var boxes = '';
function validateInt( iString ){
    // no leading 0s allowed
    return (("" + parseInt(iString)) == iString);
}

function validateFloat( iString ){
    return ( parseFloat(iString) == iString);
}

/************************ DATE FUNCTIONS ****************************/
var daysOfMonth   = new Array( 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );
var daysOfMonthLeap = new Array( 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 );

function isLeapYear(year) {
    if ((year/4)   != Math.floor(year/4))   return false;
    if ((year/100) != Math.floor(year/100)) return true;
    if ((year/400) != Math.floor(year/400)) return false;
    return true;
}

// Checks if Date is in the "dd.mm.yyyy" format
function isStringDate( dateString ){
	if( dateString.length != 10 )
		return false;
	
	if( !isNumber( dateString.substring(0,2) ) || !isNumber( dateString.substring(0,2) ) || !isNumber( dateString.substring(6,10) ) )
		return false;
	
	return isDate( parseInt(dateString.substring(0,2),10), parseInt(dateString.substring(3,5),10)-1, parseInt(dateString.substring(6,10),10) );
}

// Checks if given parameter has a date
function isDate( day, month, year ){
	
  if( !day || !year ) 
		return false;

	if( day < 1 || day > 31 )
		return false;
		
	if( month < 0 || month > 11 )
		return false;
		
	if( year < 0 )
		return false;
	
	if( isLeapYear(year) ){
	  	daysOfMonth = daysOfMonthLeap;
	}

	if( day > daysOfMonth[month] )
		return false;

    var test = new Date(year,month,day);
	
    if ( (test.getFullYear() == year) && (month == test.getMonth()) && (day == test.getDate()) )
        return true;
    else
        return false;
}

function isDateBefore( testDate, otherDate ){
	if( testDate.length != 10 || otherDate.length != 10 )
		return false;
	
	var one = new Date( parseInt(testDate.substring(6,10),10), parseInt(testDate.substring(3,5),10)-1, parseInt(testDate.substring(0,2),10) );
	var two = new Date( parseInt(otherDate.substring(6,10),10), parseInt(otherDate.substring(3,5),10)-1, parseInt(otherDate.substring(0,2),10) );

	return one < two;
}

function isDateBeforeToday( testDate ){
	if( testDate.length != 10  )
		return false;
	
	var one = new Date( parseInt(testDate.substring(6,10),10), parseInt(testDate.substring(3,5),10)-1, parseInt(testDate.substring(0,2),10) );
	
	return one < new Date();
}


function isEmail( string ){
    if (string.search(/^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$/) != -1)
        return true;
    else
        return false;
}

function isScriptFree( string ){
	if ( string.match(/\<|\>|\"/) == null )
        return true;
    else
        return false;
}

function isPhoneNumber( string ){
	if ( string.match(/[^0-9\+\- ()]/) == null )
        return true;
    else
        return false;
}

function isPhoneNumber( string ){
	return isPhoneNumber( string, ' ' );
}

function isPhoneNumber( string, base ){
	if( base = "pt" && string.length != 9 )
		return false;
	
	if ( string.match(/[^0-9\+\- ()]/) == null )
        return true;
    else
        return false;
}

function isPostCode( string ){
	if( string.length != 8 )
		return false;
		
	return isNumber(string.substring(0,3)) && isNumber(string.substring(5,8));
}

function isAlpha( string ){
	if ( string.match(/[^a-zA-Z]/) == null )
        return true;
    else
        return false;
}

function isNumber( string ){
	if ( string.match(/[^0-9]/) == null )
        return true;
    else
        return false;
}

function isAlphaNumber( string ){
	if ( string.match(/[^0-9a-zA-Z]/) == null )
        return true;
    else
        return false;
}

function isAlphaName( string ){
	if ( string.match(/[^a-zA-ZáÁàÀéÉèÈíÍìÌóÓòÒúÚùÙçÇãÃõÕâÂêÊîÎôÔûÛ ()]/) == null )
        return true;
    else
        return false;
}

function isCarStringNumber( carString ){
	if( carString == null )	return false;
	if( carString.length != 8 )
		return false;
	
	return isCarNumber( carString.substring(0,2), carString.substring(3,5), carString.substring(6,8) );
}

function isCarNumber( base1, base2, base3 ){
	
	if( base1.length != 2 || base2.length != 2 || base3.length != 2 )
		return false;
	
	if( (isAlpha(base1)  && isNumber( base2 ) && isNumber( base3 )) || 
		(isNumber(base1) && isAlpha( base2 ) &&  isNumber( base3 )) ||
		(isNumber(base1) && isNumber( base2 ) && isAlpha( base3 ))  ){
		
		if( base1 == "00" && base2 == "00" )
			return false;
			
		return true;
	}
	
	return false;
}


var MAX_BI_LENGTH = 9;
var MAX_NIF_LENGTH = 9;
var MAX_ISBN_LENGTH = 10;
var MAX_NIB_LENGTH = 21;

function isNIB( testNIB ){
	if( testNIB.length != MAX_NIB_LENGTH )
		return false;

	var pos, value = 0;
	var table = new Array( 73, 17, 89, 38, 62, 45, 53, 15, 50, 
						   5, 49, 34, 81, 76, 27, 90, 9, 30, 3 );
	
	for( pos = 0; pos < MAX_NIB_LENGTH - 2; pos++ )
		value += parseInt(testNIB.charAt(pos),10) * table[pos];
	
	value = 98 - value % 97;
	
	return value == parseInt(testNIB.charAt(MAX_NIB_LENGTH-2),10) * 10 + parseInt(testNIB.charAt(MAX_NIB_LENGTH-1),10);
}

function isISBN( testISBN ){
	if( testISBN.length != MAX_ISBN_LENGTH )
		return false;
	//alert( testISBN.length );	
	var i = 0, sum = 0;
	var lastNumber;
	
	for( ; i < MAX_ISBN_LENGTH - 1; i++ )
		sum += ((i+1) * parseInt(testISBN.charAt(i),10));
	
	switch( testISBN.charAt(MAX_ISBN_LENGTH-1) ){
		case 'x': case 'X':
			lastNumber = 10;
			break;
		default:
			lastNumber = parseInt( testISBN.charAt(MAX_ISBN_LENGTH-1), 10 );
	}
	
	return ((sum % 11) == lastNumber );
}

function isBI( testBI ){
	var testValue = '';
	if( testBI.length != MAX_BI_LENGTH && testBI.length != MAX_BI_LENGTH - 1 )
		return false;
		
	if( testBI.length == MAX_BI_LENGTH - 1 ){
		testValue = '0' + testBI;
	}
	else
		testValue = testBI;
	
	return _isValNum( testValue );
}

function isNIF( testNif ){
	switch( testNif.charAt(0) ){
		case '1': case '2': case '5': 
		case '6': case '9':
			return _isValNum( testNif );
	}
	
	return false;
}

function _isValNum( testValNum ){
	var pos, value = 0;
	
	if( testValNum.length != MAX_NIF_LENGTH )
		return false;
	
	for( pos = 0; pos < testValNum.length - 1; pos++ ){
		value += parseInt(testValNum.charAt(pos)) * (MAX_NIF_LENGTH - pos);
	}

	value = value % 11 ? (11 - value % 11) % 10 : 0;
	
	return value == parseInt(testValNum.charAt(MAX_NIF_LENGTH-1),10);
}
function isInteger(s, resp){
   var i;
   if (resp.value== '') {
      alert('O valor não pode ser nulo.');
      resp.focus();  
      return false;  }
    
     for (i = 0; i < s.length; i++){   
         var c = s.charAt(i);
         if ((c < "0") || (c > "9")){ 
         alert('O valor tem de ser um número inteiro.');
         resp.focus();         
         return false;          
        } 
     }
   }
/*function validate_valor(f, box1, box2, quantos) {
	  var test_flag = false; 	
	  var i;
	  
	  for (i = 1; i < quantos; i++){ 	  	 	  
	  var resp = eval('f.'+box1+i); 
	  var resp2 = eval('f.'+box2+i); 	  
	  if ((isInteger(resp.value, resp) != false) && (isInteger(resp2.value, resp2) != false)) {	  
     f.submit();
  }
  }
}*/

function validate_valor(f, box1, box2, quantos) {
	  var test_flag = false; 	
	  var i;
  if (f.pAdj.value == -999) {
  alert('Há valores errados.');
 	return false;
} else { f.submit();}

}

function validate_valor2(f, box1,xparam) {
	  var test_flag = false;      
    var resp = eval('f.'+box1+xparam);  
    
    if (resp.value== '') {
      alert('O valor não pode ser nulo.');
      resp.focus(); 
      f.pAdj.value = -999;
      return false;}
    if (isInteger(resp.value, resp) == false){
    	f.pAdj.value = -999;
} else { f.pAdj.value ='';} 
}
