/**
* Zbiór funkcji sprawdzających pola formularza
* @version  0.1.0-bf2
* @date     2006-02-11 10:08:33
*/

// 'normalny' kolor ramki inputa
if( !cfBorderColor )
  var cfBorderColor   = '#000000';
if( !cfWarningColor )
  var cfWarningColor  = '#ff0000';

// zmienne pomocnicze
var sAllWarnings = '';
var oFirstWrong;
var bIsWarnings = false;
var bAllGood        = true;

// wyrazenia reguralne
var reS = /\s/gi;
var reEmail = /^[a-z0-9_.-]+([_\\.-][a-z0-9]+)*@([a-z0-9_\.-]+([\.][a-z]{2,4}))+$/i;
var reFloat = /^-?[0-9]{1,}[.]{1}[0-9]{1,}$/i;
var reInt = /^-?[0-9]{1,}$/i;
var reDot = /\,/gi;


function fieldOperations( oObj, bCheck, sInfo ){

    if( bCheck === true ) {
    if( oObj.type != 'hidden' )
      oObj.style.borderColor = cfBorderColor;
    }
    else {
    if( sInfo )
        sAllWarnings += sInfo +'\n';
        if( oObj.type != 'hidden' ){
        oObj.style.borderColor = cfWarningColor;
      if( bIsWarnings == false )
        oFirstWrong = oObj;
        }
        bIsWarnings = true;
        return false;
    }

return true;
} // end function fieldOperations


function checkText( oObj, sInfo ) {

    checkT = oObj.value.replace( reS, "" );

  var bCheck = true;
    if( checkT == '' )
    bCheck = false;

  return fieldOperations( oObj, bCheck, sInfo );
} // end function checkText

function checkText2( oObj, sInfo ) {

    checkT = oObj.value.replace( reS, "" );

  var bCheck = true;
//    if( checkT == '' )
//    bCheck = false;

  return fieldOperations( oObj, bCheck, sInfo );
} // end function checkText2


function checkEmail( oObj ) {

    var sEmail = oObj.value.replace( reS, "" );

  var bCheck = true;
    if ( sEmail.search( reEmail ) == -1 )
    bCheck = false;

  return fieldOperations( oObj, bCheck, cfLangMail );
} // end function checkEmail


function checkFloat( oObj, sInfo ) {

  var bCheck = true;
    if( oObj.value.search( reFloat ) == -1 && oObj.value.search( reInt ) == -1 ){
    if( !sInfo )
      var sInfo = cfWrongValue;
    bCheck = false;
  }

  return fieldOperations( oObj, bCheck, sInfo );
} // end function checkFloat


function checkInt( oObj, sInfo ) {

  var bCheck = true;
    if( oObj.value.search( reInt ) == -1 ) {
    if( !sInfo )
      var sInfo = cfWrongValue;
    bCheck = false;
  }

  return fieldOperations( oObj, bCheck, sInfo );
} // end function checkInt


function checkFloatValue( oObj, iMinFloat, sInfo ) {

  var bCheck = true;
    if( +oObj.value <= +iMinFloat ) {
    if( !sInfo )
      var sInfo = cfToSmallValue;
    bCheck = false;
  }

  return fieldOperations( oObj, bCheck, sInfo );
} // end function checkFloatValue

function checkIntValue( oObj, minInt, sign, sInfo ) {
  if( !minInt )
    var minInt = 0;
  if( !sign )
    var sign = '==';
  if( !sInfo )
    var sInfo = cfWrongValue;

    eval ( 'var bCheck = ( '+ +oObj.value +' '+ sign +' '+ +minInt +' );' );

  return fieldOperations( oObj, bCheck, sInfo );
} // end function checkIntValue


function checkTxt( oObj, iMin, sInfo ) {
    if( !iMin )
        var iMin = 6;

    var check = oObj.value.replace( reS, "" );

  var bCheck = true;
    if( check.length < iMin ){
    bCheck = false;
    if( !sInfo )
      var sInfo = cfTxtToShort;
  }
  return fieldOperations( oObj, bCheck, sInfo );
} // end function checkTxt


function cfDot( oObj ){
    return oObj.value.replace(reDot, "\.");
}  // end function cfDot

function cfFix( f ){
    f   = f.toString( );
    var re  = /\,/gi;
    f   = f.replace( re, "\." );

    f = Math.round( f * 100 );
    f = f.toString( );
    var sMinus = f.slice( 0, 1 );
    if( sMinus == '-' ){
     f = f.slice( 1, f.length )
    }
    else
     sMinus = '';
    if( f.length < 3 ) {
        while( f.length < 3 )
            f = '0' + f;
    }

    var w = sMinus + f.slice( 0, f.length-2 ) + "." + f.slice( f.length-2, f.length );

    if( w.search( reFloat ) == -1 )
        w = '0.00';
    return w;
} // end function cfFix

function checkForm( form, aA ) {

  sAllWarnings  = '';
  bIsWarnings   = false;
  bAllGood          = true;
  oFirstWrong   = '';
  var oO; 
  var sT; // typ
  
  for( i in aA ) {

    if( typeof(aA[i][0])=="object" && aA[i][0].constructor == Array ){
      oO = [form[aA[i][0][0]], form[aA[i][0][1]]];
    }
    else
      oO = form[aA[i][0]];

    if( aA[i][1] )
      sT = aA[i][1];
    else
      sT = false;

        if( !sT || sT == 'simple' ) {
            bAllGood = checkText( oO, aA[i][2] );
        }
        else if( !sT || sT == 'simple2' ) {
            bAllGood = checkText2( oO, aA[i][2] );
        }
        else if( ( sT == 'email' ) && ( ( aA[i][2] === true && oO.value ) || !aA[i][2] ) ) {
            bAllGood = checkEmail( oO );
        }
        else if( ( sT == 'float' ) && ( ( aA[i][3] === true && oO.value ) || !aA[i][3] ) ) {
            oO.value = cfDot( oO );
            bAllGood = checkFloat( oO );
            if( bAllGood ){
                oO.value = cfFix( oO.value );
                if( aA[i][2] != '' )
                    bAllGood = checkFloatValue( oO, aA[i][2] );
            }
        }
        else if( ( sT == 'txt' ) && ( ( aA[i][4] === true && oO.value ) || !aA[i][4] ) ) {
            bAllGood = checkTxt( oO, aA[i][2], aA[i][3] );
        }
        else if( ( sT == 'int' ) && ( ( aA[i][5] === true && oO.value ) || !aA[i][5] ) ) {
            bAllGood = checkInt( oO, aA[i][3] );
            if( aA[i][2] && bAllGood ) {
                if( aA[i][4] ) {
                    bAllGood = checkIntValue( oO, aA[i][2], aA[i][4], aA[i][3] );
                }
                else
                    bAllGood = checkFloatValue( oO, aA[i][2], aA[i][3] );
            }
        }

    } // end for

  if( bIsWarnings == true ) {
        sAllWarnings = cfLangNoWord + '\n' + sAllWarnings;
    alert ( sAllWarnings );
    if( oFirstWrong )
      oFirstWrong.focus();
    return false;
    }
return true;
} // end function checkForm


