var tabs = [];

function clear_tabs() {
	for (i=0; i < tabs.length; ++i) {
		$(tabs[i]).className = null;
	}
}

function click_tab(id) {
	clear_tabs();
	$(id).className = 'current';
}

function notify_clear() {
//  RCM commented out 
//	$('notices').innerHTML ='';
}

function notify_user(type, message) {
//  RCM commented out 
//	$('notices').innerHTML = '<div class="'+type+'" onclick="Element.hide(\''+type+'\');" id="'+type+'" >'+message+'</div>';
}

// ****** STATE MACHINE *********

var page_state    = 'UNDEFINED';
var page_mode     = 'UNDEF';

function View(state, box_id, mode, has_tab, open_setup, close_cleanup) {
	this.state         = state;
	this.box_id        = box_id;
	this.mode          = mode;
	this.has_tab       = has_tab;
	this.open_setup    = open_setup;
	this.close_cleanup = close_cleanup;
}

View.prototype.open = function(from_state) {
	Element.show(this.box_id);
	if(this.has_tab == true) { click_tab('tab_'+this.state); }
}

View.prototype.close = function(to_state) {
	Element.hide(this.box_id);
}

var views = {};

function register_view(view) {
	views[view.state] = view;
}

function load_states(states) {
	for(var i=0; i < states.length; ++i) {
		var open_setup    = (states[i][3] == null ? function () {} : states[i][3] );
		var close_cleanup = (states[i][4] == null ? function () {} : states[i][4] );
		register_view( new View(states[i][0], 'box_'+states[i][0].toLowerCase(), states[i][1], states[i][2], open_setup, close_cleanup ) );
	}
}

function transition_to(to_state) {
   var from_state = page_state;
	 if ( to_state == from_state ){ return true; }
//Logger.debug("transitioning page from "+from_state+" to "+to_state);

	var from_view = views[from_state];
	var to_view   = views[to_state];
	from_view.close(to_state);
	from_view.close_cleanup(to_state);
	Element.show('tab_bar_'+to_view.mode);
	if (from_view.mode != to_view.mode) {
		Element.hide('tab_bar_'+from_view.mode);
	}
	to_view.open_setup(from_state);
	to_view.open(from_state);
	
   page_state = to_state;
   page_mode  = to_view.mode;
   notify_clear();
  
//Logger.debug('done transitioning');
   return true;
}


function center(element){
    try{
    	element = document.getElementById(element);
    }catch(e){
        return;
    }

    var my_width  = 0;
    var my_height = 0;

    if ( typeof( window.innerWidth ) == 'number' ){
        my_width  = window.innerWidth;
        my_height = window.innerHeight;
    }else if ( document.documentElement && 
			 ( document.documentElement.clientWidth || document.documentElement.clientHeight ) ){
        my_width  = document.documentElement.clientWidth;
        my_height = document.documentElement.clientHeight;
    }
    else if ( document.body && ( document.body.clientWidth || document.body.clientHeight ) ){
        my_width  = document.body.clientWidth;
        my_height = document.body.clientHeight;
    }

    element.style.position = 'absolute';
    element.style.zIndex   = 99;

    var scrollY = 0;

    if ( document.documentElement && document.documentElement.scrollTop ){
        scrollY = document.documentElement.scrollTop;
    }else if ( document.body && document.body.scrollTop ){
        scrollY = document.body.scrollTop;
    }else if ( window.pageYOffset ){
        scrollY = window.pageYOffset;
    }else if ( window.scrollY ){
        scrollY = window.scrollY;
    }

    var elementDimensions = Element.getDimensions(element);

    var setX = ( my_width  - elementDimensions.width  ) / 2;
    var setY = ( my_height - elementDimensions.height ) / 2 + scrollY;

    setX = ( setX < 0 ) ? 0 : setX;
    setY = ( setY < 0 ) ? 0 : setY;

    element.style.left = setX + "px";
    element.style.top  = setY + "px";

    element.style.display  = 'block';
}
