/*
*	use with onKeyPress event to e.g. submit a form
*/
function do_on_enterkey( event, object, func )
{   
	var code = 0;

	if (document.layers) {
		code = event.which; /* NS4 */
	}
	else {
		code = event.keyCode;
	}
	if (code==13) {
		if ( func ) {
			Event.stop( event );
			return func( );
		}
		else {
			object.form.submit( );
		}
	}
}	


function submit_once(formObject, confMsg) {  
	if ( formObject.alreadySubmitted ) {   
		alert('Your request had already been submitted, please be patient.');
		window.location = document.URL;
	} else {
		formObject.alreadySubmitted = true;
		//  this onsubmit() is extremely necessary for the rich text fields: if omitted, their content will not be saved
		if ( formObject.onsubmit ) {
			formObject.onsubmit( );
		}
	
		formObject.submit();
	}
}


function pad_number( num, total_length ) {
	
	var new_number = num.toString( );

	while ( new_number.length < total_length ) {
		new_number = '0' + new_number;
	}
	
	return new_number;
}


function toggle_visibility ( element_id ) {

	var element  =  document.getElementById( element_id );

	if ( ! element ) {
		return false;
	}

	if ( element.style.display == "none" ) {
		element.style.display  =  "";
	}
	else {
		element.style.display  =  "none";
	}

	return false;

}

function get_selected(el) {
	if (el.selectedIndex == -1) return '';
	return el.options[el.selectedIndex].value;
}

function get_selected_text(el) {
	if (el.selectedIndex == -1) return '';
	return el.options[el.selectedIndex].text;
}

function set_selected(el, value) {
	if (!el || ! el.options ) return;

	for ( var i=0; i < el.options.length; i++ ) {
		if ( el.options[i].value == value ) {
			el.selectedIndex = i;
			el.options[i].selected = 'selected';
			break;
		}

	}
}


/* Javascript implementation of Logger */

var Logger  =  { };

if ( typeof Clockwork !== "undefined" ) {
	Logger.log_level  =  Clockwork.config.logger_level ? Clockwork.config.logger_level : CW_LOG_PRODUCTION_LEVEL;
}

Logger.log  =  function ( message, level ) {

	if ( ! level ) {
		level  =  CW_LOG_DEFAULT_LEVEL;
	}

	if ( Logger.log_level & level ) {
		var now  =  new Date( );
		message  =  '[' + now.toString( ) + '] ' + message;

		try { 
			console.log( message );
		}
		catch ( e ) {
			alert( message );
		}
	}
}

Logger.set_checkpoint  =  function ( message, level ) {
	var new_checkpoint  =  ( new Date( ) ).getTime( );
	if ( message ) {
		Logger.log( message + '[elapsed: ' + ( ( new_checkpoint - Logger.checkpoint ) / 1000.0 ) +
					'; cumulative: ' + ( ( new_checkpoint - Logger.first_checkpoint ) / 1000.0 ) + ']', level );
	}
	Logger.checkpoint  =  new_checkpoint;
}


/* Removes a single GET parameter from an URL.  
* Useful for removing problematic parameters when making 
* an ajax POST request to the same URL.
*/


function removeParameter(url, parameter)
{
  var urlparts= url.split('?');

  if (urlparts.length>=2)
  {
      var urlBase=urlparts.shift(); //get first part, and remove from array
      var queryString=urlparts.join("?"); //join it back up

      var prefix = encodeURIComponent(parameter)+'=';
      var pars = queryString.split(/[&;]/g);
      for (var i= pars.length; i-->0;)               //reverse iteration as may be destructive
          if (pars[i].lastIndexOf(prefix, 0)!==-1)   //idiom for string.startsWith
              pars.splice(i, 1);
      url = urlBase+'?'+pars.join('&');
  }
  return url;
}


function setUrlParameter(key,value) {
    key = escape(key); value = escape(value);

    var _url = document.location.href;

    var kvp = key + "=" + value;

    var r = new RegExp( "(&|\\?)" + key + "=[^\&]*" );

    _url = _url.replace( r, "$1" + kvp );

    if( ! RegExp.$1 ) {
		_url += ( document.location.search.length > 0 ? '&' : '?' ) + kvp;
	}

	return _url;
}


/* firebug-specific log & info shortcuts, for debugging only */
function log(txt) {try {console.log(txt);} catch (e) {}}
function info(txt) {try {console.info(txt);} catch (e) {}}

