var VIEW_RVALUE_ENTER_TITLE = "Voer hieronder één of meerdere zoektermen in";
var VIEW_RVALUE_PICK_TITLE = "Selecteer of voer hieronder één of meerdere zoektermen in";
var VIEW_RVALUE_PICK_HR = "----------------------------------------";

function resetFieldSelect( select, row )
{
//    clearSelect( getOpSelect( row ), 0 );         //take out if don't use oplist
    clearRvaluePickSelect( getRvaluePickSelect( row ) );
//    select.selectedIndex = 0;                          //take out if don't use oplist
    if (row == 0) {
      select.selectedIndex = 2;
    } else {
      select.selectedIndex = 0;
    }
    
    getRvalueInput( row ).value = "";
}

function doChangeFieldSelect( select, row )
{
    var fieldName = select.options[ select.selectedIndex ].value;
    if( fieldName=="" ) {
        resetFieldSelect( select, row );
        return;
    }

    var field = fields[ fieldName ];
    /*
     * This if block should never get executed, since field should never equal null.
     * ... but just in case...
     */
    if( field==null ) {
        resetFieldSelect( select, row );
        return;
    }

    updateForNewField( field, row, false );
    getRvalueInput( row ).value = "";
}

function updateForNewField( field, row, saveOldIndex )
{
// --following 12 lines used for poplist in OP (take out if don't use poplist)
//    var opSelect = getOpSelect( row );
//    var opSelectIndex = opSelect.selectedIndex;
  
//   selectFill( opSelect,
//               field.opList,
//               0,
//               0 );
   
//    if( saveOldIndex )
//        opSelect.selectedIndex = opSelectIndex;
//    else
//        opSelect.selectedIndex = 0;

    var rvaluePickSelect = getRvaluePickSelect( row );
    selectRvaluePickFill( rvaluePickSelect,
                          field.rvalueList );
    rvaluePickSelect.selectedIndex = 0;
}

function doChangeRvalueSelect( select, row )
{
    var rvaluePick = select.options[ select.selectedIndex ].value;
    if( rvaluePick=="" ) {
        select.selectedIndex = 0;
        return;
    }

    if( rvaluePick.search( /\s/ )>=0 )
        rvaluePick = '"' + rvaluePick + '"';

    var rvalueInput = getRvalueInput( row );
    var rvalue = rvalueInput.value;
    rvalue = rvalue.replace( /\s+$/, "" );
    if( rvalue=="" ) {
        rvalueInput.value = rvaluePick;
        return;
    }
    
    var result = rvalue.match( /\b\w+$/ );
    if( result!=null ) {
        var lastWord = result[0].toUpperCase();
        if( lastWord=="EN" || lastWord=="OF" || lastWord=="NIET" ) {
            rvalueInput.value = rvalue + " " + rvaluePick;
            return;
        }
    }
    rvalueInput.value = rvalue + " OF " + rvaluePick;
}

function clearSelect( select, start )
{
    for( var i=select.options.length-1; i>=start; --i )
        select.options[i] = null;
}

function clearRvaluePickSelect( select )
{
    select.options[0] = new Option( VIEW_RVALUE_ENTER_TITLE, "" );
    select.selectedIndex = 0;
    clearSelect( select, 1 );
}

function getField( row )
{
    var fieldSelect = getFieldSelect( row );
    var fieldName = fieldSelect.options[ fieldSelect.selectedIndex ].value;
    if( fieldName=="" )
        return null;

    return fields[ fieldName ];
}

function getFieldSelect( row )
{
    return document.searchAdvForm[ "row" + row + "_field" ];
}

function getFieldDefaultInput( row )
{
    return document.searchAdvForm[ "row" + row + "_fieldDefault" ];
}

function getOpSelect( row )
{
    return document.searchAdvForm[ "row" + row + "_op" ];
}

function getRvaluePickSelect( row )
{
    return document.searchAdvForm[ "row" + row + "_rvaluePick" ];
}

function getRvalueInput( row )
{
    return document.searchAdvForm[ "row" + row + "_rvalue" ];
}

function getDateRvalueInput( row )
{
    return document.searchAdvForm[ "date" + row + "_rvalue" ];
}

function getJoinerSelect( row )
{
    return document.searchAdvForm[ "row" + row + "_joiner" ];
}

function selectFill( select, optionList, selectStart )
{
    var nOptions = optionList.length;
    
    for( var i=0; i<nOptions; ++i ) {
        var item = optionList[i];
        if( item.length==1 )
            select.options[ i+selectStart ] = new Option( item[0], item[0] );
        else
            select.options[ i+selectStart ] = new Option( item[1], item[0] );
    }

    clearSelect( select, nOptions+selectStart );
}

function selectRvaluePickFill( select, optionList )
{
    if( optionList==null || optionList.length==0 ) {
        clearRvaluePickSelect( select );
        return;
    }

    select.options[0] = new Option( VIEW_RVALUE_PICK_TITLE, "" );
    select.options[1] = new Option( VIEW_RVALUE_PICK_HR, "" );

    selectFill( select, optionList, 2 );
}

/*
 * Note: this is called both when the page is first loaded and
 * if the user hits their back button to return to the page.
 */
function initRows( nRows )
{

    for( var row=0; row<nRows; ++row ) {
//       var opSelect = getOpSelect( row );                                   //take out if don't use oplist
        var rvaluePickSelect = getRvaluePickSelect( row );
        var field = getField( row );
        if( field==null ) {
//            clearSelect( opSelect, 0 );                                            //take out if don't use oplist
            clearRvaluePickSelect( rvaluePickSelect );
        }
        else {
            if( field.name==getFieldDefaultInput( row ).value ) {
//                if( field.opList==null )                                             //take out if don't use oplist
//                    clearSelect( opSelect, 0 );                                  //take out if don't use oplist
//                else                                                                        //take out if don't use oplist  
//                    clearSelect( opSelect, field.opList.length );          //take out if don't use oplist

                if( field.rvalueList==null )
                    clearRvaluePickSelect( rvaluePickSelect );
                else
                    clearSelect( rvaluePickSelect, field.rvalueList.length );
            }
            else {
                updateForNewField( field, row, true );
            }
        }
    }
}

function clearRows( nRows )
{
    for( var row=0; row<nRows; ++row ) {
        var fieldSelect = getFieldSelect( row );
        resetFieldSelect( fieldSelect, row );
//        var joinerSelect = getJoinerSelect( row );
//        if( joinerSelect!=null )
//            joinerSelect.selectedIndex = 0;
    }
}

function getDateFieldSelect( row ){
    return document.searchAdvForm[ "date" + row + "_field" ];
}

function getDateOpSelect( row ){
    return document.searchAdvForm[ "date" + row + "_op" ];
}

function getDateRvalueInput( row ){
    return document.searchAdvForm[ "date" + row + "_rvalue" ];
}

function clearDateFields(select , row){ 
 clearDateOp( getDateOpSelect( row ) );
 clearDateRvalue( getDateRvalueInput( row ) ); 
} 

function clearDateOp( select ){
 select.selectedIndex = 0;   
}

function clearDateRvalue( select ){
   select.value = ""; 
}  

