
function deleteCriteria( sName )
{
  var pTab = getLayer( 'sortbar_crit_' + sName );

  if( pTab && pTab.rows != null )
  {
    var len = pTab.rows.length;
    for( var i = (len -1 ); i>= 0 ; i-- )
    {
      pTab.deleteRow( i );
    }
  }
}

function showCriteria( sName )
{
  deleteCriteria( sName );

  var formName = eval( 'sFormName_' + sName );

  var aPlusLink = eval( 'aPlusLink_' + sName );
  var aMinusLink = eval( 'aMinusLink_' + sName );
  var aAndOr = eval( 'aAndOr_' + sName );
  var aColumns = eval( 'aColumns_' + sName );
  var aColumnNames = eval( 'aSearchColumnNames_' + sName );
  var aSearchColumns = eval( 'aSearchColumns_' + sName );
  var aCriteria = eval( 'aCriteria_' + sName );
  var pTab = getLayer( 'sortbar_crit_' + sName );
  if(!pTab)
    return;
  if( aCriteria.length == 0 )
  {
    aCriteria[0] = new Array( '', null, '', '' );
  }
  setInputValue( 'criteria_len_' + sName, aCriteria.length, formName );
  for( var i = 0 ; i < aCriteria.length ; i++ )
  {
    //alert( aCriteria[ i ] );
    var pRow = pTab.insertRow( i );

    var pAndOrCell = pRow.insertCell(0);
    var pColumnCell = pRow.insertCell(1);
    var pOperatorCell = pRow.insertCell(2);
    var pColumnValueCell = pRow.insertCell(3);
    var pPlusMinusCell = pRow.insertCell(4);

    if( i > 0 )
    {
      pAndOrCell.innerHTML = evalFunc( aAndOr[1], aAndOr[0], 'and_or_'+i );
      evalFunc( aAndOr[2], 'and_or_'+i, aCriteria[i][0], formName );
      pPlusMinusCell.innerHTML = evalFunc( aPlusLink[1], aPlusLink[0], 'javascript:addCriteria( \''+sName+'\', '+i+' )' ) + evalFunc( aMinusLink[1], aMinusLink[0], 'javascript:removeCriteria( \''+sName+'\', '+i+' )' );
    }
    else
    {
      var sTmp = evalFunc( aPlusLink[1], aPlusLink[0], 'javascript:addCriteria( \''+sName+'\', '+i+' )' );
      pPlusMinusCell.innerHTML = sTmp;
    }
    //alert( aColumns[1] + ',' + aColumns[0] );
    var sTmp = evalFunc( aColumns[1], aColumns[0], 'column_name_'+i );
    pColumnCell.innerHTML = sTmp;
    //alert( pColumnCell.innerHTML );
    if( aCriteria[i][1] != null )
    {
      evalFunc( aColumns[2], 'column_name_'+i, aCriteria[i][1], formName );
    }

    changeColumn( sName, 'column_name_'+i, 1 );
  }
}

function changeColumn( sName, sColumnName, init )
{
  var formName = eval( 'sFormName_' + sName );

  var sTmp = new String( sColumnName );
  var i = sTmp.match( /column_name_(\d+)$/ )[1];

  var aSearchColumns = eval( 'aSearchColumns_' + sName );
  var aColumnNames = eval( 'aSearchColumnNames_' + sName );
  var aCriteria = eval( 'aCriteria_' + sName );
  if( !init )
  {
    aCriteria[i][3] = '';
  }

  var pTab = getLayer( 'sortbar_crit_' + sName );
  var pOperatorCell = pTab.rows[ i ].cells[ 2 ];
  var pColumnValueCell = pTab.rows[ i ].cells[ 3 ];

  var nIdx = aColumnNames[ getInputValue( 'column_name_' + i, formName ) ];
  var aSearchColumn = aSearchColumns[ nIdx ];
  
  // on ne plante pas si la colonne n'est pas 'cherchable'
  if( !aSearchColumn )
  {
    pOperatorCell.innerHTML = '';
  }
  else
  {
    var sOperatorHTML = evalFunc( aSearchColumn[2], aSearchColumn[1], 'operator_'+i );
    //sOperatorHTML = new String(sOperatorHTML).replace(/onChangeEvent/, "showColumnValue( '"+sName+"', '"+sColumnName+"', this.value )");
    pOperatorCell.innerHTML = sOperatorHTML;
    evalFunc( aSearchColumn[3], 'operator_'+i, aCriteria[i][2], formName );

    pColumnValueCell.innerHTML = evalFunc( aSearchColumn[6], aSearchColumn[5], 'column_value_'+i );
    evalFunc( aSearchColumn[7], 'column_value_'+i, aCriteria[i][3], formName );

    var ColumnObject = getFormObject('column_value_'+i, formName);
    if (ColumnObject && ColumnObject.className == 'control_date' )
    {
    	// specific for date input, to hide value field when select "empty" operator
    	setDateEmptyValue( sName, 'operator_'+i, aCriteria[i][2] );
    }
    else if (ColumnObject && ColumnObject.className == 'control_datetime')
    {
       // specific for datetime input, to hide value field when select "empty" operator
       setDateTimeEmptyValue( sName, 'operator_'+i, aCriteria[i][2] );
    }
    else
    {
    	setTextEmptyValue( sName, 'operator_'+i, aCriteria[i][2]);
    }
    // si une méthode de vérification de format est spécifiée pour cette colonne,
    //  on la met en place pour être appelée lors de l'envoi du formulaire
    if( aSearchColumn[9] )
      setInputChecker( 'column_value_'+i, true, null, null, null, aSearchColumn[9], 'GO_CRIT');
    else
      removeInputChecher( 'column_value_'+i );
  }
}

/**
 * specific for text input, to hide value field when select "empty" operator
 */
function setTextEmptyValue( sName, sColumnName, sValue )
{
  var i = new String( sColumnName ).match( /operator_(\d+)$/ )[1];
  var formName = eval( 'sFormName_' + sName );
  
  var sVisibility = 'visible';
  if(new String(sValue).match(/^EM/) || new String(sValue).match(/^NN/) )
    sVisibility = 'hidden';

  var pCB = getFormObject(sColumnName+'_cs', formName);
  if(pCB)
    pCB.style.visibility = sVisibility;
  var pText = getFormObject('column_value_'+i, formName);
  if(pText)
    pText.style.visibility = sVisibility;
  var pLabel = getDOMObject(sColumnName+'_label');
  if(pLabel)
    pLabel.style.visibility = sVisibility;
}

/**
 * specific for date input, to hide value field when select "empty" operator
 */
function setDateEmptyValue( sName, sColumnName, sValue )
{
  var i = new String( sColumnName ).match( /operator_(\d+)$/ )[1];
  var formName = eval( 'sFormName_' + sName );

  var sVisibility = 'visible';
  if(new String(sValue).match(/^EM/) || new String(sValue).match(/^NN/) )
    sVisibility = 'hidden';

  var pDate = getFormObject('column_value_'+i, formName);
  if(pDate)
    pDate.style.visibility = sVisibility;

  var pLink = getFormObject( 'column_value_'+i+'_link' );
  if( pLink )
    pLink.style.visibility = sVisibility;
}

/**
 * specific for datetime input, to hide value field when select "empty" operator
 */
function setDateTimeEmptyValue( sName, sColumnName, sValue )
{
  var i = new String( sColumnName ).match( /operator_(\d+)$/ )[1];
  var formName = eval( 'sFormName_' + sName );

  var sVisibility = 'visible';
  if(new String(sValue).match(/^EM/) || new String(sValue).match(/^NN/) )
    sVisibility = 'hidden';

  var pDate = getFormObject('column_value_'+i, formName);
  if(pDate)
    pDate.style.visibility = sVisibility;

  var pLink = getFormObject( 'column_value_'+i+'_link' );
  if( pLink )
    pLink.style.visibility = sVisibility;
    
  var pTime = getFormObject( 'column_value_'+i+'_time' );
  if( pTime )
    pTime.style.visibility = sVisibility;
}

function removeCriteria( sName, idx )
{
  storeCriteria( sName );

  var aCriteria = eval( 'aCriteria_' + sName );
  var aColumnNames = eval( 'aSearchColumnNames_' + sName );

  var len = aCriteria.length;

  for( var i = idx ; i < (len-1) ; i++ )
  {
    aCriteria[ i ] = aCriteria[ i + 1 ];
  }
  aCriteria[ len - 1 ] = null;

  aCriteria.length = len - 1;

  showCriteria( sName );
}

function addCriteria( sName, idx )
{
  storeCriteria( sName );

  idx++;

  var aCriteria = eval( 'aCriteria_' + sName );
  var aColumnNames = eval( 'aSearchColumnNames_' + sName );
  var aSearchColumns = eval( 'aSearchColumns_' + sName );

  var len = aCriteria.length;
  for( var i = len ; i > idx ; i-- )
  {
    aCriteria[ i ] = aCriteria[ i - 1 ];
  }
  aCriteria[idx] = new Array( '', aSearchColumns[0][0], '', '' );

  showCriteria( sName );
}

function storeCriteria( sName )
{
  var aCriteria = eval( 'aCriteria_' + sName );
  var aColumns = eval( 'aColumns_' + sName );
  var aSearchColumns = eval( 'aSearchColumns_' + sName );
  var aColumnNames = eval( 'aSearchColumnNames_' + sName );
  var aAndOr = eval( 'aAndOr_' + sName );
  var formName = eval( 'sFormName_' + sName );

  var len = aCriteria.length;
  for( var i = 0 ; i < len ; i++ )
  {
    var nIdx = aColumnNames[ getInputValue( 'column_name_' + i, formName ) ];
    var aSearchColumn = aSearchColumns[ nIdx ];
    
    if( aSearchColumn )
    {
      aCriteria[i][0] = (i>0) ? evalFunc( aAndOr[3], 'and_or_'+i, formName ) : '';
      aCriteria[i][1] = evalFunc( aColumns[3], 'column_name_'+i, formName );
      aCriteria[i][2] = evalFunc( aSearchColumn[4], 'operator_'+i, formName );
      aCriteria[i][3] = evalFunc( aSearchColumn[8], 'column_value_'+i, formName );
    }
  }
}

function checkPeriodTypeCodeFlags( sFieldName, sFormName)
{
  return checkOneCheckboxIsChecked(
      new Array('period_type_code_is_quotas', 'period_type_code_is_alo', 'period_type_code_is_res'),
      sFormName,
      getUserMessage('LANG_one_period_type_flag_should_be_checked') );
}

function checkOneCheckboxIsChecked(aCheckBoxNames, sFormName, sMessage)
{
  var bIsOneChecked = false;
  
  for(var i=0;i<aCheckBoxNames.length;i++)
  {
    var pCB = getFormObject(aCheckBoxNames[i], sFormName);
    if(pCB.checked)
    {
      bIsOneChecked = true;
      break;
    }
  }
  if(!bIsOneChecked)
  {
    showMessage(sMessage);
    return false;
  }
  return true;
}