// gateway test javascript tools
// version 2.1
// (c) 2001-08 Gavin LaRose, University of Michigan Math Department/
//    Regents of the University of Michigan
// last change 9 Sep 2008

var dateNow = new Date();

function parseDateStr(d, add) { 
// pre:  d is a date in the form 9/26, 11/7, or 7/1/1968
// post: a Date object corresponding to midnight (plus epsilon) on
//       that date in the current year, or the full date given, is 
//       returned.  if add is true, give at midnight (minus epsilon)
//       instead

    var theDate = new String(d);
    var dateFields = theDate.split("/");
    if ( dateFields.length == 2 ) {
	dateFields[2] = dateNow.getFullYear();
    } else {
	if ( dateFields[2].length == 2 ) {
	    if ( dateFields[2] < 80 ) {
		dateFields[2] = "20" + dateFields[2];
	    } else {
		dateFields[2] = "19" + dateFields[2];
	    }
	}
    }
    if ( add != null && add ) {
	return(new Date(dateFields[2],dateFields[0]-1,dateFields[1],23,59,59));
    } else {
        return(new Date(dateFields[2],dateFields[0]-1,dateFields[1], 0, 0, 1));
    }
}

function testIsOpen(i,isProctored) { 
// pre:  i is an index 0-4 corresponding to the entries in indexToCourse,
//       testDates, etc., and isProctored is a boolean indicating if we
//       are checking for an open proctored test or open practice test
// post: false or a list giving the names of the open test(s) is returned, 
//       according to whether there is an open test or tests for the 
//       course in question

    var secTime = dateNow.getTime();
    var openTests = new Array();

    if ( isProctored ) {
	for ( var j=0; j<testDates[i].length; j++ ) {
	    var dateList = testDates[i][j].split("-");
	    var startDate = parseDateStr(dateList[0]);	
	    var endDate = parseDateStr(dateList[1], true);
	    if ( secTime >= startDate.getTime() && 
		 secTime <= endDate.getTime() ) {
		openTests.push( testNames[i][j] );
	    }
	}
	if ( openTests.length > 0 ) {
	    return openTests;
	} else {
	    return false;
	}
    } else {
	for ( var j=0; j<pracDates[i].length; j++ ) {
	    var startDate = parseDateStr(pracDates[i][j]);
	    if ( secTime >= startDate.getTime() ) {
		openTests.push( testNames[i][j] );
	    }
	}
	if ( openTests.length > 0 ) {
	    return openTests;
	} else {
	    return false;
	}
    }
}

function isOpen(i,testName) { 
// pre:  i is an index 0-4 corresponding to the entries in indexToCourse,
//	 and testName is a name of a test as given by testNames
// post: true/false is returned according to whether the practice test
//	 for testName in the course is open

    var testIndex = -1;

    for ( var j=0; j<testNames[i].length; j++ ) {
	if ( testName == testNames[i][j] ) {
	    testIndex = j;
	} 
    }
    if ( testIndex == -1 ) {
	return false;
    } else {
	var startDate = parseDateStr(pracDates[i][testIndex]);
	var openTest = false;
	var secTime = dateNow.getTime();
	if ( secTime >= startDate.getTime() ) {
	    openTest = testNames[i][testIndex];
	}
	return openTest;
    }
}


function readFormValue( el ) {
// pre:  el is a form element
// post: we return a string containing the value of the form element

    if ( el.type == null ) {  // this happens for radio buttons
	if ( el.length == null ) { // uh-oh
	    alert("Unknown test type selector.");
	    return( null );
	} else {
	    for ( var i=0; i<el.length; i++ ) {
		if ( el[i].checked ) {
		    return( new String(el[i].value) );
		}
	    }
	    alert("Unknown test type selector (2).");
	    return null;
	}
    } else {
	var t = el.type;
	if ( t == "checkbox" || t == "hidden" ) {
	    return( new String(el.value) );
	} else if ( t == "select-one" || t == "select-multiple" ) {
	    var val = new String("");
	    for ( var i=0; i<el.options.length; i++ ) {
		if ( el.options[i].selected ) {
		    val = val + el.options[i].value + ",";
		}
	    }
	    val = val.substr(0,val.length-1);
	    return( val );
	} else {
	    return( null );
	}
    }
}
