/* © 2007 Salem State College
This script and all additional code contained on this page
is the property of Salem State College(unless otherwise mentioned)
and is protected under U.S. Copyright Law */

function changeURL(page) {
	var choice=page.list.selectedIndex
	if (page.list.options[choice].value != "0") {
		parent.location=page.list.options[choice].value;
	}
}

/* New changeURL function 12/13/2004 Chad */

function gotoURL(page) {
	if (page == "") void(0);
	else parent.location = page;
}

function popPrintable(src) {
	popWindow(src, 'Printable_Page', 590, 600);
	return false;
}

function resizeOuterTo(width, height) {
	if (typeof(window.innerWidth) == 'number') {
		window.outerWidth = width;
		window.outerHeight = height;
	}
	else window.resizeTo(width, height);
}

function popWindow(src, name, w, h, scrollbars) {
	if (String(src) == "undefined") src = "/SSC-please_wait.htm";
	if (String(name) == "undefined") name = "sscpop";
	if (String(w) == "undefined") w = 300;
	else w = parseInt(w);
	if (String(h) == "undefined") h = 250;
	else h = parseInt(h);
	var posX = 100;
	var posY = 100;

	if (w > screen.availWidth) w = screen.availWidth - 12;
	if (h > screen.availHeight) h = screen.availHeight - 20;
	
	if (posX + w > screen.availWidth || posY + h > screen.availHeight - 140) {
		posX = 0;
		posY = 0;
	}

	if (scrollbars == "no" || scrollbars == "false" || scrollbars == false) scrollbars = "no";
	else scrollbars = "yes";

	newWin = window.open(src, name, 'toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=' + scrollbars + ',resizable=yes,copyhistory=no,width=' + w + ',height=' + h + ',left=' + posX + ',top=' + posY + ',screenX=' + posX + ',screenY=' + posY);
	newWin.focus();
	return false;
}

function imageViewer (image){
	var src = "/SSC-image_viewer.php?image=" + image
	newWin=window.open(src,'photoWindow','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=yes,copyhistory=no,width=400,height=400');
	newWin.focus();
	return false;
}


function number_format(number, decimals, dec_point, thousands_sep) {
	number = String(number);
	if (!decimals) decimals = 0;
	else decimals = parseInt(decimals);
	if (!dec_point) dec_point = ".";
	if (!thousands_sep) thousands_sep = ",";
	var change = "";

	if (number.indexOf(".") != -1) {
		change = number.substring(number.indexOf("."), number.length);
		number = number.substring(0, number.indexOf("."));
		change = Math.round(parseFloat(change) * Math.pow(10,decimals));
	}
	else
		while (change.length < decimals) change += "0";
	
	if (number.length > 3) {
		var mod = number.length % 3;
		var output = (mod > 0 ? (number.substring(0, mod)) : "");
		for (i = 0; i < Math.floor(number.length / 3); i++) {
			if (mod == 0 && i == 0)
				output += number.substring(mod + 3 * i, mod + 3 * i + 3);
			else
				output += thousands_sep + number.substring(mod + 3 * i, mod + 3 * i + 3);
		}
		number = output;
	}
	return number + dec_point + change;
}

// Two functions to close a popup window if focus is lost
// To use, add the following code before the header include
// appendBodyTag("onblur=\"timedClose(10)\" onfocus=\"stopClose()\"");

var thetimeout;
// Close window 'secs' seconds after being unfocused
function timedClose(secs) {
	thetimeout = setTimeout('self.close()', secs * 1000);
}
// Stop close timer if refocused
function stopClose() {
	clearTimeout(thetimeout);
}

function toggleDisplay(elm, display) {
	if (document.getElementById(elm)) {
		if (display == true) {
			document.getElementById(elm).style.display = "";
		}
		else if (display == false) {
			document.getElementById(elm).style.display = "none";
		}
		else if (document.getElementById(elm).style.display == "none") {
			document.getElementById(elm).style.display = "";
		}
		else {
			document.getElementById(elm).style.display = "none";
		}
	}
}

function toggleFields(toggleElm, arrowElm) {
	toggleDisplay(toggleElm);

	var upArrow = "/images/toggle_arrow_up.gif";
	var downArrow = "/images/toggle_arrow_down.gif";
	var elm = document.getElementById(arrowElm);
	var re = new RegExp(upArrow + "$");
	if (elm.src.match(re)) {
		elm.setAttribute("title", 'Show');
		elm.setAttribute("alt", 'Show');
		elm.src = downArrow;
	}
	else {
		elm.setAttribute("title", 'Hide');
		elm.setAttribute("alt", 'Hide');
		elm.src = upArrow;
	}
}

function getAttendees() {
	var strSession = document.forms['which_session']
	xmlHttp=GetXmlHttpObject()
		if (xmlHttp==null) {
			alert ("Browser does not support HTTP Request")
			return
		} 
	var url="attendees2.php";
	url = url + "?session=" + strSession;
	xmlHttp.onreadystatechange=stateChanged
	xmlHttp.open("GET",url,true)
		xmlHttp.send(null)
}

var menutimeout;
function showMenu(evt, menuId) {
	var menu = document.getElementById(menuId);

	if (menu) {
		var mX = 0;
		var mY = 0;
		if (mpos = getMouseXY(evt)) {
			mX = mpos[0];
			mY = mpos[1];
		}
		var clientWidth = 0;
		var clientHeight = 0;
		if (size = getInnerSize()) {
			clientWidth = size[0];
			clientHeight = size[1];
		}
		var rightedge = clientWidth - mX;
		var bottomedge = clientHeight - mY;

		if (rightedge < menu.offsetWidth) menu.style.left = (mX - menu.offsetWidth) + "px";
		else menu.style.left = mX + "px";

		if (bottomedge < menu.offsetHeight) menu.style.top = (mY - menu.offsetHeight) + "px";
		else menu.style.top = mY + "px";
		
		menu.style.visibility = "visible";

		var iframe = document.getElementById(menuId + '_iframe');
		if (iframe) {
			iframe.style.visibility = 'visible';
			iframe.style.width = menu.offsetWidth + "px";
			iframe.style.height = menu.offsetHeight + "px";
			iframe.style.left = menu.style.left;
			iframe.style.top = menu.style.top;
		}

		menutimeout = setTimeout("hideMenu('" + menuId + "')", 15000);
	}

	return false;
}

function hideMenu(menuId) {
	clearTimeout(menutimeout);
	var menu = document.getElementById(menuId);
	if (menu) {
		menu.style.visibility = "hidden";
		var iframe = document.getElementById(menuId + '_iframe');
		if (iframe) {
			iframe.style.visibility = 'hidden';
		}
	}
}

function getInnerSize() {
	var width = 0
	var height = 0;
	if (typeof(window.innerWidth) == 'number') {
		//Non-IE
		width = window.innerWidth;
		height = window.innerHeight;
	}
	else if (document.documentElement && (document.documentElement.clientWidth || document.documentElement.clientHeight)) {
		//IE 6+ in 'standards compliant mode'
		width = document.documentElement.clientWidth;
		height = document.documentElement.clientHeight;
	}
	else if (document.body && (document.body.clientWidth || document.body.clientHeight)) {
		//IE 4 compatible
		width = document.body.clientWidth;
		height = document.body.clientHeight;
	}
	return [width, height];
}

function getScrollXY() {
	var scrollX = 0;
	var scrollY = 0;
	if (typeof(window.pageYOffset) == 'number') {
		//Netscape compliant
		scrollX = window.pageXOffset;
		scrollY = window.pageYOffset;
	}
	else if (document.body && (document.body.scrollLeft || document.body.scrollTop)) {
		//DOM compliant
		scrollX = document.body.scrollLeft;
		scrollY = document.body.scrollTop;
	}
	else if (document.documentElement && (document.documentElement.scrollLeft || document.documentElement.scrollTop)) {
		//IE6 standards compliant mode
		scrollX = document.documentElement.scrollLeft;
		scrollY = document.documentElement.scrollTop;
	}
	return [scrollX, scrollY];
}

function getMouseXY(evt) {
	var mX = 0;
	var mY = 0;
	if (evt.pageX) {
		mX = evt.pageX;
		mY = evt.pageY;
	}
	else if (evt.clientX) {
		var scrollX = 0;
		var scrollY = 0;
		if (spos = getScrollXY()) {
			scrollX = spos[0];
			scrollY = spos[1];
		}
		mX = evt.clientX + scrollX;
		mY = evt.clientY + scrollY;
	}
	return [mX, mY];
}


function addLoadEvent(func) {
	var oldonload = window.onload;
	
	if (typeof window.onload != 'function') {
		window.onload = func;
	} 
	else {
		window.onload = function() {
			oldonload();
			func();
		}
	}
}

//For inserting nodes into the DOM
function insertAfter(newElement, targetElement) {
	var parent = targetElement.parentNode;
	if (parent.lastChild == targetElement) {
		parent.appendChild(newElement);
	}
	else {
		parent.insertBefore(newElement, targetElement.nextSibling);
	}
}

// For selecting todays date in select boxes with the specified ids
function setToday(form, month_id, day_id, year_id) {
	var today = new Date();

	form.elements[month_id].selectedIndex = today.getMonth() + 1;
	form.elements[day_id].selectedIndex = today.getDate();
	
	var year = today.getFullYear();
	var yearIndex = 0;
	for (var i = 0; i < form.elements[year_id].options.length; i++) {
		if (form.elements[year_id].options[i].value == year) yearIndex = i;
	}
	form.elements[year_id].selectedIndex = yearIndex;
}


function checkAll(formName, elmName, value) {
	form = document.forms[formName];

	if (form.elements[elmName]) {
		if (form.elements[elmName].length) {
			for (i = 0; i < form.elements[elmName].length; i++) {
				if (!form.elements[elmName][i].disabled) {
					form.elements[elmName][i].checked = value;
				}
			}
		}
		else if (!form.elements[elmName].disabled) {
			form.elements[elmName].checked = value;
		}
	}
	return true;
}

/*
To get all a elements in the document with a “info-links” class.
    getElementsByClassName(document, "a", "info-links");
To get all div elements within the element named “container”, with a “col” class.
    getElementsByClassName(document.getElementById("container"), "div", "col"); 
To get all elements within in the document with a “click-me” class.
    getElementsByClassName(document, "*", "click-me"); 
*/

function getElementsByClassName(oElm, strTagName, strClassName){
    var arrElements = (strTagName == "*" && oElm.all)? oElm.all : oElm.getElementsByTagName(strTagName);
    var arrReturnElements = new Array();
    strClassName = strClassName.replace(/\-/g, "\\-");
    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
    var oElement;
    for(var i=0; i<arrElements.length; i++){
        oElement = arrElements[i];      
        if(oRegExp.test(oElement.className)){
            arrReturnElements.push(oElement);
        }   
    }
    return (arrReturnElements);
}

/* Use countCharacters with onkeyup
 * Fix issue of stopping any new character entries when limit is reached until chars are deleted
 * Keep key cursor at last typed character after new textarea value is set
 */

function countCharacters(textarea, msg, maxKeys, limit) {
	var str = new String(textarea.value);
	var len = str.length;
	var keysLeft = maxKeys - len;
	if (len < maxKeys) {
		if (msg) document.getElementById(msg).innerHTML = keysLeft;
	}
	else if (limit) {
		if (msg) document.getElementById(msg).innerHTML = '0';
		if (len > maxKeys) {
			textarea.value = textarea.value.substring(0, maxKeys);
			return false;
		}
	}
	return true;
}


// Taken from: http://www.howtocreate.co.uk/jslibs/otherdemo.html#cld
function capsDetect(e) {
	//if the browser did not pass event information to the handler,
	//check in window.event
	if( !e ) { e = window.event; }
	if( !e ) { return; }

	//what (case sensitive in good browsers) key was pressed
	//this uses all three techniques for checking, just in case
	var theKey = 0;
	if( e.which ) { theKey = e.which; } //Netscape 4+, etc.
	else if( e.keyCode ) { theKey = e.keyCode; } //Internet Explorer, etc.
	else if( e.charCode ) { theKey = e.charCode } //Gecko - probably not needed
	
	//was the shift key was pressed
	var theShift = false;
	if( e.shiftKey ) { theShift = e.shiftKey; } //Internet Explorer, etc.
	else if( e.modifiers ) { //Netscape 4
		//check the third bit of the modifiers value (says if SHIFT is pressed)
		if( e.modifiers & 4 ) { //bitwise AND
			theShift = true;
		}
	}

	//if upper case, check if shift is not pressed
	if( theKey > 64 && theKey < 91 && !theShift ) {
		return true;
	}
	//if lower case, check if shift is pressed
	else if( theKey > 96 && theKey < 123 && theShift ) {
		return true
	}
	
	return false;
}

function hideCapsWarning (warnElm) {
	if (document.getElementById(warnElm)) {
		document.getElementById(warnElm).innerHTML = '';
	}
}

var tabNext_length = 0;
var tabNext_field = "";
function tabNext(elm, keyDir, len, next_field) {
	if (keyDir == "down") {
		tabNext_length = elm.value.length;
		tabNext_field = elm.name;
	}
	else if (keyDir == "up") {
		if (elm.value.length != tabNext_length && elm.name == tabNext_field) {
			tabNext_length = elm.value.length;
			if (tabNext_length == len) {
				next_field.focus();
			}
			else if (tabNext_length > len) {
				var val = elm.value;
				elm.value = val.substring(0,2);
				var val_rest = val.substring(2);
				if (next_field.value.length + val_rest.length <= len) {
					next_field.value = val_rest + next_field.value;
				}
				next_field.focus();
			}
		}
	}
}

function makeUpper(evt, elm) {
	if (!evt) evt = window.event;
	var key = !evt.keyCode ? (!evt.which ? evt.charCode : evt.which) : evt.keyCode;

	shiftPressed = evt.shiftKey;
	altPressed = evt.altKey;
	ctrlPressed = evt.ctrlKey;

	if (key > 64 && key < 91 && !altPressed && !ctrlPressed) {
		cancelEvent(evt);
		elm.value += String.fromCharCode(key).toUpperCase();
	}
}

function cancelEvent(evt) {
	evt.cancelBubble = true;
	evt.returnValue = false;
	if (evt.preventDefault) evt.preventDefault();
	if (evt.stopPropagation) evt.stopPropagation();
	return false;
}

function insertAtCaret(obj, text) {
	if (document.selection) {
		obj.focus();
		var orig = obj.value.replace(/\r\n/g, "\n");
		var range = document.selection.createRange();

		if (range.parentElement() != obj) {
			return false;
		}

		range.text = text;
		
		var actual = tmp = obj.value.replace(/\r\n/g, "\n");

		for (var diff = 0; diff < orig.length; diff++) {
			if(orig.charAt(diff) != actual.charAt(diff)) break;
		}

		for (var index = 0, start = 0; 
			tmp.match(text) 
				&& (tmp = tmp.replace(text, "")) 
				&& index <= diff; 
			index = start + text.length
		) {
			start = actual.indexOf(text, index);
		}
	}
	else if (obj.selectionStart || obj.selectionStart == '0') {
		var start = obj.selectionStart;
		var end   = obj.selectionEnd;

		obj.value = obj.value.substr(0, start) 
			+ text 
			+ obj.value.substr(end, obj.value.length);
	}
	
	if (start != null) {
		setCaretTo(obj, start + text.length);
	}
	else {
		obj.value += text;
	}
}

function setCaretTo(obj, pos) {
	if (obj.createTextRange) {
		var range = obj.createTextRange();
		range.move('character', pos);
		range.select();
	}
	else if (obj.selectionStart || obj.selectionStart == '0') {
		obj.focus();
		obj.setSelectionRange(pos, pos);
	}
}
