//
// Page Load Functions
//

function addJS(js_files) {
	jss = js_files.split("|");
	for (i = 0; i < jss.length; i++) {
		var html_doc = document.getElementsByTagName('head').item(0);
		var js = document.createElement('script');
		js.setAttribute('language', 'javascript');
		js.setAttribute('type', 'text/javascript');
		js.setAttribute('src', jss[i]);
		html_doc.appendChild(js);
	}
	return false;
}



//
// Javascript Objects
//

// This is the permanent store of information that the UCMS system will keep for its use. (State)
function pStore(args, assoc) {
	for(var i = 0; i < args.length; i++)
	{
		this[assoc[i]] = args[i];
	}}

pStore.prototype = {
  uid : 0,
  ps : pageStore,
  is : [],
  ss : sessionStore,
  ns : [],
  ajax : [],
  titleHandler : []
};

// Storage of information about the page
function pageStore(args, assoc) {
	for(var i = 0; i < args.length; i++)
	{
		this[assoc[i]] = args[i];
	}
}

pageStore.prototype = {
	pid : 0,
	ptitle : "",
	attrs : "",
	piids : [],
	prights : 0
};

// Add additional piids (page/item combinations) to the page, i.e., after login.
pageStore.prototype.addPiids = function(itemArray){
	//	log(itemArray.length);
		for(var i = 0; i < itemArray.length; i++)
		{
			this.piids.push(itemArray[i]);
	//		log(this.piids.toString());
		}
	}

// Storage of information about the item
function itemStore(args, assoc) {
	for(var i = 0; i < args.length; i++)
	{
		this[assoc[i]] = args[i];
	}
}

itemStore.prototype = {
	iid : 0,
	piid : 0,
	col : "",
	position : 0,
	ititle : "",
	blurb : "",
	funct : "",
	irights : 0
};

// Storage of information about the session
function sessionStore(args, assoc) {
	for(var i = 0; i < args.length; i++)
	{
		this[assoc[i]] = args[i];
	}
}

sessionStore.prototype = {
	uid : 0,
	sessionKey : 0,
	appKey : 0
};

// Storage of information about the navigation
function navStore(args, assoc) {
	for(var i = 0; i < args.length; i++)
	{
		this[assoc[i]] = args[i];
	}
}

navStore.prototype = {
	navid : 0,
	zoneid : 0,
	line : 0,
	pos : 0,
	disp : 0,
	text : "",
	link : "",
	pid : 0,
	nrights : 0
};
	
// Storage of strings
function stringStore(args, assoc) {
	for(var i = 0; i < args.length; i++)
	{
		this[assoc[i]] = args[i];
	}
}

stringStore.prototype = {
	sitestrs : []
}


function grabValue (ids)
{
	for (i = 0; i < ids.length; i++)
	{
		id = ids[i];
		log (ids.length + "-" + id);
		if ($(id))
		{
			log ($(id));
			store[id] = escape($(id).value);
		}
		else
		{
			return false;
		}
	}
	return true;
}

function grabInnerHTML (ids)
{
	for (id in ids)
	{
		id = ids[i];
		if (document.getElementById(id))
		{
			store[id] = document.getElementById(id).innerHTML;
		}
		else
		{
			return false;
		}
	}
	return true;
}

// Message Box


// Input Box creation

function msgBox(title, id, toshow)
{
  return "<div class='toplevel' id='msgtop'>" + title + "<a class='closex' href='javascript:destroy(\"" + id + "\",\"" + toshow + "\")'>X</a></div>";
}

function endMsgBox(id, text, toshow)
{
	if(text != '')
	{
		return "<input id='cancelbutton' type='button' class='closebutton cancelbutton' onclick='destroy(\"" + id + "\",\"" + toshow + "\")' value='" + text + "'></div>";
	}
	else
	{
		return "</div>";
	}
}

function submitMsgBox(id, arg1, arg2, text, toshow)
{
	if(text != '' && text != 'OK')
	{
		return "<input id='closebutton' class='closebutton' type='submit' onclick='submit" + id + "(\"" + arg1 + "\",\"" + arg2 + "\")' value='" + text + "'>";
	}
	else if(text == 'OK')
	{
		return "<input id='closebutton' type='button' class='closebutton' onclick='destroy(\"box" + id + arg1 + "\",\"" + toshow + "\")' value='" + text + "'></div>";
	}
	else
	{
		return "";
	}
}

function makeInputBox(response)
{
  var d = document.createElement("div");
	document.body.appendChild(d);
	d.id = 'box' + response[0] + response[2];
	d.className = 'popupmessage';
	d.innerHTML = msgBox(response[5],'box' + response[0] + response[2], response[8]);
  var newbodyitemdiv = document.createElement('div');    
  newbodyitemdiv.setAttribute('class','body c');
  newbodyitemdiv.setAttribute('className','body c');
  newbodyitemdiv.setAttribute('style','background: white;');
  fields = response[4].split("||");
  fieldHTML = "";
  if(response.length > 11 && response[11] != '')
  {
  	fieldHTML = "<div class='msgboxerror'>" + response[11] + "</div><br>";
  }
  fieldHTML += response[10];
  if(fields.length > 1)
  {
   	fieldHTML += "<br><br>";
		for(var i = 0; i < fields.length; i++)
		{
			j = i + 1;
			fieldplus = fields[j].split("^^");
			fields[j] = fieldplus[0];
			if(fieldplus.length > 1)
			{
				var prefill = fieldplus[1];
			}
			else
			{
			  var prefill = "";
			}
			if(fields[i].substr(0,1) == "+")
			{
				fieldHTML += fields[j] + "<br><textarea rows=5 cols=60 id='" + fields[i] + response[2] + "' name='" + fields[i] + response[2] + "' >" + prefill + "</textarea><br><br>";
			}
			else if(fields[i].substr(0,1) == ".")
			{
				fieldHTML += fields[j] + "<br><br>";
			}
			else
			{
				fieldHTML += fields[j] + " <input id='" + fields[i] + response[2] + "' name='" + fields[i] + response[2] + "' value='" + prefill + "'/><br><br>";
			}
			i++;
		}
		//document.getElementById(fields[1] + response[2]).focus();
	}
	else
	{
		// make the box thinner, more dialog-like. (to-do)
	}
  newbodyitemdiv.innerHTML = fieldHTML;
  d.appendChild(newbodyitemdiv);
  d.innerHTML += submitMsgBox(response[0], response[2], response[9], response[7], response[8]);
  d.innerHTML += endMsgBox('box' + response[0] + response[2], response[6], response[8]);

}

function makeSimpleMsgBox (title, message)
{
	response = "000000<>SPLIT<>messagecontainer<>SPLIT<>0<>SPLIT<>0<>SPLIT<><>SPLIT<>" + title + "<>SPLIT<>OK<>SPLIT<><>SPLIT<><>SPLIT<>0<>SPLIT<>" + message;
	response = response.split('<>SPLIT<>');
	makeInputBox(response);
}



function getStyle(oElm, strCssRule){
	var strValue = "";
	if(document.defaultView && document.defaultView.getComputedStyle){
		strValue = document.defaultView.getComputedStyle(oElm, "").getPropertyValue(strCssRule);
	}
	else if(oElm.currentStyle){
		strCssRule = strCssRule.replace(/\-(\w)/g, function (strMatch, p1){
			return p1.toUpperCase();
		});
		log (strCssRule);
		strValue = oElm.currentStyle[strCssRule];
	}
	return strValue;
}

function isArray(maybeArray) {
	   if (maybeArray.constructor.toString().indexOf("Array") == -1)
	   {
		   return false;
	   }
	   else
	   {
		   return true;
	   }
}

function getGrabValues(grabValues) {
	if (grabValues)
	{
		grabValues = grabValues.substring(1, grabValues.length - 1);
		grabValues = grabValues.split(",");
		for (var i = 0; i < grabValues.length; i++)
		{
			grabValues[i] = grabValues[i].substring(1, grabValues[i].length - 1);
		}
		log (grabValues);
		return grabValues;
	}
	else
	{
		return [];
	}
}

function removeEl(id,toshow)
{
	log ('well hello there');
	var i = 0;
	if($(id))
	{
		$(id).parentNode.removeChild(document.getElementById(id));
		if($(toshow))
		{
			$(toshow).style.visibility = 'visible';
		}
		i++;
	}
	return false;
}


function getClickedElement (e) {
	log ('why hey there!');
	if (e.target) targ = e.target;
	else if (e.srcElement) targ = e.srcElement;
	if (targ.nodeType == 3)
		targ = targ.parentNode;
	log ('targ ' + targ);
	return targ;
}

function makePermTable (data, num, dt, dtid) {
	
	if (!num || num == null)
	{
		num = 0;
	}
	
	if (data.permarray && data.permarray == true)
	{
		pdata = data.permdata[num];
		data.key = dtid;
		data.datatype = dt;
	}
	else
	{
		pdata = data.permdata;
	}
	
	var ptable = document.createElement('table');
	var rtable = document.createElement('table');
	ptable.className = 'goodtable';
	ptable.cellSpacing = 0;
	rtable.className = 'goodtable';
	rtable.cellSpacing = 0;
	var htr = document.createElement('tr');
	
	var h1 = document.createElement('th');
	h1.innerHTML = "User Permissions";
	htr.appendChild (h1);
	var h2 = document.createElement('th');
	h2.innerHTML = "View";
	htr.appendChild (h2);
	var h3 = document.createElement('th');
	h3.innerHTML = "Edit";
	htr.appendChild (h3);
	var h4 = document.createElement('th');
	h4.innerHTML = "Administrate";
	htr.appendChild (h4);
	var h5 = document.createElement('th');
	h5.innerHTML = "Reply";
	htr.appendChild (h5);
	htr.style.background = '#ddd';
	
	ptable.appendChild(htr);
	hrtr = htr.cloneNode(true);
	rtable.appendChild(hrtr);
	rtable.childNodes[0].childNodes[0].innerHTML = "Role Permissions";
	
	
	for (eperm in pdata)
	{

		if (eperm.substring(0, 1) == 'r')
		{
			rid = eperm.substring(1);
			eperm = pdata[eperm];
			
			var trow = document.createElement('tr');
			var td1 = document.createElement('td');
			td1.innerHTML = eperm.g;
			td1.style.background = '#eee';
			trow.appendChild(td1);
			rtable.appendChild(trow);
			
			for (i = 0; i < 4; i++)
			{
				var td = document.createElement('td');
				td.innerHTML = eperm.r.substring(i, i+1);
				var pb = document.createElement('input');
				pb.type = 'button';
				pb.style.fontSize = ".8em";
				
				if (td.innerHTML == 1)
				{
					if (i != 0)
					{
						//$(data.datatype + "." + data.key + ".r" + rid + ".0.0").disabled = true;
					}
					td.innerHTML = "Yes &nbsp;";
					pb.value = "No";
					pb.id = data.datatype + "." + data.key + ".r" + rid + "." + i + ".0";
				}
				else
				{
					td.innerHTML = "No &nbsp;";
					pb.value = "Yes";
					pb.id = data.datatype + "." + data.key + ".r" + rid + "." + i + ".1";
				}
				td.appendChild(pb);
				trow.appendChild(td);
			}
		}
		else
		{
			uid = eperm;
			eperm = pdata[eperm];
			
			var trow = document.createElement('tr');
			var td1 = document.createElement('td');
			td1.innerHTML = eperm.n;
			td1.style.background = '#eee';
			trow.appendChild(td1);
			ptable.appendChild(trow);
			
			for (i = 0; i < 4; i++)
			{
				var td = document.createElement('td');
				td.innerHTML = eperm.r.substring(i, i+1);
				
				var pb = document.createElement('input');
				pb.type = 'button';
				pb.style.fontSize = ".8em";
				
				
				if (td.innerHTML == 1)
				{
					o = 1;
					td.innerHTML = "Yes &nbsp;";
					pb.value = "No";
					pb.id = data.datatype + "." + data.key + "." + uid + "." + i + ".0";
				}
				else
				{
					o = 0;
					td.innerHTML = "No &nbsp;";
					pb.value = "Yes";
					pb.id = data.datatype + "." + data.key + "." + uid + "." + i + ".1";
				}
				td.appendChild(pb);
				trow.appendChild(td);
				if (o == 1 && i != 0)
				{
					//$(data.datatype + "." + data.key + "." + uid + ".0.0").disabled = "true";
				}
			}
		}
	}
	return [rtable, ptable];
}

function getPlusOne(code)
{
	log (code);
	if (isNaN(code))
	{
		var oldNum = code.substr(code.length - 4, 4);
		log (oldNum);
		log (parseInt(oldNum),10);
		var newCode = parseInt(oldNum,10) + 1;
		log ("a" + newCode);
		while (newCode.toString().length < 4)
		{
			newCode = "0" + newCode.toString();
			log ("b" + newCode);
		}
		ds = code.split("_");
		newCode = ds[0] + "_" + newCode;
	}
	else
	{
		var newCode = parseInt(code,10) + 1;
	}
	log ('newCode: ' + newCode);
	return newCode;
}

function e2_0220call(data)
{
	log ("good");
	numinsts = data.numinsts; 
	numyrs = data.numyrs;
	var insts = new Array();
	var instsassoc = new Array();
	var good = 0;
	for (i = 0; i < numinsts; i++)
	{
		if (document.getElementById('in' + i))
		{
			instsassoc[i] = document.getElementById('in' + i).name.substring(3);
			if (document.getElementById('in' + i).checked == true)
			{
				insts[i] = 1;
				good = 1;
			}
			else
			{
				insts[i] = 0;
			}
		}
	}	
	var yrs = new Array();
	var yrsassoc = new Array();
	for (i = 0; i < numyrs; i++)
	{
		if (document.getElementById('yr' + i))
		{
			yrsassoc[i] = document.getElementById('yr' + i).name.substring(3);
			if (document.getElementById('yr' + i).checked == true)
			{
				yrs[i] = 1;
				good = 1;
			}
			else
			{
				yrs[i] = 0;
			}
		}
	}	
	all = pos = 0;
	if (document.getElementById('allbox').checked == 1)
	{
		all = 1;
		good = 1;
	}
	if (document.getElementById('posbox').checked == 1)
	{
		pos = 1;
		good = 1;
	}
	if (good == 0)
	{
		alert("Please select a group to email.");
		return;
	}
	removeEl('boxe2_02200');
	ajaxCall(e, "", 'e2_0222', '', ['insts=' + insts.slice(), 'instsa=' + instsassoc.slice(), 'yrs=' + yrs.slice(), 'yrsa=' + yrsassoc.slice(), 'all=' + all, 'pos=' + pos], []);
}

function e2_0222call(data)
{
	data.stlist = data.stlist.split(",");
	log (data.stlist);
	sts = Array();
	i = 0;
	for (st in data.stlist)
	{
		if ($('st' + data.stlist[st]) && $('st' + data.stlist[st]).checked == 1)
		{
			sts[i] = 'st' + data.stlist[st] + "=1";
			log (sts[i]);
		}
		i++;
	}
	log (sts[0]);
	sts[i] = 'passing=' + data.passing;
	log (sts[i]);
	ajaxCall(e, "", 'e2_0223', '', sts, []);
}


function runEmailSpec(arg)
{
	log ("EMAILS: " + arg);
	if (arg.length == 0)
	{
		alert("There are no members who meet that criteria.");
		removeEl('boxe2_02220');
	}
	removeEl('boxe2_02220');
	ajaxCall(e, "", '130401', '', ['emails=' + arg], []);
}