/**
 * Tweaks Delete links so they perform their job using AJAX
 */
addLoadListener(initAjaxTerm);
addLoadListener(initSavedSec);


function initAjaxTerm()
{

	crsSelector = document.getElementById('courseSelector');
	var aNodes = crsSelector.getElementsByTagName('a');
	for (var i = 0; i < aNodes.length; i++)
	{
		var pattern = new RegExp("(^| )termCode( |$)");
		if (pattern.test(aNodes[i].className))
		{
			aNodes[i].onclick = AjaxTerm;
		}
	}
}

function initAjaxDept()
{
	crsSelector = document.getElementById('courseSelector');
	var aNodes = crsSelector.getElementsByTagName('a');
	for (var i = 0; i < aNodes.length; i++)
	{
		var pattern = new RegExp("(^| )deptCode( |$)");

		if (pattern.test(aNodes[i].className))
		{
			aNodes[i].onclick = AjaxDept;
		}
	}
}

function initAjaxCourse()
{
	crsSelector = document.getElementById('courseSelector');
	var aNodes = crsSelector.getElementsByTagName('a');
	for (var i = 0; i < aNodes.length; i++)
	{
		var pattern = new RegExp("(^| )courseCode( |$)");

		if (pattern.test(aNodes[i].className))
		{
			aNodes[i].onclick = AjaxCourse;
		}
	}
}

function initAjaxSec()
{
	crsSelector = document.getElementById('courseSelector');
	var iNodes = crsSelector.getElementsByTagName('input');
	var pattern = new RegExp("(^| )sectionCode( |$)");
	var pattern2 = new RegExp("(^| )sectionSaved( |$)");	
	/* Check for Previous Selections*/
	for (var i = 0; i < iNodes.length; i++)
	{
		/* Check for Selection */
		currentCrs = document.getElementById('currentCourses');
		var aSelected = currentCrs.getElementsByTagName('input');
		for (var s = 0; s < aSelected.length; s++) {
			if (iNodes[i].id == aSelected[s].id){
				var parse = iNodes[i].id.match(/^saved_(.+)$/);
				var linkId = 'secLink_'+parse[1];
				document.getElementById(linkId).className = "secSelected";
			}
		}
		if (pattern2.test(iNodes[i].className)) {
			iNodes[i].onclick = AjaxRemove;
		}
	}
	/* Establish Links */
	var aNodes = crsSelector.getElementsByTagName('a');
	for (var i = 0; i < aNodes.length; i++)
	{		
		/* Activate Section Buttons */
		if (pattern.test(aNodes[i].className))
		{
			aNodes[i].onclick = AjaxSec;
		}
	}
}


function initSavedSec()
{
	currentCrs = document.getElementById('currentCourses');
	var aNodes = currentCrs.getElementsByTagName('input');
	for (var i = 0; i < aNodes.length; i++)
	{
		var pattern = new RegExp("(^| )sectionSaved( |$)");

		if (pattern.test(aNodes[i].className))
		{
			aNodes[i].onclick = AjaxRemove;
		}
	}
	/*Escape saved values*/
	addList = document.getElementById('inps');
	var savedInputs = addList.getElementsByTagName('input');
	for (var s = 0; s < savedInputs.length; s++)
	{
		var savedValue = savedInputs[s].value;
		savedInputs[s].value = escape(savedValue);
	}
}



function AjaxTerm()
{
	var xhr;
	try
	{
		xhr = new XMLHttpRequest();
	} catch (error)
	{
		try
		{
			xhr = new ActiveXObject('Microsoft.XMLHTTP');
		} catch (error)
		{
			xhr = null;
		}
	}
	
	if (xhr != null)
	{
		var store = document.getElementById('storenum').value;
		var parse = this.id.match(/^term_(.+)_(.+)$/);
		var termId = escape(parse[1]);
		var termIdNoEsc = parse[1];
		var termInc = parse[2];
		document.getElementById('termTitle').innerHTML = "All Terms";
		document.getElementById('termArea').className = "selections";
		document.getElementById('deptArea').className = "activeselections";
		document.getElementById('courseArea').className = "selections";
		document.getElementById('sectionArea').className = "selections";
		var nameId = 'tName_'+termIdNoEsc+'_'+termInc;
		var termName = document.getElementById(nameId).innerHTML;
		var dSort = document.getElementById('deptSort').innerHTML;
		
		var pattern = new RegExp("(^| )Preview( |$)");
		if (pattern.test(document.getElementById(this.id).className)){
			document.getElementById('courseData').className = "Preview";
		} else {
			document.getElementById('courseData').className = "Sales";
		}
		
		var tList = document.getElementById('termList');
		tList.className = "hideList";
		var ta = document.getElementById('termArea');
		linkText = document.getElementById(this.id).innerHTML;
		hdId = 'h_'+this.id;
		ta.innerHTML += '<div id="termHead" class="termHeader"><a href="#" class="selectedTerm" id="'+hdId+'">'+linkText+'</a></div>';
		tHead = document.getElementById(hdId);
		tHead.onclick = RevealDept;		

		xhr.open('POST', 'ePOS?form=shared3/textbooks/json/json_depts.html&term=' + termIdNoEsc + '&deptSort=' + dSort + '&store=' + store, true);
		
		var da = document.getElementById('deptArea');
		da.updating = true;
		da.className += " status";
		da.innerHTML = "<div class='loading'>Loading Departments in "+termName+"...</div>";
		var ca = document.getElementById('courseArea');
		ca.innerHTML = "";		
		var sa = document.getElementById('sectionArea');
		sa.innerHTML = "";
		
		xhr.onreadystatechange = function()
		{
			if (xhr.readyState == 4)
			{
				if (xhr.status == 200 || xhr.status == 304)
				{
					var response = xhr.responseText;
					updateDeptList(response, da, termId, termInc, termName);
					
				} else
				{
					da.innerHTML = "Error!";
				}
			}
		};
		
		xhr.send(null);
				
		return false;
	}
	return true;
}

function AjaxDept()
{
	var xhr;
	try
	{
		xhr = new XMLHttpRequest();
	} catch (error)
	{
		try
		{
			xhr = new ActiveXObject('Microsoft.XMLHTTP');
		} catch (error)
		{
			xhr = null;
		}
	}
	
	if (xhr != null)
	{
		var store = document.getElementById('storenum').value;
		var parse = this.id.match(/^dept_(.+)_(.+)$/);
		var deptId = escape(parse[1]);
		var deptInc = parse[2];
		var termId = document.getElementById('keepterm').innerHTML;
		document.getElementById('termArea').className = "selections";
		document.getElementById('deptArea').className = "selections";
		document.getElementById('courseArea').className = "activeselections";
		document.getElementById('sectionArea').className = "selections";		
		
		var dList = document.getElementById('deptList');
		dList.className = "hideList";
		var da = document.getElementById('deptArea');
		linkText = document.getElementById(this.id).innerHTML;
		hdId = 'h_'+this.id;
		da.innerHTML += '<div id="deptHead" class="deptHeader"><a href="#" class="selectedDept" id="'+hdId+'">'+linkText+'</a></div>';
		dHead = document.getElementById(hdId);
		dHead.onclick = RevealCourse;
		xhr.open('POST', 'ePOS?form=shared3/textbooks/json/json_courses.html&term=' + termId + '&department=' + deptId + '&store=' + store, true);
		
		var ca = document.getElementById('courseArea');
		ca.updating = true;
		ca.className += " status";
		ca.innerHTML = "<div class='loading'>Loading Courses in "+deptId+"...</div>";
		var sa = document.getElementById('sectionArea');
		sa.innerHTML = "";

		xhr.onreadystatechange = function()
		{
			if (xhr.readyState == 4)
			{
				if (xhr.status == 200 || xhr.status == 304)
				{
					var response = xhr.responseText;
					updateCourseList(response, ca, deptId, deptInc);
					
				} else
				{
					ca.innerHTML = "Error!";
				}
			}
		};
		
		xhr.send(null);
				
		return false;
	}
	return true;
}

function AjaxCourse()
{
	var xhr;
	try
	{
		xhr = new XMLHttpRequest();
	} catch (error)
	{
		try
		{
			xhr = new ActiveXObject('Microsoft.XMLHTTP');
		} catch (error)
		{
			xhr = null;
		}
	}
	
	if (xhr != null)
	{
		var store = document.getElementById('storenum').value;
		var parse = this.id.match(/^course_(.+)_(.+)$/);
		var courseId = escape(parse[1]);
		var courseName = parse[1];
		var courseInc = parse[2];
		var deptId = document.getElementById('keepdept').innerHTML;
		var termId = document.getElementById('keepterm').innerHTML;
		document.getElementById('termArea').className = "selections";
		document.getElementById('deptArea').className = "selections";
		document.getElementById('courseArea').className = "selections";
		document.getElementById('sectionArea').className = "activeselections";	
		var cList = document.getElementById('courseList');
		cList.className = "hideList";
		
		var ca = document.getElementById('courseArea');
		linkText = document.getElementById(this.id).innerHTML;
		hdId = 'h_'+this.id;
		ca.innerHTML += '<div id="courseHead" class="courseHeader"><a href="#" class="selectedCourse" id="'+hdId+'">'+linkText+'</a></div>';
		cHead = document.getElementById(hdId);
		
		xhr.open('POST', 'ePOS?form=shared3/textbooks/json/json_sections.html&term=' + termId + '&department=' + deptId + '&course=' + courseId + '&store=' + store, true);
		
		var sa = document.getElementById('sectionArea');
		sa.updating = true;
		sa.className += " status";
		sa.innerHTML = "<div class='loading'>Loading Sections in "+courseId+"...</div>";
		

		xhr.onreadystatechange = function()
		{
			if (xhr.readyState == 4)
			{
				if (xhr.status == 200 || xhr.status == 304)
				{
					var response = xhr.responseText;
					updateSectionList(response, sa, courseId, courseInc);
					
				} else
				{
					sa.innerHTML = "Error!";
				}
			}
		};
		
		xhr.send(null);
				
		return false;
	}
	return true;
}


function AjaxSec() {

	var xhr;
	try
	{
		xhr = new XMLHttpRequest();
	} catch (error)
	{
		try
		{
			xhr = new ActiveXObject('Microsoft.XMLHTTP');
		} catch (error)
		{
			xhr = null;
		}
	}
	
	if (xhr != null)
	{
		var store = document.getElementById('storenum').value; var prev = 0;
		var parse = this.id.match(/^secLink_(.+)_(.+)_(.+)_(.+)$/);
		thisSecId = 'sec_'+parse[1]+'_'+parse[2]+'_'+parse[3]+'_'+parse[4];
		thisJSecId = 'jsec_'+parse[1]+'_'+parse[2]+'_'+parse[3]+'_'+parse[4];
		var secCodeId = 'code_'+parse[1]+'_'+parse[2]+'_'+parse[3]+'_'+parse[4];
		var profId = 'prof_'+parse[1]+'_'+parse[2]+'_'+parse[3]+'_'+parse[4];
		var secInc = parse[4];
		var courseInc = parse[3];
		var deptInc = parse[2];
		var termInc = parse[1];
		var secId = document.getElementById(secCodeId).className;
		var courseId = document.getElementById('keepcourse').innerHTML;
		var deptId = document.getElementById('keepdept').innerHTML;
		var termId = document.getElementById('keepterm').innerHTML;
		var tName = escape(document.getElementById('keeptermName').innerHTML);
		var prof = document.getElementById(profId).innerHTML;
		try {	
		
			/* Move Course Button */
			thisCourse = document.getElementById(thisSecId);
			document.getElementById('currentCourses').appendChild(thisCourse);
				
			/* Add Inputs */
			var addList = document.getElementById('inps');
			var numi = document.getElementById('addcount');
			var num = (document.getElementById('addcount').value -1)+ 2;
			numi.value = num;
			createInput("inpSaved", "savedsec", thisSecId, num, thisSecId, "inps");
			createInput("inpT", "courseterm", termId, num, thisSecId, "inps");
			createInput("inpD", "department", deptId, num, thisSecId, "inps");
			createInput("inpC", "course", courseId, num, thisSecId, "inps");
			createInput("inpS", "section", secId, num, thisSecId, "inps");
			createInput("tName", "tName", tName, num, thisSecId, "inps");
			if(document.getElementById('courseData').className=='Preview'){
				createInput("prev", "prev", "1", num, thisSecId, "inps");
				var prev = 1;
			}
			
			crsCount = parseInt(document.getElementById('courseCount').innerHTML);
			crsCount = crsCount + 1;
			document.getElementById('courseCount').innerHTML = crsCount;
			
			changeid = this.id;
			document.getElementById(this.id).className = "secBlink";
			setTimeout("changeColor(changeid,'secSelected')", 100);
			
			thisCourse.id = "x_"+thisSecId
			
		} catch(e) {
		}
		xhr.open('POST', 'ePOS?form=shared3/textbooks/json/save_selections.html&termInc='+termInc+'&deptInc='+deptInc+'&courseInc='+courseInc+'&secInc='+secInc+'&num='+num+'&term='+termId+'&dept='+deptId+'&course='+courseId+'&section='+secId+'&prof='+prof+'&prev='+prev+'&tName='+tName+'&store=' + store, true);
		
		xhr.send(null);

		return false;
	}
	return true;

	
}

function RevealSec()
{
	var sHead = document.getElementById('secHead');
	var sa = document.getElementById('sectionArea');
	sa.removeChild(sHead);
	sa.className = "activeselections";		
	var courseList = document.getElementById('secList');
	courseList.className = "activeList";
	initAjaxSec();
}

function changeColor(id,color) {
	document.getElementById(id).className = color;
}

function createInput(prefix, name, inpValue, num, id, addId){	
	var addSpace = document.getElementById(addId);
	var inpName = name+"."+num;
	var inpId = prefix+ "_"+id;
	var newInput = document.createElement("input");
	newInput.setAttribute("id", inpId);
	newInput.setAttribute("type", "hidden");
	newInput.setAttribute("name", inpName);
	newInput.setAttribute("value", inpValue);
	addSpace.appendChild(newInput);
}

function AjaxRemove() {

	var xhr;
	try
	{
		xhr = new XMLHttpRequest();
	} catch (error)
	{
		try
		{
			xhr = new ActiveXObject('Microsoft.XMLHTTP');
		} catch (error)
		{
			xhr = null;
		}
	}
	
	if (xhr != null)
	{
		var store = document.getElementById('storenum').value;	
		crsSelector = document.getElementById('courseSelector');
		var parse = this.id.match(/^saved_(.+)_(.+)_(.+)_(.+)$/);
		var thisSecId = 'sec_'+parse[1]+'_'+parse[2]+'_'+parse[3]+'_'+parse[4];
		var thisSelectId = 'x_sec_'+parse[1]+'_'+parse[2]+'_'+parse[3]+'_'+parse[4];
		var thisSecCodeId = 'code_'+parse[1]+'_'+parse[2]+'_'+parse[3]+'_'+parse[4];
		var thisCourseId = 'ul_'+parse[1]+'_'+parse[2]+'_'+parse[3];
		var thisLinkId = 'secLink_'+parse[1]+'_'+parse[2]+'_'+parse[3]+'_'+parse[4];
		thisSec = document.getElementById(thisSelectId);
		listSec = document.getElementById(thisSecId);
		/* Remove Section Button */
		if (document.getElementById(thisSecId) && document.getElementById(thisLinkId)) {
			document.getElementById(thisLinkId).className = "sectionCode";
			document.getElementById(thisLinkId).onclick = AjaxSec;
			document.getElementById('currentCourses').removeChild(thisSec);
		} else {
			try {
				document.getElementById(thisCourseId).appendChild(thisSec);
				thisSec.id = 'sec_'+parse[1]+'_'+parse[2]+'_'+parse[3]+'_'+parse[4];
				document.getElementById(thisLinkId).className = "sectionCode";
			} catch(e) {
				document.getElementById('currentCourses').removeChild(thisSec);
			}
		}
		crsCount = parseInt(document.getElementById('courseCount').innerHTML);
		crsCount = crsCount - 1;
		document.getElementById('courseCount').innerHTML = crsCount;
		/* Remove Inputs */
		var addList = document.getElementById('inps');
		var inpSavedsecid = "inpSaved_" + thisSecId;
		var inpTid = "inpT_" + thisSecId;
		var inpDid = "inpD_" + thisSecId;
		var inpCid = "inpC_" + thisSecId;
		var inpSid = "inpS_" + thisSecId;
		var oldsavedsec = document.getElementById(inpSavedsecid);
		var oldTerm = document.getElementById(inpTid);
		var oldDept = document.getElementById(inpDid);
		var oldCourse = document.getElementById(inpCid);
		var oldSec = document.getElementById(inpSid);
		var oldSecName = document.getElementById(inpSid).name;
		var parse = oldSecName.match(/^section.(.+)$/);
		var num = parse[1];

		addList.removeChild(oldsavedsec);	  	  
		addList.removeChild(oldTerm);
		addList.removeChild(oldDept);
		addList.removeChild(oldCourse);	  
		addList.removeChild(oldSec);
		
		xhr.open('POST', 'ePOS?form=shared3/textbooks/json/del_selections.html&num='+num+'&store=' + store, true);
		
		xhr.send(null);
  
		return false;
		
		
		
	}
	return true;
}

function updateDeptList(response, da, term, inc, name)
{
	var json = eval('('+ response +')');
	var testdept = json.depts.length;
	var dLabel = document.getElementById('deptLabel').innerHTML;
	da.innerHTML = '<span class="'+inc+'" id="keepterm">'+term+'</span><span class="'+inc+'" id="keeptermName">'+name+'</span>';
	var deptHTML = '<ul class="activeList" id="deptList">'
	for(var i=0; i < json.depts.length; i++)
	{
		var deptcode = json.depts[i].code;
		var deptname = json.depts[i].name;
		if(deptcode!='Zlast'){
			var deptHTML = deptHTML + '<li><a href="#" class="deptCode" id="dept_'+deptcode+'_'+i+'">';
			if((dLabel=='code')||(dLabel=='both')){ var deptHTML = deptHTML + deptcode; };
			if(dLabel=='both'){ var deptHTML = deptHTML + ' - '; };
			if((dLabel=='name')||(dLabel=='both')){ var deptHTML = deptHTML + deptname; };
			var deptHTML = deptHTML + '</a></li>';
		}
	}
	var deptHTML = deptHTML + '</ul>'
	da.innerHTML += deptHTML;
	initAjaxDept();
}

function updateCourseList(response, ca, department, inc)
{
	var json = eval('('+ response +')');
	var testdept = json.courses.length;
	ca.innerHTML = '<span class="'+inc+'" id="keepdept">'+department+'</span>';
	var courseHTML = '<ul class="activeList" id="courseList">'

	for(var i=0; i < json.courses.length; i++)
	{
		var coursecode = json.courses[i].code;
		if(coursecode!='Zlast'){
			var courseHTML = courseHTML + '<li><a href="#" class="courseCode" id="course_'+coursecode+'_'+i+'">'+coursecode+'</a></li>';
		}
	}
	var courseHTML = courseHTML + '</ul>'
	ca.innerHTML += courseHTML;	
	initAjaxCourse();
}

function updateSectionList(response, sa, course, inc)
{
	var json = eval('('+ response +')');
	if(document.getElementById('courseData').className=='Preview'){ var fullClass = "fullcourse Preview" } else { var fullClass = "fullcourse" };	
	var testdept = json.sections.length;
	sa.innerHTML = '<span class="'+inc+'" id="keepcourse">'+course+'</span>';
	var dept = document.getElementById('keepdept').innerHTML;
	var term = document.getElementById('keepterm').innerHTML;
	var tName = document.getElementById('keeptermName').innerHTML;
	var tInc = document.getElementById('keepterm').className;
	var dInc = document.getElementById('keepdept').className;
	var termHead = 'termHead_'+term;
	var sectionentry = '<ul id="ul_'+tInc+'_'+dInc+'_'+inc+'" class="sectionlist">';
	for(var i=0; i < json.sections.length; i++)
	{
		var sectioncode = json.sections[i].code;
		var sectionprof = json.sections[i].instructor;
		if(sectioncode!='Zlast'){
			var sectionentry = sectionentry+'<li id="jsec_'+tInc+'_'+dInc+'_'+inc+'_'+i+'" class="justsection"><a href="#" class="sectionCode" id="secLink_'+tInc+'_'+dInc+'_'+inc+'_'+i+'"><span id="code_'+tInc+'_'+dInc+'_'+inc+'_'+i+'" class="'+escape(sectioncode)+'">'+sectioncode+'</span> - <span class="secProf" id="prof_'+tInc+'_'+dInc+'_'+inc+'_'+i+'">' + sectionprof +'</span></a></li>';
			var sectionentry = sectionentry+'<li id="sec_'+tInc+'_'+dInc+'_'+inc+'_'+i+'" class="'+fullClass+'"><input alt="delete" value="delete" src="images/buttons/generic/minus.gif" type="image" border="0" class="sectionSaved" id="saved_'+tInc+'_'+dInc+'_'+inc+'_'+i+'" /><div class="secDisplay">'+unescape(dept)+' '+unescape(course)+' '+sectioncode+' <span class="secProf">' + sectionprof +'</span></div> <div class="secTerm">'+tName+'</div></li>';
		}
	}
	var sectionentry  = sectionentry+'</ul>';	
	sa.innerHTML += sectionentry;
	initAjaxSec();
}


function addLoadListener(fn)
{
  if (typeof window.addEventListener != 'undefined')
  {
    window.addEventListener('load', fn, false);
  }
  else if (typeof document.addEventListener != 'undefined')
  {
    document.addEventListener('load', fn, false);
  }
  else if (typeof window.attachEvent != 'undefined')
  {
    window.attachEvent('onload', fn);
  }
  else
  {
    var oldfn = window.onload;
    if (typeof window.onload != 'function')
    {
      window.onload = fn;
    }
    else
    {
      window.onload = function()
      {
        oldfn();
        fn();
      };
    }
  }
}

function revealTerm()
{
	document.getElementById('termTitle').innerHTML = "Select A Term";
	document.getElementById('courseData').className = "Sales";
	document.getElementById('termArea').className = "activeselections";
	document.getElementById('deptArea').className = "selections";
	document.getElementById('deptArea').innerHTML = "";
	document.getElementById('courseArea').className = "selections";
	document.getElementById('courseArea').innerHTML = "";
	document.getElementById('sectionArea').className = "selections";
	document.getElementById('sectionArea').innerHTML = "";
	var tHead = document.getElementById('termHead');
	var ta = document.getElementById('termArea');
	try {ta.removeChild(tHead);} catch(e) {};
	ta.className = "activeselections";		
	var tList = document.getElementById('termList');
	tList.className = "activeList";
	initAjaxTerm();
}

function RevealDept()
{
	document.getElementById('deptArea').className = "activeselections";
	document.getElementById('courseArea').className = "selections";
	document.getElementById('courseArea').innerHTML = "";
	document.getElementById('sectionArea').className = "selections";
	document.getElementById('sectionArea').innerHTML = "";
	var dHead = document.getElementById('deptHead');
	var da = document.getElementById('deptArea');
	da.removeChild(dHead);
	da.className = "activeselections";		
	var dList = document.getElementById('deptList');
	dList.className = "activeList";
	initAjaxDept();
}

function RevealCourse()
{
	document.getElementById('courseArea').className = "activeselections";
	document.getElementById('sectionArea').className = "selections";
	document.getElementById('sectionArea').innerHTML = "";
	var cHead = document.getElementById('courseHead');
	var ca = document.getElementById('courseArea');
	ca.removeChild(cHead);
	ca.className = "activeselections";		
	var cList = document.getElementById('courseList');
	cList.className = "activeList";
	initAjaxCourse();
}

function resetText() 
{
	var xhr;
	try
	{
		xhr = new XMLHttpRequest();
	} catch (error)
	{
		try
		{
			xhr = new ActiveXObject('Microsoft.XMLHTTP');
		} catch (error)
		{
			xhr = null;
		}
	}
	
	if (xhr != null)
	{
		var store = document.getElementById('storenum').value;	
		xhr.open('POST', 'ePOS?form=shared3/textbooks/json/reset_selections.html&store=' + store, true);
		
		xhr.onreadystatechange = function()
		{
			if (xhr.readyState == 4)
			{
				if (xhr.status == 200 || xhr.status == 304)
				{
					document.getElementById('currentCourses').innerHTML = "";
					document.getElementById('inps').innerHTML = "";
					document.getElementById('courseCount').innerHTML = "0";
					revealTerm();
					
				} else {
					return false;
				}
			}
		};
		
		xhr.send(null);

		return false;
		
	}
	return true;
}
