// Below, all WebTrack user interface functions.

function showpage()
    {
    var blankscreen = document.getElementById('blankscreen');
    var loadedpage = document.getElementById('loadedpage');
    blankscreen.style.display = 'none';
    loadedpage.style.display = 'block';
    loadedpage.style.visibility = 'visible';
    }
		
function hidepage()
    {
    var blankscreen = document.getElementById('blankscreen');
    var loadedpage = document.getElementById('loadedpage');
    blankscreen.style.display = 'block';
    loadedpage.style.display = 'none';
    loadedpage.style.visibility = 'hidden';
    }

function addEvent(obj, evType, fn) // Attaches functions to object events.
    {
    if (obj.addEventListener)
	{
	obj.addEventListener(evType, fn, true);
	return true;
	} 
    else if (obj.attachEvent)
	{
	var r = obj.attachEvent('on' + evType, fn);
	return r;
	} 
    else
	{
	return false;
	}
    }

// Below, allows global error handling in JavaScript.
onerror = handleerrors;

function handleerrors(errorMessage)
    {
    // Below, "Access is denied." error messages occur when a user hits the enter key inside a file upload textbox.
    // These errors do not hinder WebTrack functionality and are normal, so not displaying the error message.
    if (errorMessage != 'Access is denied.\r\n')
	{
        alert('Error: WebTrack experienced a problem (6)\r\nClose all WebTrack windows, then log in and try again\r\n\r\n' + errorMessage)
	}
    return true // Clears the JavaScript error.
    }

// Below, attaches keystroke capture functions to page. At the moment, these work only in IE.
if (navigator.appName == 'Microsoft Internet Explorer')
    {
    document.onkeydown = capturekeystrokes;
    }

function capturekeystrokes(evt)
    {
    var page = document.title.substring(document.title.lastIndexOf(' - ') + 3);
    evt = (evt) ? evt : ((event) ? event : null);
    if (evt)
	{
	if (page != 'Login') // Capturing all keystrokes only after user logs in.
	    {
            if (event.keyCode == 8 && (event.srcElement.type != 'text' && event.srcElement.type != 'textarea' && event.srcElement.type != 'password'))
	        {
                // For backspace (move back), but not captured in any type of text input except file, which shouldn't be typed in anyway.
                cancelKey(evt);
	        alert('You may not use the browser back feature in WebTrack');
                }
            else if (event.altKey && (event.keyCode == 37))
	        {
                // For ALT+left arrow (move back).
                cancelKey(evt);
	        alert('You may not use the browser back feature in WebTrack');
                }
            else if (event.altKey && (event.keyCode == 39))
	        {
                // For ALT+right arrow (move forward).
                cancelKey(evt);
	        alert('You may not use the browser forward feature in WebTrack');
                }
            else if (event.altKey && (event.keyCode == 115) || event.ctrlKey && (event.keyCode == 87) || event.altKey && (event.keyCode == 36))
	        {
                // For ALT+F4, CTRL+W (both close window), or ALT+HOME (loads home page).
		// ALT+F4 cannot be stopped. Instead, the user is reminded to log out properly next time.
                cancelKey(evt);
	        alert('To prevent WebTrack problems, always log out properly or click the pop-up window close/cancel button');
                }
            else if (event.keyCode == 116 || event.ctrlKey && (event.keyCode == 82) || event.ctrlKey && (event.keyCode == 116))
	        {
                // For F5, CTRL+R, or CTRL+F5 (all refresh)
                cancelKey(evt);
	        alert('You may not use the browser refresh feature in WebTrack');
                }
            else if (event.ctrlKey && (event.keyCode == 78))
	        {
                // For CTRL+N (open new window).
                cancelKey(evt);
	        alert('You may not open a new browser window in WebTrack');
                }
            else if (event.ctrlKey && (event.keyCode == 76) || event.ctrlKey && (event.keyCode == 79))
	        {
                // For CTRL+L or CTRL+O (open new location).
                cancelKey(evt);
	        alert('You may not open a new location in WebTrack');
                }
            else if (event.keyCode == 13)
	        {
		if (event.srcElement.type != 'textarea') // Not captured for multiline textboxes.
		    {
		    if (event.srcElement.type == 'text' || event.srcElement.type == 'password') // Captured for normal and password textboxes.
			{
		        captureenterkey(evt, page);
			}
		    else // Cancelled everywhere else to prevent accidental pop-up window closings and unnecessary page reloads.
			{
                	cancelKey(evt);
			}
		    }
                }
	    }
	else // On Login page, only capturing enter key.
	    {
            if (event.keyCode == 13)
	        {
		if (event.srcElement.name == 'username1' || event.srcElement.name == 'pw1')
		    {
		    document.getElementById('login1').click(); // Logs user in.
		    }
		else if (event.srcElement.name == 'email1')
		    {
		    document.getElementById('submit1').click(); // Submits e-mail address.
		    }
		else
		    {
                    cancelKey(evt);
		    }
                }
	    }
        }
    }

function cancelKey(evt) // Keystrokes are cancelled here.
    {
    if (evt.preventDefault)
	{
        evt.preventDefault();
        return false;
        }
    else
	{
        evt.keyCode = 0;
        evt.returnValue = false;
        }
    }

// Depending on current page, automatically peforms particular operation when user clicks enter button in a normal or password textbox.
// Final HTML textbox on pages using this feature needed to fix bug in ASP.NET that prevents initial enter click from registering.
function captureenterkey(evt, page)
    {
    var textbox = evt.srcElement.name
    if (page == 'Select a Student')
	{
        document.getElementById('find1').click(); // Performs Quick Find.
	}
    else if (page == 'Insert Data')
	{
	if (textbox == 'keyword1')
	    {
            document.getElementById('find1').click(); // Performs Quick Find.
	    }
	else
	    {
            document.getElementById('add1').click(); // Add or updates personal codes.
	    }
	}
    else if (page == 'Administrator Utilities')
	{
	if (textbox == 'pw1')
	    {
            document.getElementById('submit1').click(); // Submits password.
	    }
	}
    else if (page == 'Support')
	{
	if (textbox == 'email1')
	    {
            document.getElementById('submit1').click(); // Submits e-mail address.
	    }
	else
	    {
            document.getElementById('change1').click(); // Changes user password.
	    }
	}
    else if (page == 'Prompt for E-mail')
	{
        document.getElementById('submit1').click();
	}
    else if (page == 'Select a Table')
	{
        document.getElementById('customdataquery1').click(); // Performs custom data query.
	}
    else
	{
	cancelKey(evt);
	}
    }

// Creates calendar pop-up using calendar icon on page.
function calendar(textbox)
    {
    window.open('calendar.aspx?textbox=' + textbox, 'calendar', 'width=275,height=300,top=0,left=0,directories=no,toolbar=no,scrollbars=yes,status=no,resizable=no,menubar=no');
    }

// Inserts current date and time into textbox using clock icon on page.
function clock(textbox)
    {
    var d = new Date()
    // Below, getMonth() method begins at 0 for January, so must add 1 to display correct month number.
    var parseddate = (d.getMonth() + 1) + '/' + d.getDate() + '/' + d.getFullYear()
    var parsedtime = d.getHours() + ':' + d.getMinutes() + ':' + d.getSeconds()
    document.getElementById(textbox).value = parseddate + ' ' + parsedtime
    }

// Closes window using close or cancel button on page.
function closewindow(reloadloginpage)
    {
    if (reloadloginpage == 'true') // Only reloads Login page when user closes Logout or Error page.
	{
    	window.opener.location = ('login.aspx'); // Returns user to login page.
	}
    window.close();
    }

// Creates controlled support pop-up window.
function opensupportwindow()
    {
    window.open('support.aspx', 'support', 'width=800,height=500,top=0,left=0,directories=no,toolbar=no,scrollbars=yes,status=no,resizable=yes,menubar=no');
    }

// To prevent errors in file upload textboxes, forcing user to click browse and upload buttons.
// See administrator version of online help system for details.
function forcebrowsebutton()
    {
    alert('To prevent WebTrack problems, always use the browse and upload buttons')
    document.getElementById('upload1').focus();
    }