// add an event listener to an object
function addEvent( obj, type, fn )
{
	if (obj.addEventListener) {
		obj.addEventListener( type, fn, false );
	} else if (obj.attachEvent) {
		obj["e"+type+fn] = fn;
		obj[type+fn] = function() { obj["e"+type+fn]( window.event ); }
		obj.attachEvent( "on"+type, obj[type+fn] );
	}
}

function removeEvent( obj, type, fn ) {
	if (obj.removeEventListener) {
		obj.removeEventListener( type, fn, false );
	} else if (obj.detachEvent) {
		obj.detachEvent( "on"+type, obj[type+fn] );
		obj[type+fn] = null;
		obj["e"+type+fn] = null;
	}
}

var closedGroupImg = new Image();
closedGroupImg.src = "/OSICORE/include/images/buttons/r_arr.gif";
var openGroupImg = new Image();
openGroupImg.src = "/OSICORE/include/images/buttons/d_arr.gif";

function toggleSearchFilter(filterName) 
{
	var filterDiv = document.getElementById(filterName);
	if(filterDiv) 
	{
		var filterImg = document.getElementById(filterName+"Img");
		var filterNote = document.getElementById(filterName+"Note");
		var filterText = document.getElementById(filterName+"Text");
		var state = 0;
		if(filterDiv.style.display == "block") 
		{  // current image shows that the group is open
			filterImg.src = closedGroupImg.src	// close it, hide the group
			if(filterDiv) { filterDiv.style.display = "none"; }
			if(filterNote) { filterNote.style.display = "none"; }
			if(filterText) { filterText.innerHTML = filterText.innerHTML.replace("Hide","Show"); }
			state = 0;
		} 
		else 
		{	// current image corresponds to the closed/hidden group
			filterImg.src = openGroupImg.src	// open it, show the group
			if(filterDiv) { filterDiv.style.display = "block"; }
			if(filterNote) { filterNote.style.display = "block"; }
			if(filterText) { filterText.innerHTML = filterText.innerHTML.replace("Show","Hide"); }
			state = 1;
		}

        if(!SITE_URL) {
            return;
        }

		AjaxRequest.get({
			'url':SITE_URL+"/OSICORE/ajax.php?filter="+filterName+"&state="+state
		});
	}
}

// cross browser function to add option object to a select object
function addOptionToSelect(selObj, optObj) {
	try {
	    selObj.add(optObj, null);
	} catch(ex) {
	    // For IE.
	    selObj.add(optObj);
	}
}

// -- following are functions common to /game/index.php and /game/assignment.php 
// check whether the zone field is valid
function isValidZone(zoneObj) {
	if(zoneObj != null) {
		var zoneVal = zoneObj.value;
		if(zoneVal != "" && !isNumber(zoneVal)) {
			alert("Zone value cannot contain letters");
			zoneObj.value = "";
			return false;
		}
	}
	return true;
}

// clear days of the week on the form
function clearDaysOfWeek(form) {
	// check for the view, some views don't have days of the week
	for(var i=1; i<=7; i++) {
		if(form.elements["dow["+i+"]"] != null && form.elements["dow["+i+"]"].checked )
			form.elements["dow["+i+"]"].checked = false;
	}
}

function changeFieldValueTo(selectObj, fieldType, numElems) {
	var selVal = selectObj.options[selectObj.selectedIndex].value;
	if(selVal != "") {
		for(var i=0; i<numElems; i++) {
			var field = document.getElementById(fieldType+'['+i+']');
			if(field) { 
				for(var k=0; k<field.options.length; k++) {
					if(field.options[k].value == selVal) {
						field.value = selVal;
					}
				}
			}
		}
	}
}

function toggleButtonColor(buttonObj, color)
{
	if(buttonObj != null)
	{
		buttonObj.style.background = color;
	}
}

var helpImgActive = new Image();
helpImgActive.src = "/OSICORE/include/images/game_note_red.gif";
var helpImgInactive = new Image();
helpImgInactive.src = "/OSICORE/include/images/game_note_yellow.gif";

function showHelp(name)
{
	var myImg = document.getElementById(name+"_help_img");
	if(myImg)
	{
		myImg.src = helpImgActive.src;
		showlayer(name+"_help");
	}
}

function hideHelp(name)
{
	var myImg = document.getElementById(name+"_help_img");
	if(myImg)
	{
		myImg.src = helpImgInactive.src;
		hidelayer(name+"_help");
	}
}

function hidelayer(lay) 
{
	document.getElementById([lay]).style.display = "none";
}
function showlayer(lay) 
{
	document.getElementById([lay]).style.display = "block";
}

function hideSpanDiv(id) 
{
	var spanDiv = document.getElementById(id);
	if(spanDiv)
		spanDiv.style.display = "none";
}
function showSpanDiv(id) 
{
	var spanDiv = document.getElementById(id);
	if(spanDiv)
		spanDiv.style.display = "block";
}

function changeCursorTo(type)
{
	document.body.style.cursor = type;
}

//This function handles the onkeypress event.
//If the Enter key is pressed, it attempts to submit the form.
function handleKeystroke(e)
{
    var keyPressed;
    
    //Browser compatibility check
    if(document.all) // Browser used: Internet Explorer 6
        keyPressed = e.keyCode;
    else // Browser used: Firefox
        keyPressed = e.which;
        
    //13 = ASCII code for Enter key
    if(keyPressed == 13) 
    { 
        // alert('handleKeystroke: pressed Enter');
        //Directly calling document.searchForm.submit() will not fire the form's onsubmit event handler.
        //Call a javascript helper funtion that simulates that event.
       	validateLoginForm()
    } 
}

/* ---------------------------------
Code taken from Matt Kruse's table.js
---------------------------------- */

/**
 * Determine if a reference is defined
 */
function def(o) {return (typeof o!="undefined");};

/**
 * Determine if an object or class string contains a given class.
 */
function hasClass(o,name) {
    return new RegExp("(^|\\s)"+name+"(\\s|$)").test(o.className);
};

/**
 * Add a class to an object
 */
function addClass(o,name) {
    var c = o.className || "";
    if (def(c) && !hasClass(o,name)) {
        o.className += (c?" ":"") + name;
    }
};

/**
 * Remove a class from an object
 */
function removeClass(o,name) {
    var c = o.className || "";
    o.className = c.replace(new RegExp("(^|\\s)"+name+"(\\s|$)"),"$1");
};

/**
*  Rounds a number - num to a number of decimal places - dec
**/
function roundNumber(num, dec) {
    var result = Math.round(num*Math.pow(10,dec))/Math.pow(10,dec);
    return result;
}
