
var wm_Panel =
{
	oPanel: null,
	dropSheet: false,
	isOpen: false,
	panelDiv: null,
	offsetLeft: 150,
	offsetTop: 70,
	init: function()
	{
  	// Work out where the #content DIV is placed ...
  	// - will be done in CSS
		
	},

	setInitFocus: function( )
	{		
		// Get hold of the overlay panel ...
		var panelDiv = wm_Panel.panelDiv;
		
		// ... and find a link to give focus to.
		var links = panelDiv.getElementsByTagName("a");
		for ( var i = 0; i < links.length; i++ ) {
  		if ( ! Core.hasClass( links[i], "close-link" ) ) {
    		var defaultLink = links[i];
    		break;
  		}
		}
		if ( defaultLink ) {
  		defaultLink.focus();
  	}
	},
  
	setEvents: function( )
	{
		Core.addEventListener( window, "resize", wm_Panel.resizeListener );
		Core.addEventListener( document, "keyup", wm_Panel.keyupListener );
	},
  
	unsetEvents: function( )
	{
		Core.removeEventListener( window, "resize", wm_Panel.resizeListener );
		Core.removeEventListener( document, "keyup", wm_Panel.keyupListener );
	},
  
	show: function( panelID )
	{		

		// Find the overlay panel ...
		wm_Panel.panelDiv = document.getElementById( panelID );
		
		switch( panelID ) {
			case "ov_form_register" :
			case "ov_forgotten_password" :
			case "ov_forgotten_password_thankyou" :
				wm_Panel.offsetLeft = 1;
				wm_Panel.offsetTop = 6;
				break;
			case "ov_form_share" :
				wm_Panel.offsetLeft = 140;
				wm_Panel.offsetTop = 10;
				break;					
			case "ov_confirm_delete" :
				wm_Panel.offsetLeft = 340;
				wm_Panel.offsetTop = 100;
				break;
			case "ov_confirm_remove" :
				wm_Panel.offsetLeft = 340;
				wm_Panel.offsetTop = 100;
				break;
			case "ov_generic" :
				wm_Panel.offsetLeft = 329;
				wm_Panel.offsetTop = 200;
				break;
			case "ov_form_forgotten_password" :
			case "ov_form_forgotten_password_thankyou" :
			case "ov_form_change_password_thankyou" :
				wm_Panel.offsetLeft = 329;
				wm_Panel.offsetTop = 200;
				break;
			case "ov_storefinder" :
				wm_Panel.offsetLeft = 340;
				wm_Panel.offsetTop = 100;
				break;
			case "ov_specify" :
				wm_Panel.offsetLeft = 85;
				wm_Panel.offsetTop = 85;
				break;
			case "ov_shippingDetails" :
				wm_Panel.offsetLeft = 329;
				wm_Panel.offsetTop = 200;
				break;
			case "ov_salesTaxDisclaimer" :
				wm_Panel.offsetLeft = 329;
				wm_Panel.offsetTop = 200;
				break;
				case "ov_deleteAccountAsk" :
        wm_Panel.offsetLeft = 340;
        wm_Panel.offsetTop = 400;
        break;				
      case "ov_prompt_option" :
        wm_Panel.offsetLeft = 340;
        wm_Panel.offsetTop = 100;
        break;
			default:
				wm_Panel.offsetLeft = 150;
				wm_Panel.offsetTop = 200;
		}
		
		// Find the close button in the panel ...
		var links = wm_Panel.panelDiv.getElementsByTagName("a");
		for ( var i = 0; i < links.length; i++ ) {
  		if ( Core.hasClass( links[i], "close-link" ) ) {
    		var closeLink = links[i];
  		}
		}
		// ... and the click/focus behaviours.
		if ( closeLink ) {
  		Core.addEventListener( closeLink, "click", wm_Panel.closeListener );
  		Core.addEventListener( closeLink, "blur", wm_Panel.focusListener );
  	}
		
    // Display the dropsheet ...
    wm_Panel.createDropSheet( );
		// ... position the panel ...
		wm_Panel.position( );
		// ... and make the panel appear.
		wm_Panel.panelDiv.style.display = "block";
		// Set initial focus.
		wm_Panel.setEvents();
		wm_Panel.setInitFocus();
		wm_Panel.isOpen = true;
	},
  
	hide: function( )
	{
		// Hide the panel being displayed ...
    wm_Panel.panelDiv.style.display = "none";
    // ... and hide the dropsheet.
    wm_Panel.destroyDropSheet( );
		wm_Panel.unsetEvents();
    wm_Panel.isOpen = false;
	},
  
	position: function( )
	{
		// Hide the panel being displayed ...
		// Get hold of the Configurator element ...
		var configDiv = document.getElementById( "configurator" );
		var screenPos = wm_Screen.getPosition( configDiv );
		// ... and find out where it is positioned.
		var leftPos = screenPos[0] + wm_Panel.offsetLeft;
		var topPos = screenPos[1] + wm_Panel.offsetTop;
		// Now work out where to position the overlay.
    wm_Panel.panelDiv.style.left = leftPos + "px";
    wm_Panel.panelDiv.style.top = topPos + "px";
	},
  
	createDropSheet: function( )
	{
		// Hide the panel being displayed ...
    var body = document.getElementsByTagName("body")[0];
    var pageDimensions = wm_Screen.getPageDimensions();
    var viewportSize = wm_Screen.getViewportSize();

    if ( viewportSize[1] > pageDimensions[1] ) {
      pageDimensions[1] = viewportSize[1];
    }
    
    var dropSheet = document.createElement( "div" );
    dropSheet.setAttribute( "id", "dropSheet" );
    dropSheet.style.position = "absolute";
    wm_Panel.positionDropSheet( dropSheet );
    var parent = wm_Panel.panelDiv.parentNode;
    parent.insertBefore( dropSheet, wm_Panel.panelDiv );
    wm_Panel.dropSheet = dropSheet;

    // IE6: disable all SELECTs in #content
		var IE6 = false /*@cc_on || @_jscript_version < 5.7 @*/;
		if ( IE6 ) {
			var contentDiv = document.getElementById( "content" );
			var selects = contentDiv.getElementsByTagName( "select" );
			for ( var i = 0; i < selects.length; i++ ) {
				selects[i].disabled = true;
			}
		}
    
	},
  
	positionDropSheet: function( dropSheet )
	{
		// Hide the panel being displayed ...
    var body = document.getElementsByTagName("body")[0];
    var pageDimensions = wm_Screen.getPageDimensions();
    var viewportSize = wm_Screen.getViewportSize();

    if ( viewportSize[1] > pageDimensions[1] ) {
      pageDimensions[1] = viewportSize[1];
    }
    
    dropSheet.style.left = "0";
    dropSheet.style.top = "0";
    dropSheet.style.width = pageDimensions[0] + "px";
    dropSheet.style.height = pageDimensions[1] + "px";
	},
  
	destroyDropSheet: function( )
	{
		// Hide the panel being displayed ...
		var dropSheet = document.getElementById( "dropSheet" );
		dropSheet.parentNode.removeChild( dropSheet );
		wm_Panel.dropSheet = null;
    // IE6: enable all SELECTs in #content
		var IE6 = false /*@cc_on || @_jscript_version < 5.7 @*/;
		if ( IE6 ) {
			var contentDiv = document.getElementById( "content" );
			var selects = contentDiv.getElementsByTagName( "select" );
			for ( var i = 0; i < selects.length; i++ ) {
				selects[i].disabled = false;
			}
		}
    
	},
  
	
	keyupListener: function(event)
	{
  	if ( ! wm_Panel.isOpen ) {
    	return true;
  	}
		var e = event || window.event;
		if ( e.keyCode == 27 ) {
  		wm_Panel.hide( );
  		Core.preventDefault(event);
  		wm_Panel.isOpen = false;
		}
	},
	
	closeListener: function( event )
	{
		wm_Panel.hide( );
		Core.preventDefault(event);
		wm_Panel.isOpen = false;
	},
	
	focusListener: function( event )
	{
		if ( wm_Panel.isOpen ) {
			wm_Panel.setInitFocus( );
			Core.preventDefault(event);
		}
	},
	
	resizeListener: function( )
	{
  	if ( wm_Panel.isOpen ) {
    	wm_Panel.positionDropSheet( wm_Panel.dropSheet );
			wm_Panel.position( );
  	}
	}
		
};

Core.start(wm_Panel);

