var Overlay = Class.create();
Overlay.prototype = {
	defaultEffectOptions : {
		duration : 0.5
	},
	initialize : function() {
		// constructor does nothing for now.  If we wanted to have multiple overlays per page
		// we could pass in some arguments here to accomplish that.  TBD.
	},

    detectIE7 : function() {		
		var agent = navigator.userAgent.toLowerCase();

		if (typeof document.all != "undefined" && typeof document.getElementById != "undefined")
		{
		  var browser = agent.replace(/.*ms(ie[\/ ][^ $]+).*/, "$1").replace(/ /,"");
		  var browserType = browser.replace(/(.*)\..*/, "$1");
		  
		  if (browserType == "ie7") 
		  {
		  	return true;
		  }
		  return false;
		}  
	},	
	
	showBox : function( effectOptions ) {		
		// Hide Select Menus to fix stupid IE bug
		if (!document.getElementsByTagName)
		{ return; }
		var selectMenus = document.getElementsByTagName("select");		
		//  Loop through all <select> elements
		for (var i=0; i<selectMenus.length; i++)
		{
		  var selectMenu = selectMenus[i];
		  // don't hide selects in popin
		  if (selectMenu.className != 'survey') {
		  	selectMenu.style.visibility = 'hidden';
		  }
		  
		}		
		
		options = Object.extend( this.defaultEffectOptions, effectOptions || {} );

		// check for IE7 to avoid blindDown slowness
		if(this.detectIE7())
        { 
		  Element.show('overlay');
		}
		else
		{ 
		  Effect.BlindDown( 'overlay', options );
		}
		
		this.center('box', { queue:'end' });
		return false;
	},
	
	showPreviewBox : function( showDiv ) {
		if( showDiv )
		{
			Element.show( showDiv );
		}
		this.showBox();
	},
	
	showBoxQueueFront : function( effectOptions ) {
		this.showBox( { queue : 'front' } );
	},
	
	hideBox : function( effectOptions ) {
		// Show Select Menus
		if (!document.getElementsByTagName)
		{ return; }
		var selectMenus = document.getElementsByTagName("select");		
		//  Loop through all <select> elements
		for (var i=0; i<selectMenus.length; i++)
		{
		var selectMenu = selectMenus[i];
		selectMenu.style.visibility='visible';
		}		
		
		options = Object.extend( this.defaultEffectOptions, effectOptions || {} );
		Effect.Fade( 'box', Object.extend( options, { queue:'front' }) );
		Effect.BlindUp( 'overlay', Object.extend( options, { queue:'end' }) );
		return false;
	},
	
	focusForm : function() {
		if( !window.location.href.include( '#' ) ) {
			// if there's not already a '#' in the URL, insert #form
			window.location += '#form';
		}
	},
	
	hideBoxAndResumeWizard : function( url ) {
		this.hideBox();
		window.location = url;
	},
	
	center : function( element, effectOptions ) {
		options = Object.extend( this.defaultEffectOptions, effectOptions || {} );
		try{
		    element = $(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 - 100 - elementDimensions.height ) / 2 + scrollY;

		setX = ( setX < 0 ) ? 0 : setX;
		setY = ( setY < 0 ) ? 0 : setY;

		element.style.left = setX + "px";
		element.style.top  = setY + "px";
		Effect.Appear( element, options );
	}
}