// vc_id = "$Id: option.js 9260 2006-06-09 00:14:53Z robert $"
// This library represents fairly select/option form functions.
// @author Robert D. Rice

var SELECTED_VALUES = new Object( );

// save the current selected values
// @param select input object
function saveSelectedValues( src ) {
  SELECTED_VALUES[ src.name ] =
    getSelectedValues( src.options );
}

// init the current selected values
// this method will only save the selected
// values if they haven't already been saved.
// for use with onload type of behavior.
// if constant update is required, use 
// saveSelectedValues instead.
// @param select input object
function initSelectedValues( src ) {
  if ( !SELECTED_VALUES[ src.name ] ) {
    saveSelectedValues( src );
  }
}

// haveSelectedValuesChanged
// @param select input object
// @return true if they have changed
function haveSelectedValuesChanged( src ) {
  var former = SELECTED_VALUES[ src.name ];
  var later = getSelectedValues( src.options );
  //logMessage( "old:" + former + " new:" + later );
  var same = areSelectedValuesEqual( former, later );
  //if ( !same ) { logMessage( src.name + " has changed." ); }
  return !same;
}

// get the current selected values
// @param Array of options
// @return Array of values
function getSelectedValues( src ) {
  var selections = new Array();
  var len = src ? src.length : 0;
	
  for ( var i = 0; i < len; i++ ) {
    if ( src[i].selected ) {            
      selections[ selections.length ] = src[i].value;
    }
  }
      
  return selections;
}

// are the selected values the same
// @param Array of values
// @param Array of values
// @return true if the same
function areSelectedValuesEqual( src1, src2 ) {
  var same = true;

  if ( src1.length != src2.length ) {
    same = false;
  } else {
    for ( var i = 0; i < src1.length; i++ ) {
      if ( src1[ i ] != src2[ i ] ) {
        same = false;
        break;
      }
    }
  }

  return same;
}

var LOG;

function setLog( src ) {
  LOG = src;
}

function logMessage( msg ) {
  if ( LOG.value ) {
    LOG.value = LOG.value + "\n" + msg;
  } else {
    LOG.value = msg;
  }
}
