
var wm_eLetterFinder =
{
  panelID: 'ov_e-newsletter',
	dropSheet: null,
	isOpen: false,
	panelDiv: null,
	offsetLeft: 150,
	offsetTop: 20,
	init: function()
	{
  	// Work out where the #content DIV is placed ...
  	// - will be done in CSS
		// Get hold of the overlay panel.
		wm_eLetterFinder.panelDiv = document.getElementById( wm_eLetterFinder.panelID );
  	
  	// Set the behaviour for the Store Finder link.
  	var sfLink = document.getElementById( "e_news" );
  	if ( sfLink ) {
    	Core.addEventListener( sfLink, "click", wm_eLetterFinder.clickListener );
  	}
	},

	setInitFocus: function( )
	{		
		// Get hold of the overlay panel ...
		var panelDiv = wm_eLetterFinder.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_eLetterFinder.resizeListener );
		Core.addEventListener( document, "keyup", wm_eLetterFinder.keyupListener );
	},
  
	unsetEvents: function( )
	{
		Core.removeEventListener( window, "resize", wm_eLetterFinder.resizeListener );
		Core.removeEventListener( document, "keyup", wm_eLetterFinder.keyupListener );
	},
  
	show: function( )
	{		
		// Get hold of the overlay panel.
		var panelDiv = wm_eLetterFinder.panelDiv;
		
		// Find the close button in the panel ...
		var links = panelDiv.getElementsByTagName("a");
		for ( var i = 0; i < links.length; i++ ) {
  		if ( Core.hasClass( links[i], "close-link" ) ) {
    		var closeLink = links[i];
    		break;
  		}
		}
		// ... and the click/focus behaviours.
		if ( closeLink ) {
  		Core.addEventListener( closeLink, "click", wm_eLetterFinder.closeListener );
  		Core.addEventListener( closeLink, "blur", wm_eLetterFinder.focusListener );
  	}
		
    // Display the dropsheet ...
    wm_eLetterFinder.createDropSheet( );
		// ... position the panel ...
		wm_eLetterFinder.position( );
		// ... and make the panel appear.
		panelDiv.style.visibility = "visible";
		// Set initial focus.
		wm_eLetterFinder.setEvents();
		wm_eLetterFinder.setInitFocus();
		wm_eLetterFinder.isOpen = true;
	},
  
	hide: function( )
	{
		// Hide the panel being displayed ...
    wm_eLetterFinder.panelDiv.style.visibility = "hidden";
    // ... and hide the dropsheet.
    wm_eLetterFinder.destroyDropSheet( );
		wm_eLetterFinder.unsetEvents();
    wm_eLetterFinder.isOpen = false;
	},

	position: function( )
	{
		// Hide the panel being displayed ...
		// Get hold of the Content element ...
		var contentDiv = document.getElementById( "content" );
		var screenPos = wm_Screen.getPosition( contentDiv );
		// ... and find out where it is positioned.
		var leftPos = screenPos[0] + wm_eLetterFinder.offsetLeft;
		var topPos = screenPos[1] + wm_eLetterFinder.offsetTop;
		// Now work out where to position the overlay.
    wm_eLetterFinder.panelDiv.style.left = leftPos + "px";
    wm_eLetterFinder.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_eLetterFinder.positionDropSheet( dropSheet );
    var parent = wm_eLetterFinder.panelDiv.parentNode;
    parent.insertBefore( dropSheet, wm_eLetterFinder.panelDiv );
    wm_eLetterFinder.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_eLetterFinder.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_eLetterFinder.isOpen ) {
    	return true;
  	}
		var e = event || window.event;
		if ( e.keyCode == 27 ) {
  		wm_eLetterFinder.hide( );
  		Core.preventDefault(event);
  		wm_eLetterFinder.isOpen = false;
		}
	},
	
	clickListener: function( event )
	{
		wm_eLetterFinder.show( );
		Core.preventDefault(event);
	},
	
	closeListener: function( event )
	{
		wm_eLetterFinder.hide( );
		Core.preventDefault(event);
		wm_eLetterFinder.isOpen = false;
	},
	
	focusListener: function( event )
	{
		if ( wm_eLetterFinder.isOpen ) {
			wm_eLetterFinder.setInitFocus( );
			Core.preventDefault(event);
		}
	},
	
	resizeListener: function( )
	{
  	if ( wm_eLetterFinder.isOpen ) {
    	wm_eLetterFinder.positionDropSheet( wm_eLetterFinder.dropSheet );
			wm_eLetterFinder.position( );
  	}
	}
		
};

Core.start(wm_eLetterFinder);


var wm_Screen =
{
	getPageDimensions: function()
  {
    var body = document.getElementsByTagName("body")[0];
    var bodyOffsetWidth = 0;
    var bodyOffsetHeight = 0;
    var bodyScrollWidth = 0;
    var bodyScrollHeight = 0;
    var pageDimensions = [0, 0];
  
    if (typeof document.documentElement != "undefined" &&
        typeof document.documentElement.scrollWidth != "undefined")
    {
      pageDimensions[0] = document.documentElement.scrollWidth;
      pageDimensions[1] = document.documentElement.scrollHeight;
    }
  
    bodyOffsetWidth = body.offsetWidth;
    bodyOffsetHeight = body.offsetHeight;
    bodyScrollWidth = body.scrollWidth;
    bodyScrollHeight = body.scrollHeight;
  
    if (bodyOffsetWidth > pageDimensions[0])
    {
      pageDimensions[0] = bodyOffsetWidth;
    }
  
    if (bodyOffsetHeight > pageDimensions[1])
    {
      pageDimensions[1] = bodyOffsetHeight;
    }
  
    if (bodyScrollWidth > pageDimensions[0])
    {
      pageDimensions[0] = bodyScrollWidth;
    }
  
    if (bodyScrollHeight > pageDimensions[1])
    {
      pageDimensions[1] = bodyScrollHeight;
    }
  
    return pageDimensions;
  },
  
	getViewportSize: function()
  {
    var size = [0,0];
  
    if (typeof window.innerWidth != 'undefined')
    {
      size = [
          window.innerWidth,
          window.innerHeight
      ];
    }
    else if (typeof document.documentElement != 'undefined'
        && typeof document.documentElement.clientWidth != 'undefined'
        && document.documentElement.clientWidth != 0)
    {
      size = [
          document.documentElement.clientWidth,
          document.documentElement.clientHeight
      ];
    }
    else
    {
      size = [
          document.getElementsByTagName('body')[0].clientWidth,
          document.getElementsByTagName('body')[0].clientHeight
      ];
    }
  
    return size;
  },
  
	getScrollingPosition: function()
  {
    //array for X and Y scroll position
    var position = [0, 0];
  
    //if the window.pageYOffset property is supported
    if(typeof window.pageYOffset != 'undefined')
    {
      //store position values
      position = [
          window.pageXOffset,
          window.pageYOffset
      ];
    }
  
    //if the documentElement.scrollTop property is supported
    //and the value is greater than zero
    if(typeof document.documentElement.scrollTop != 'undefined'
      && document.documentElement.scrollTop > 0)
    {
      //store position values
      position = [
          document.documentElement.scrollLeft,
          document.documentElement.scrollTop
      ];
    }
  
    //if the body.scrollTop property is supported
    else if(typeof document.body.scrollTop != 'undefined')
    {
      //store position values
      position = [
          document.body.scrollLeft,
          document.body.scrollTop
      ];
    }
  
    //return the array
    return position;
  },
  
  getPosition: function( theElement )
  {
    var positionX = 0;
    var positionY = 0;
  
    while (theElement != null)
    {
      positionX += theElement.offsetLeft;
      positionY += theElement.offsetTop;
      theElement = theElement.offsetParent;
    }
    
    return [positionX, positionY];
  },
	
	getCursorPosition: function( event )
	{
		if (typeof event == "undefined") {
			event = window.event;
		}

		var scrollingPosition = wm_Screen.getScrollingPosition();
		var cursorPosition = [0, 0];

		if ( typeof event.pageX != "undefined" && typeof event.x != "undefined" ) {
			cursorPosition[0] = event.pageX;
			cursorPosition[1] = event.pageY;
		} else {
			cursorPosition[0] = event.clientX + scrollingPosition[0];
			cursorPosition[1] = event.clientY + scrollingPosition[1];
		}

		return cursorPosition;
	}
  
};

wm_Event = 
{
	
	getEventSrc: function( e )
	{
		var target;
		if ( ! e ) {
			var e = window.event;
		}
		if ( e.target ) {
			target = e.target;
		} else if ( e.srcElement ) {
			target = e.srcElement;
		}
		if ( target.nodeType == 3 ) { // defeat Safari bug
			target = target.parentNode;
		}
		return target;
	}
		
}

