//-------------------------------------------------------------------------------	
var header = function() {
	var m_pageName		    = null;
	var m_subMenuShow 	 = false;
	var m_subMenuSelected = null;
	
	//-------------------------------------------------------------------------------
	var hideSubMenu = function() {
		if( !m_subMenuShow ) {
			m_subMenuSelected = null;
			$( '#hoverMenu' ).hide();			
		}
	}//hideSubMenu
	
	//-------------------------------------------------------------------------------
	var updateHeader = function() {
		$( '#loginForm' ).css( 'display', 'none' );
		$( '#returningUser' ).css( 'display', 'none' );
		
		var userName = getCookie( 'userName' );
		if( userName != null && userName != "" ) {			
			//user logged in
			$( '#returningUser' ).css( 'display', 'block' );
			$( '#header span.userName' ).text( userName );
			
			var expireDate = new Date( parseInt( getCookie( 'expireMembershipTime' ) ) );
			var nowDate 	= new Date();		
			
			if( expireDate > nowDate ) {
				var expireText = '';
				var dayDiff 	= ( expireDate.getTime() - nowDate.getTime() ) / ( 1000*60*60*24 ); //#days
				
				if( dayDiff <= 0.5 ) {
					expireText = 'Your premium membership expires today! <a href="http://www.marek-knows.com/store.php5">Renew</a>';	
				}
				else if( dayDiff <= 2 ) {
					expireText = 'Your premium membership expires soon. <a href="http://www.marek-knows.com/store.php5">Renew</a>';	
				}
				else if( dayDiff <= 7 ) {
					expireText = 'Your premium membership expires in ' + Math.round( dayDiff ) + ' days';	
				}
				else {
					expireText = 'Your premium membership expires on ' + expireDate.format( 'M jS, Y' );
				}	
												
				$( '#memberExpires' ).html( expireText )
											.css( 'display', 'block' );
			}
			else {
				$( '#memberExpires' ).css( 'display', 'none' );
			}
		}
		else {
			//not logged in
			$( '#loginForm' ).css( 'display', 'block' );
		}
		
		
	}//updateHeader
	
	//-------------------------------------------------------------------------------
	//initialize page navigation
	var init = function() {
		$( '#loginForm' ).css( 'display', 'none' );
		$( '#returningUser' ).css( 'display', 'none' );
		
		//warning messages if JavaScript or Cookies are disabled
		if( !navigator.cookieEnabled ) {
			//no cookies
			$( '#cookies' ).css( 'display','block' );		
			return;
		}

		//hide warning message
		$( '#warning' ).css( 'display','none' );

		//which header to display
		updateHeader();
		
		//Set the current tab
		var currentTab = $( '#' + m_pageName );
		
		currentTab.addClass( 'current' );
	
		//replace <a href> with <span>
		var tabText = currentTab.text();
		currentTab.html( '<span>' + tabText + '</span>' );			
				
		//setup tab navigation hover states
		$( '#navMenu li' ).hover(
			function () { //hover ON
				m_subMenuShow = true;
				
				var tabName = $( this ).attr( 'id' );			
				if( tabName == m_pageName ) {
					//no hover-over on self
					m_subMenuShow = false;		
					hideSubMenu();
					
					return;
				}
				
				//is this a different selected submenu?
				if( m_subMenuSelected != null && m_subMenuSelected == tabName ) {
					//this is the current submenu that is already 
					//visible on the screen, do nothing
					return;
				}
				
				//hide all menu's
				$( '#hoverMenu > ul' ).each( function() {
					$( this ).hide();												
				}); 
				m_subMenuSelected = tabName;						
									
				//show newly selected menu				
				$( '#hoverMenu ul.' + m_subMenuSelected ).show();					
				var $selectedMenu = $( '#hoverMenu' );
				$selectedMenu.show();
				$selectedMenu.slideDown( 200 );							
			}, 
			function () { //hover OFF
				var tabName = $( this ).attr( 'id' );			
				if( tabName == m_pageName ) {
					//no hover off, 
					//this is the currently selected tab
					return;
				}
				
				m_subMenuShow = false;			
				setTimeout( hideSubMenu, 100 );
			}
		); //$( '#navMenu li' ).hover
		
		$( '#hoverMenu' ).hover(
			function () {			
				m_subMenuShow = true;
				$( '#hoverMenu' ).show();
			}, 
			function () {
				m_subMenuShow = false;
				setTimeout( hideSubMenu, 100 );
			}
		); //$( '#hoverMenu' ).hover		

		//AJAX login form submission
		$( '#login' ).submit( function() {
			var result =  { "success"  : false,
								 "message" : "" }
			
			var userName = $( '#userName' ).attr( 'value' );
			var userPass = $( '#userPass' ).attr( 'value' );
			var remember = $( '#remember' ).attr( 'checked' ) ? 'y' : 'n';
			
			var pattern =/^[a-z][a-z0-9\.\-_]{3,23}[a-z0-9]$/i;
			result.success = pattern.test( userName );
			if( !result.success ) {
				result.message = 'Invalid name specified.\n';   		
			}
			else {				
				pattern =/^[a-z][a-z0-9\.\,\-_ ]{3,23}[a-z0-9]$/i;
				result.success = pattern.test( userPass );
				if( !result.success ) {
					result.message = 'Invalid password specified.\n';   		
				}
			}
						
			var loginResult = function( data ) {
				if( data.success ) {
					setCookie( 'userName', data.userName, data.expireCookieDay );
					setCookie( 'userPass', data.userPass, data.expireCookieDay );					
					setCookie( 'expireMembershipTime', data.expireMembershipTime * 1000, data.expireCookieDay ); //convert to milliseconds for JavaScript			
					
					updateHeader();
					
					//update user stats
					if( m_pageName == 'downloads' ) {
						downloads.login();
					}
				}
				else {
					alert( data.message );
					
					//revert to login button image
					$( '#login input.submit' ).css( 'background-image', "url( 'images/buttonLogin.gif' )" );
				}
			}//loginResult
	
			if( result.success ) {
				//show loading icon
				$( '#login input.submit' ).css( 'background-image', "url( 'images/loading.gif' )" );
				
				$.ajax( { 	
					type: 		'POST',
					url:			'include/ajax/login.php5',
					data: 		'userName=' + urlEncode( userName ) + 
									'&userPass=' + urlEncode( userPass ) + 
									'&remember=' + urlEncode( remember ),
					dataType: 	'json',
					success: 	function( data ) { 
						loginResult( data );			
						
						if( ( m_pageName != 'about' &&
							 	m_pageName != 'downloads' &&
								m_pageName != 'index' &&
								m_pageName != 'store' ) && data.success ) 
						{
							window.location.href = 'downloads.php5';
						}
					}
				} );//$.ajax	
			}
			else {
				loginResult( result );								
			}
			
			//prevent submit button from refreshing the screen
			return false;
			
		} );//$( '#login' ).submit
	
		//prevent text selection of navigation bars
		$( '#navMenu, #hoverMenu, #navSubMenu' ).disableTextSelect();
	
	}//init
	
	//-------------------------------------------------------------------------------
	var logout = function() {
		setCookie( 'userName', '', -10 );
		setCookie( 'userPass', '', -10 );
		setCookie( 'expireMembershipTime', 0, -10 );
		
		//reset form fields
		$( '#userName' ).attr( 'value', '' );
		$( '#userPass' ).attr( 'value', '' );
		
		//go to index page
		window.location.href = 'index.php5';
		
		//prevent a href from doing something
		return false;
	} //logout
		
	//-------------------------------------------------------------------------------
	var showForgotDialog = function() {	
		//--------------------------------------
		var testEmail = function() {
			var pattern =/^([a-z0-9_\-])+([\.a-z0-9_\-])*@([a-z0-9_\-])+([\.a-z0-9_\-])*\.([a-z]{2,6})$/i;
	
			var e = $( '#email' ).val();
			if( pattern.test( e ) ) {
				$( '#emailVerifyIcon' ).attr( 'class','correctIcon' );	
				$( '#emailVerify' ).css( 'display','none' );	
				return true;
			}
			else {
				$( '#emailVerifyIcon' ).attr( 'class','wrongIcon' );	
				$( '#emailVerify' ).css( 'display','block' );	
				return false;
			}		
		}//testEmail
		
		var generateEmail = function( type, dlg ) {
			if( !testEmail() ) {
				$( ':button' ).removeClass( 'ui-state-focus' );
				$( '#email' ).focus();								
				return;
			}
			
			dlg.dialog( 'close' );
								
			//send email
			var emailAddress = $( '#email' ).val();
			$.ajax( { 	
				type: 		'POST',
				url:			'include/ajax/sendEmail.php5',
				data: 		'address=' + urlEncode( emailAddress ) + 
							  	'&type=' + type,
				dataType: 	'json',
				success: 	function( data ) { 
					if( data.success ) {
						alert( data.message );												
					}
					else {
						alert( data.message );			
						dlg.dialog( 'open' );
					}							
				}
			} );//$.ajax	
		}//generateEmail
		
		//--------------------------------------
		var $forgotDialog = $( '#dialog' );
		$forgotDialog.text( 'Loading...' );
		$forgotDialog.load( 'include/forgotDialog.php5 #forgotForm',
			function( response, status, xhr ) {		
				$( this ).html( response );
				//focus on 1st option
				$( '#email' ).focus();				
				$( '#email' ).blur( function() {
					testEmail();
				} );								
			}
		).dialog( {
			title: 'Forgot Login Name/Password',
			modal: true,
			resizable: false,
			width: 595,
			buttons: { 
				"Request Login Name": function() {						
					generateEmail( 'forgotName', $( this ) );	
				},
				"Request Password Reset": function() {						
					generateEmail( 'resetPassword', $( this ) );	
				},
				"Cancel": function() { 
					$( this ).dialog( 'close' ); 
				}				
			}
		} );			
					
	}//showForgotDialog
	
	//-------------------------------------------------------------------------------	
	var constructor = function() {
		//get page file name
		var file_name = document.location.href;
		
		//Handle the following possibilities
		//http:\\www.marek-knows.com\
		//index.php5
		//index.php5#news
		//index.php5?user=marek		
		var end = file_name.indexOf( '.php5' );
		if( end == -1 ) {
			//must be the index page
			m_pageName = 'index';
		}
		else {
			end = file_name.indexOf( '?' );
			if(end == -1) {			
				end = file_name.indexOf( '#' );
				if(end == -1) {			
					end = file_name.length;	
				}
			}				
			
			m_pageName = file_name.substring( file_name.lastIndexOf( '/' ) + 1, end - 5 );	
		}				
	}(); //constructor
	
	//public functions
	return {
		init : init,
		logout : logout,
		showForgotDialog: showForgotDialog		
	};	
	
}(); //header class
	
$( function() {		
	header.init();	
}); //jQuery main function()

