﻿// JScript File

/// Gets the page element by its name
function getObject(name){
	return document.getElementById(name);
}

/// Gets the page element's value by its name
function getValue(name){
	return getObject(name).value;
}

function CreateXMLHTTP(){
	var xmlhttp = false;
	/*@cc_on @*/
	/*@if (@_jscript_version >= 5)
	// JScript gives us Conditional compilation, we can cope with old IE versions.
	// and security blocked creation of the objects.
	try {
		xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
	} catch (e) {
		try {
			xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
		} catch (E) {
			xmlhttp = false;
		}
	}
	@end @*/
	
	if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
		try {
			xmlhttp = new XMLHttpRequest();
		} catch (e) {
			xmlhttp = false;
		}
	}
	if (!xmlhttp && window.createRequest) {
		try {
			xmlhttp = window.createRequest();
		} catch (e) {
			xmlhttp = false;
		}
	}
	
	if(!xmlhttp){
		alert("Problem loading Http request object");
	}
	
	return xmlhttp;
}

function HTTPConnection(method, url, complete){
	xmlhttp = CreateXMLHTTP();
	//response = "N/A";	
	
	xmlhttp.open(method, url, true);
	xmlhttp.onreadystatechange = function() {
		if (xmlhttp.readyState == 4) {
			switch (xmlhttp.status){
				case 200: // All OK
					if(complete != null){
						complete();
					}
					break;
				case 404: // URL not found
					alert("\"" + url + "\" Not found");
					break;
				/*case 500: // Server error
					break;*/
				default: // Any other status
					alert("Problem [" + xmlhttp.status + "] loading \"" + url + "\"");
					break;
			}
		}
	}
	
	this.Execute = function(){
		xmlhttp.send(null);
	}
}

function CheckedParse(string){
	if(!isNaN(parseInt(string))){
		return parseInt(string);
	}else{
		return 0;
	}
}

function xmlAddSoapPram(val, tagname){
	if(val != "" && val != null && val != "null"){
		return "<" + tagname + ">" + val + "</" + tagname + ">";
	}else{
		return "";
	}
}

function GetData(xmlHTTP, id, ddObj){
	var sXml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>";
	sXml += "<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">";
	sXml += "<soap:Body>";
	switch(id){
		case "Institutions":
			sXml += "<GetInstitutions xmlns=\"http://tempuri.org/\" />";
			break;
		case "Departments":
			sXml += "<GetDepartments xmlns=\"http://tempuri.org/\">";
			sXml += xmlAddSoapPram(CheckedParse(InstitutionsObj.value), "institutionID");
			sXml += xmlAddSoapPram(CheckedParse(SemestersObj.value), "semesterID");
			sXml += xmlAddSoapPram(CheckedParse(ExamTypesObj.value), "examType");
			sXml += xmlAddSoapPram(CheckedParse(TeachersObj.value), "teacherID");
			sXml += xmlAddSoapPram(CourseNameObj.value, "courseName");
			sXml += xmlAddSoapPram(CourseIDObj.value, "courseID");
			sXml += "</GetDepartments>";
			break;
		case "Semesters":
			sXml += "<GetSemesters xmlns=\"http://tempuri.org/\">"
			sXml += xmlAddSoapPram(CheckedParse(InstitutionsObj.value), "institutionID");
			sXml += xmlAddSoapPram(CheckedParse(DepartmentsObj.value), "departmentID");
			sXml += xmlAddSoapPram(CheckedParse(ExamTypesObj.value), "examType");
			sXml += xmlAddSoapPram(CheckedParse(TeachersObj.value), "teacherID");
			sXml += xmlAddSoapPram(CourseNameObj.value, "courseName");
			sXml += xmlAddSoapPram(CourseIDObj.value, "courseID");
			sXml += "</GetSemesters>"
			break;
		case "ExamTypes":
			sXml += "<GetExamTypes xmlns=\"http://tempuri.org/\">"
			sXml += xmlAddSoapPram(CheckedParse(InstitutionsObj.value), "institutionID");
			sXml += xmlAddSoapPram(CheckedParse(DepartmentsObj.value), "departmentID");
			sXml += xmlAddSoapPram(CheckedParse(SemestersObj.value), "semesterID");
			sXml += xmlAddSoapPram(CheckedParse(TeachersObj.value), "teacherID");
			sXml += xmlAddSoapPram(CourseNameObj.value, "courseName");
			sXml += xmlAddSoapPram(CourseIDObj.value, "courseID");
			sXml += "</GetExamTypes>"
			break;
		case "Teachers":
			sXml += "<GetTeachers xmlns=\"http://tempuri.org/\">"
			sXml += xmlAddSoapPram(CheckedParse(InstitutionsObj.value), "institutionID");
			sXml += xmlAddSoapPram(CheckedParse(DepartmentsObj.value), "departmentID");
			sXml += xmlAddSoapPram(CheckedParse(SemestersObj.value), "semesterID");
			sXml += xmlAddSoapPram(CheckedParse(ExamTypesObj.value), "examType");
			sXml += xmlAddSoapPram(CourseNameObj.value, "courseName");
			sXml += xmlAddSoapPram(CourseIDObj.value, "courseID");
			sXml += "</GetTeachers>"
			break;
		case "CourseID":
			sXml += "<GetCourseID xmlns=\"http://tempuri.org/\">"
			sXml += xmlAddSoapPram(CheckedParse(InstitutionsObj.value), "institutionID");
			sXml += xmlAddSoapPram(CheckedParse(DepartmentsObj.value), "departmentID");
			sXml += xmlAddSoapPram(CheckedParse(SemestersObj.value), "semesterID");
			sXml += xmlAddSoapPram(CheckedParse(ExamTypesObj.value), "examType");
			sXml += xmlAddSoapPram(CheckedParse(TeachersObj.value), "teacherID");
			sXml += xmlAddSoapPram(CourseNameObj.value, "courseName");
			sXml += "</GetCourseID>"
			break;
		case "CourseName":
			sXml += "<GetCourseName xmlns=\"http://tempuri.org/\">"
			sXml += xmlAddSoapPram(CheckedParse(InstitutionsObj.value), "institutionID");
			sXml += xmlAddSoapPram(CheckedParse(DepartmentsObj.value), "departmentID");
			sXml += xmlAddSoapPram(CheckedParse(SemestersObj.value), "semesterID");
			sXml += xmlAddSoapPram(CheckedParse(ExamTypesObj.value), "examType");
			sXml += xmlAddSoapPram(CheckedParse(TeachersObj.value), "teacherID");
			sXml += xmlAddSoapPram(CourseIDObj.value, "courseID");
			sXml += "</GetCourseName>"
			break;
		default:
			return 0;
	}
	sXml += "</soap:Body></soap:Envelope>";
	
	xmlHTTP.open("POST", "DropDowns.asmx", true);
	xmlHTTP.setRequestHeader("SOAPAction", "http://tempuri.org/Get" + id);
	xmlHTTP.setRequestHeader("Content-Type", "text/xml; charset=utf-8");
	xmlHTTP.Send(sXml);
	
	var oldValue = ddObj.value;
	ClearDD(ddObj);
	ddObj.options.add(new Option("Loading...", oldValue));
	ddObj.disabled = true;
	
	xmlHTTP.onreadystatechange = function(){
		if (xmlHTTP.readyState == 4){
			//alert(xmlHTTP.responseXML.text);
			SetDDData(ddObj, xmlHTTP.responseXML.selectSingleNode("soap:Envelope/soap:Body").firstChild.firstChild);
			ddObj.disabled = false;
		}
	}
}

function SetDDData(obj, xmlRoot){
	var oldValue = obj.value;
	ClearDD(obj);
	obj.options.add(new Option("[Select]", null));
	for(var i = 0 ; i < xmlRoot.childNodes.length ; i++){
		obj.options.add(new Option(xmlRoot.childNodes[i].childNodes[0].text, xmlRoot.childNodes[i].childNodes[1].text));
	}
	if(obj.AllowOther == "true"){
		obj.options.add(new Option("Other", "Other"));
	}
	if(oldValue != "[Select]" && oldValue != ""){
		obj.value = oldValue;
	}
	if(obj.value == ""){
		obj.value = null;
	}
}

function SetInstitutions(){
	var xmlHTTP = CreateXMLHTTP();
	GetData(xmlHTTP, "Institutions", InstitutionsObj);
}

function SetDepartments(){
	var xmlHTTP = CreateXMLHTTP();
	GetData(xmlHTTP, "Departments", DepartmentsObj);
}

function SetSemesters(){
	var xmlHTTP = CreateXMLHTTP();
	GetData(xmlHTTP, "Semesters", SemestersObj);
}

function SetExamTypes(){
	var xmlHTTP = CreateXMLHTTP();
	GetData(xmlHTTP, "ExamTypes", ExamTypesObj);
}

function SetTeachers(){
	var xmlHTTP = CreateXMLHTTP();
	GetData(xmlHTTP, "Teachers", TeachersObj);
}

function SetCourseID(){
	var xmlHTTP = CreateXMLHTTP();
	GetData(xmlHTTP, "CourseID", CourseIDObj);
}

function SetCourseName(){
	var xmlHTTP = CreateXMLHTTP();
	GetData(xmlHTTP, "CourseName",CourseNameObj);
}

function ClearDD(obj){
	obj.options.innerHTML = "";
}

function Init(){
	SubmitBtnObj.disabled = true;
	SetInstitutions();
	InstitutionsObj.onchange = function(){
		if(CheckedParse(InstitutionsObj.value) > 0){
			DepartmentsObj.disabled = false;
			CourseIDObj.disabled = false;
			CourseNameObj.disabled = false;
			SemestersObj.disabled = false;
			ExamTypesObj.disabled = false;
			TeachersObj.disabled = false;
			SubmitBtnObj.disabled = false;
			SetDepartments();
			SetSemesters();
			SetExamTypes();
			SetTeachers();
			SetCourseID();
			SetCourseName();
		}else{
			SubmitBtnObj.disabled = true;
			DepartmentsObj.disabled = true;
			CourseIDObj.disabled = true;
			CourseNameObj.disabled = true;
			SemestersObj.disabled = true;
			ExamTypesObj.disabled = true;
			TeachersObj.disabled = true;
		}
		if(this.value == "Other"){
			getObject(this.OtherField).value = "";
			getObject(this.OtherField).style.display = "inline";
		}else{
			if(getObject(this.OtherField)){
				getObject(this.OtherField).value = "";
				getObject(this.OtherField).style.display = "none";
			}
		}
	}
	CourseNameObj.onchange = function(){
		SetDepartments();
		SetSemesters();
		SetExamTypes();
		SetTeachers();
		SetCourseID();
	}
	CourseIDObj.onchange = function(){
		SetDepartments();
		SetSemesters();
		SetExamTypes();
		SetTeachers();
		SetCourseName();
	}
	DepartmentsObj.onchange = function(){
		SetSemesters();
		SetExamTypes();
		SetTeachers();
		SetCourseID();
		SetCourseName();
	}
	SemestersObj.onchange = function(){
		SetDepartments();
		SetExamTypes();
		SetTeachers();
		SetCourseID();
		SetCourseName();
	}
	ExamTypesObj.onchange = function(){
		SetDepartments();
		SetSemesters();
		SetTeachers();
		SetCourseID();
		SetCourseName();
	}
	TeachersObj.onchange = function(){
		SetDepartments();
		SetSemesters();
		SetExamTypes();
		SetCourseID();
		SetCourseName();
	}
}

window.onload = function(){
	InstitutionsObj.onchange();
}