
///////////////////////// MEMLIB /////////////////////////
// Common JavaScript tasks
//////////////////////////////////////////////////////////


///////// FORMS ////////////

// Use up/down to jump fields
// onkeyup="move(this,event)"
function fieldjump (obj,e) {
	var keynum = (window.event) ? e.keyCode : e.which;
	var y=0;
	
	if (keynum==38) y=-1; // up
	if (keynum==40) y=1; // down
	if (keynum==13) y=1; // return

	if (y!==0) {
		var here=0;
		for (var i=0;i<obj.form.elements.length;i++) {
			if (obj.form.elements[i].id==obj.id) here=i;
		}
	
		var next=here+y;
		if ((next>-1) && (obj.form.elements[next])) {
			obj.form.elements[next].focus();
			return false;
		}
	}
	return true;
}


// Upload/attach
var uploadboxes=0;
var attachboxes=0;
function uploadattach (obj,n) {
	if (!n) n='';
	if (obj.value=='new') { 
		uploadboxes++; 
		if (uploadboxes<4) gid('uploadfiles'+n).innerHTML+='<br/><input type=file name=file'+uploadboxes+' size=30 />'; 
		else alert('You can only upload 3 files at a time'); 
		if (uploadboxes>=3) obj.style.color='rgb(128,128,128)'; 
	}
	else if (obj.value!='0') { 
		attachboxes++; 
		var arr= obj.value.split('/'); 
		gid('attachfiles'+n).innerHTML+='<br/><input type=checkbox name=attach'+attachboxes+' value='+arr[0]+' checked=checked /> '+arr[1]; 
		obj.selectedIndex=0; 
	}
	obj.selectedIndex=0;
}




// POST form
function formpost (uq) {
	var arr=uq.split('?');
	var url=arr[0];
	var query=arr[1];
	var form = document.createElement('form');
	form.action=url;
	form.method='post';
	var pairs=query.split('&');
	for (var i=0;i<pairs.length;i++) {
		var pair = pairs[i].split('=');
		var input = document.createElement('input');
		input.type='hidden';
		input.name=pair[0];
		input.value=pair[1];
		form.appendChild(input);
	}
	document.body.appendChild(form);
	form.submit();
}


// Add a CSS class to an object
function addclass (obj, className) {
	obj				= gid(obj);
	var classes		= obj.className.split(' ');
	var found		= false;
	
	for (var i=0; i<classes.length; i++) {
	 	if (classes[i]==className) found=true;
	}
	
	if (!found) {
		classes.push(className);
		obj.className	= classes.join(' ');
	}
}

// Drop a CSS class from an object
function dropclass (obj, className) {
	obj				= gid(obj);
	var classes		= obj.className.split(' ');
	var newClasses	= new Array();
	
	for (var i=0; i<classes.length; i++) {
		if (classes[i] != className) newClasses.push(classes[i]);
	}		

	obj.className	= newClasses.join(' ');
}

// Hide/show something
// 1 = force show
// 2 = forcehide
function showhide (id,set) {
	var element = gid(id);
	if ((element.style.display=='none') && (set!==2))
		element.style.display='block';
	else if (set!==1) element.style.display='none';
}


// Return an onject from its HTML id
function gid (i) { 
	if (typeof(i) == 'string') {
		if (document.getElementById(i)) return document.getElementById(i);
	}
	else if (typeof(i) == 'object') return i;
	else return false;
}

// Redirect browser
function go (url) {
	window.location.href=url;
}


// assignment copy scores
function copyall () {
	fields=document.getElementsByTagName('input');
	
	var score=false;
	for (var i=0;i<fields.length;i++) {
		field=fields[i];
		if (field.name.indexOf('score_')===0) {
			if (score!==false) field.value=score;
			else score=field.value;
		}
	}
}

var TO;

function openmenu (m) {
	clearTimeout(TO);
	gid('menu'+m).style.display='block';
	for (var i=0;i<20;i++) {
		if ((gid('menu'+i)) && (i!=parseInt(m))) gid('menu'+i).style.display='none';
	}
}

function closemenu (m) {
	TO=setTimeout("gid('menu"+m+"').style.display='none'", 250)
}


// Convert object to query string
function setQS (obj) {
	var pairs=new Array();
	for (var k in obj) {
		pairs.push(encodeURIComponent(k)+'='+encodeURIComponent(obj[k]));
	}
	return pairs.join('&');
}




////////// XML/XHTML PARSING //////////

// Return arr of tag's XML children
function getchildren (tag, xml) {	
	if (xml.getElementsByTagName(tag)[0])	return xml.getElementsByTagName(tag);
	else 									return false;
}

// Return a tag's child XML
function getchild (tag, xml) {
	if (xml.getElementsByTagName(tag)[0])	return xml.getElementsByTagName(tag)[0];
	else 									return false;

}

// Return one tag's value
function getvalue (tag, xml) {
	if (xml.getElementsByTagName(tag)[0] &&
	xml.getElementsByTagName(tag)[0].childNodes[0])
			return xml.getElementsByTagName(tag)[0].childNodes[0].nodeValue;
	else 	return false;
}

// Get child's value
function myvalue (xml) {
	if (xml.hasChildNodes())					return xml.childNodes[0].nodeValue;
	else 									return false;
}

// Return XML as Object
function xml2object (xml) {
 	if (xml.childNodes) {
		var nodes 	= xml.childNodes;
		var Obj		= new Object;
		for (var i=0; i< nodes.length; i++) {
		 	if (nodes[i].hasChildNodes()) 			Obj[nodes[i].nodeName] = nodes[i].childNodes[0].nodeValue;
		 	else if (nodes[i].nodeName!='#text') 	Obj[nodes[i].nodeName] = '';
		}
		return Obj;
	}
	else return false;
}

// Return array of <item>'s in XML
function getitems (tagName, xml) {
	var newxml = getchild(tagName, xml);
 	if (newxml.childNodes) {
		for (var i=0; i < newxml.childNodes.length; i++) {
		 	if (newxml.childNodes[i].nodeName!='item') { newxml.removeChild(newxml.childNodes[i]); i--; }
		}
		return newxml.childNodes;
	}
	else return false;
}









// Make popbox visible
var POPONDIV=false;
function popon (id,x,y) {

    if (gid('pop').className.indexOf('off')===-1) popoff();

	var embeds = document.getElementsByTagName('embed');
	for (var i=0;i<embeds.length;i++) {
		if (embeds[i].style) embeds[i].style.display='none';	
	}
	
	var width		= parseInt(gid(id).style.width);
	var title		= gid(id).getAttribute('title');
	
	// windowX, windowY, scrollX, scrollY
	var dimensions	= getXY();
	var left		= (x) ? dimensions[2]+x : Math.round((dimensions[0]-width-30)/2);
	var top			= (y) ? dimensions[3]+y : dimensions[3]+200;

	
	gid('wrapper').className	= 'off';
	gid('pop').className		= 'on';
	gid('pop').style.top		= top + 'px';
	gid('pop').style.left		= left + 'px';
	gid('pop').style.width		= width + 'px';
	gid('popc').innerHTML		= '';
	gid('poptitle').innerHTML	= title;
	gid('popc').appendChild(gid(id));
	gid(id).style.display='block';  
	POPONDIV=id;
}


// Make popbox invisible
function popoff () {

	document.body.appendChild(gid(POPONDIV));
	gid(POPONDIV).style.display='none';

	gid('wrapper').className	= 'on';
	gid('pop').className		= 'off';
	gid('popc').innerHTML		= '';
	
	var embeds = document.getElementsByTagName('embed');
	for (var i=0;i<embeds.length;i++) {
		if (embeds[i].style) embeds[i].style.display='inline';	
	}
	POPONDIV=false;
}



function popupvideo (id) {
	var iframe=document.createElement('iframe');
	iframe.src='http://player.vimeo.com/video/'+id+'?title=0&amp;byline=0&amp;portrait=0&autoplay=1';
	iframe.width='700';
	iframe.height='350';
	iframe.setAttribute('frameborder','0');
	iframe.setAttribute('title','Engrade Video');
	iframe.style.width='700px';
	iframe.style.display='none';
	iframe.id='video'+id;
	document.body.appendChild(iframe);
	popon(iframe.id,0,0);
}




// Get X,Y scrolls
function getXY () {
	var scrollx = 0;
	var scrolly = 0;
	//Netscape compliant
	if( typeof( window.pageYOffset ) == 'number' ) {
		scrolly = window.pageYOffset;
		scrollx = window.pageXOffset;
	}
	//DOM compliant
	else if( document.body && ( document.body.scrollLeft || document.body.scrollTop ) ) {
		scrolly = document.body.scrollTop;
		scrollx = document.body.scrollLeft;
	}
	//IE6 standards compliant mode
	else if( document.documentElement && ( document.documentElement.scrollLeft || document.documentElement.scrollTop ) ) {
		scrolly = document.documentElement.scrollTop;
		scrollx = document.documentElement.scrollLeft;
	}
	
	var windowy = window.innerHeight ? window.innerHeight : document.body.offsetHeight;
	var windowx = window.innerWidth ? window.innerWidth : document.body.offsetWidth;

	return [ windowx, windowy, scrollx, scrolly ];
}






//Resize iframe
function resizeframe (id) {
	var windowx = window.innerWidth ? parseInt(window.innerWidth) : parseInt(document.body.offsetWidth);
	var windowy = window.innerHeight ? parseInt(window.innerHeight) : parseInt(document.body.offsetHeight);
	
	if (windowx) {
		gid('appframe').style.width=(windowx-220)+'px';
		gid('appframe').style.height=(windowy-230)+'px';
	}
}


