var selectedSection = 0;

function replaceLinkWithPanel(linkelem, panelid) {
	linkelem.style.display = "none";
	document.getElementById(panelid).style.display = "block";
}

/* SITE ADMIN PANEL */

Ajax.Responders.register({
	onComplete:function(request, transport, json) {
			if (transport.status == 403) {
				window.location.href = 'login.php?go=' + encodeURIComponent(window.location.href) + "&error=timeout";
			}
		}
});


function drawTiers() {
	new Ajax.Updater('tiersControl', 'drawTiers.ajax.php');
}

function drawTree(sectionID) {
	if (!sectionID) {
		if (selectedSection) {
			new Ajax.Updater('treeControl', 'drawTree.ajax.php',
				{parameters:	{id:	selectedSection}}
			);
		} else {
			new Ajax.Updater('treeControl', 'drawTree.ajax.php');
		}
	} else {
		selectedSection = sectionID;
		new Ajax.Updater('treeControl', 'drawTree.ajax.php',
			{parameters:	{id:	sectionID}}
		);
	}
}

/* TIER ADMIN PANEL */

function promptRename(tierSpanID, tierID) {
	if ($(tierSpanID).firstChild.nodeValue) {
		var tierName = prompt("Rename this tier to:", $(tierSpanID).firstChild.nodeValue);
		if (tierName) {
			renameTier(tierID, tierName);
		}
	}
	return false;
}

function promptAddTier() {
	var tierName = prompt("Name of the new tier:");
	if (tierName) {
		addTier(tierName);
	}
	return false;
}

function moveTierUp(tierID) {
	new Ajax.Request('moveTierUp.ajax.php', {
		onSuccess:	function(transport) {
					drawTiers();
				},
		parameters:	{id:	tierID}
		});
	return false;
}

function moveTierDown(tierID) {
	new Ajax.Request('moveTierDown.ajax.php', {
		onSuccess:	function(transport) {
					drawTiers();
				},
		parameters:	{id:	tierID}
		});
	return false;
}

function addTier(tierName) {
	new Ajax.Request('addTier.ajax.php', {
		onSuccess:	function(transport) {
					drawTiers();
				},
		parameters:	{name:	tierName}
		});
	return false;
}

function renameTier(tierID, tierName) {
	new Ajax.Request('renameTier.ajax.php', {
		onSuccess:	function(transport) {
					drawTiers();
				},
		parameters:	{id:	tierID, name:	tierName}
		});
	return false;
}

function deleteTier(tierID) {
	new Ajax.Request('deleteTier.ajax.php', {
		onSuccess:	function(transport) {
					drawTiers();
				},
		parameters:	{id:	tierID}
		});
	return false;
}

/* TREE ADMIN PANEL */

function promptRenameSection(sectionElemID, sectionID) {
	if ($(sectionElemID).firstChild.nodeValue) {
		var sectionName = prompt("Rename this section to:", $(sectionElemID).firstChild.nodeValue);
		if (sectionName) {
			renameSection(sectionID, sectionName);
		}
	}
	return false;
}

function promptAddSection(parentID) {
	var sectionName = prompt("Name of the new section:");
	if (sectionName) {
		addSection(parentID, sectionName);
	}
	return false;
}

function moveSectionUp(sectionID) {
	new Ajax.Request('moveSectionUp.ajax.php', {
		onSuccess:	function(transport) {
					drawTree();
				},
		parameters:	{id:	sectionID}
		});
	return false;
}

function moveSectionDown(sectionID) {
	new Ajax.Request('moveSectionDown.ajax.php', {
		onSuccess:	function(transport) {
					drawTree();
				},
		parameters:	{id:	sectionID}
		});
	return false;
}

function addSection(parentID, sectionName) {
	new Ajax.Request('addSection.ajax.php', {
		onSuccess:	function(transport) {
					drawTree();
				},
		parameters:	{pid:	parentID, name:	sectionName}
		});
	return false;
}

function confirmSectionDelete() {
	return confirm('Are you sure you want to delete this section?  All sub-sections will be deleted as well, and the user enrollment for the deleted sections will be cleared.');
}

function deleteSection(sectionID) {
	new Ajax.Request('deleteSection.ajax.php', {
		onSuccess:	function(transport) {
					drawTree();
				},
		parameters:	{id:	sectionID}
		});
	return false;
}

function renameSection(sectionID, sectionName) {
	new Ajax.Request('renameSection.ajax.php', {
		onSuccess:	function(transport) {
					drawTree();
				},
		parameters:	{id:	sectionID, name:	sectionName}
		});
	return false;
}

function attachPage(sectionID) {
	new Ajax.Request('attachPage.ajax.php', {
		onSuccess:	function(transport) {
					drawTree();
				},
		parameters:	{id:	sectionID}
		});
	return false;
}

function detachPage(sectionID) {
	new Ajax.Request('detachPage.ajax.php', {
		onSuccess:	function(transport) {
					drawTree();
				},
		parameters:	{id:	sectionID}
		});
	return false;
}

function setSectionPublic(sectionID) {
	new Ajax.Request('setSectionPublic.ajax.php', {
		onSuccess:	function(transport) {
					drawTree();
				},
		parameters:	{id:	sectionID}
		});
	return false;
}

function removeSectionPublic(sectionID) {
	new Ajax.Request('removeSectionPublic.ajax.php', {
		onSuccess:	function(transport) {
					drawTree();
				},
		parameters:	{id:	sectionID}
		});
	return false;
}

function setSectionOptional(sectionID) {
	new Ajax.Request('setSectionOptional.ajax.php', {
		onSuccess:	function(transport) {
					drawTree();
				},
		parameters:	{id:	sectionID}
		});
	return false;
}

function removeSectionOptional(sectionID) {
	new Ajax.Request('removeSectionOptional.ajax.php', {
		onSuccess:	function(transport) {
					drawTree();
				},
		parameters:	{id:	sectionID}
		});
	return false;
}

function drawUserCourseList(userid, enrolledelem, availableelem) {
	new Ajax.Request('getEnrolledCourses.ajax.php', {
		onSuccess:	function(transport) {
					//alert('Enrolled response: ' + transport.responseText);
					var enrolledCourses = transport.responseText.evalJSON();

					if (enrolledCourses.size() > 0) {
						$(enrolledelem).update();
						//alert('After enrolled clear: ' + $(enrolledelem).innerHTML);
						enrolledCourses.each(function(item) {
							//alert("Item: " + item.name + ", ID: " + item.course_id);
							op = Builder.node("a", {"onclick":  "removeCourse(" + userid + ", " + item.course_id + ", '" + enrolledelem + "', '" + availableelem + "')", "class": "tinylinkbutton"}, item.name);
							$(enrolledelem).appendChild(op);
						});
						//alert('After enrolled buttons: ' + $(enrolledelem).innerHTML);
					} else {
						$(enrolledelem).update("(no courses)");
						//alert('After no enrolled: ' + $(enrolledelem).innerHTML);
					}
				},
		onFailure:	function(transport) {
					alert('Problem?');
				},
		parameters:	{id:	userid}
		});

	new Ajax.Request('getAvailableCourses.ajax.php', {
		onSuccess:	function(transport) {
					//alert(transport.responseText);
					var availableCourses = transport.responseText.evalJSON();

					if (availableCourses.size() > 0) {
						$(availableelem).update();
						//alert('After available clear: ' + $(availableelem).innerHTML);
						availableCourses.each(function(item) {
							op = Builder.node("a", {"onclick":  "addCourse(" + userid + ", " + item.course_id + ", '" + enrolledelem + "', '" + availableelem + "')", "class": "tinylinkbutton"}, item.name);
							$(availableelem).appendChild(op);
						});
						//alert('After available buttons: ' + $(availableelem).innerHTML);
					} else {
						$(availableelem).update("(no courses)");
						//alert('After no available: ' + $(availableelem).innerHTML);
					}
				},
		onFailure:	function(transport) {
					alert('Problem?');
				},
		parameters:	{id:	userid}
		});
}

function addCourse(userid, courseid, enrolledelem, availableelem) {
	new Ajax.Request('addUserCourse.ajax.php', {
		onSuccess:	function(transport) {
					drawUserCourseList(userid, enrolledelem, availableelem);
				},
		parameters:	{uid:	userid, cid:	courseid}
		});
}

function removeCourse(userid, courseid, enrolledelem, availableelem) {
	new Ajax.Request('removeUserCourse.ajax.php', {
		onSuccess:	function(transport) {
					drawUserCourseList(userid, enrolledelem, availableelem);
				},
		parameters:	{uid:	userid, cid:	courseid}
		});
}

function drawRegions(groupid, regionelem, stateelem, countyelem) {
	new Ajax.Updater(regionelem, 'drawRegions.ajax.php', {
		parameters: { gid: groupid, relem: regionelem, selem: stateelem, celem: countyelem }
	});
}

function addCounty(groupid, countyid, regionelem, stateelem, countyelem) {
	new Ajax.Request('addCounty.ajax.php', {
		onSuccess:	function(transport) {
					drawRegions(groupid, regionelem, stateelem, countyelem);
					$(countyelem).update('&nbsp;');
					getLeftoverStatesDropdown(stateelem, countyelem, groupid);
				},
		parameters:	{gid:	groupid, cid:	countyid}
		});
}

function deleteCounty(groupid, countyid, regionelem, stateelem, countyelem) {
	new Ajax.Request('deleteCounty.ajax.php', {
		onSuccess:	function(transport) {
					drawRegions(groupid, regionelem, stateelem, countyelem);
					$(countyelem).update('&nbsp;');
					getLeftoverStatesDropdown(stateelem, countyelem, groupid);
				},
		parameters:	{gid:	groupid, cid:	countyid}
		});
}

function getLeftoverStatesDropdown(parentelem, countyelem, groupid) {
	new Ajax.Request('getStates.ajax.php', {
		onSuccess:	function(transport) {
					var states = transport.responseText.evalJSON();
					if (states.size() == 0) {
						return;
					}

					var optionsList = $A();

					op = Builder.node('option', {value: '#'}, '-- select state --');
					optionsList.push(op)

					states.each(function(item) {
						//alert(item.state);
						op = Builder.node('option', {value: item.state}, item.state);
						optionsList.push(op);
					});
					var stateSelect = Builder.node('select', {id: 'states', onchange: "getLeftoverCountiesDropdown(this.value, '" + countyelem + "', " + groupid + ");"}, optionsList);
					$(parentelem).update(stateSelect);
					$('states').selectedIndex = 0;
				},
		onFailure:	function(transport) {
					//alert('Had a problem?'); 
				},
		parameters:	{gid:	groupid}
		});
}

function getLeftoverCountiesDropdown(state, parentelem, groupid) {
	new Ajax.Request('getCounties.ajax.php', {
		onSuccess:	function(transport) {
					var counties = transport.responseText.evalJSON();
					if (counties.size() == 0) {
						return;
					}

					var optionsList = $A();

					op = Builder.node('option', {value: '#'}, '-- select county --');
					optionsList.push(op)

					counties.each(function(item) {
						//alert(item.county_id);
						op = Builder.node('option', {value: item.county_id}, item.county);
						optionsList.push(op);
					});
					var countySelect = Builder.node('select', {id: 'counties'}, optionsList);
					$(parentelem).update(countySelect);
					$('counties').selectedIndex = 0;
				},
		onFailure:	function(transport) {
					//alert('Had a problem?'); 
				},
		parameters:	{st:	state, gid:	groupid}
		});
}

function getCountiesDropdown(state, parentelem, frame_name) {
	var is_frame = 0;

	new Ajax.Request('getCounties.ajax.php', {
		onSuccess:	function(transport) {
					if (frames[frame_name]) {
						is_frame = 1;
					}

					var counties = transport.responseText.evalJSON();
					if (counties.size() == 0) {
						return;
					}

					var optionsList = $A();

					op = Builder.node('option', {value: '#'}, '-- select county --');
					optionsList.push(op)

					counties.each(function(item) {
						//alert(item.county_id);
						if (is_frame) {
							op = Builder.node('option', {value: 'orglist.php?c=' + item.county_id + '&quiet'}, item.county);
						} else {
							op = Builder.node('option', {value: 'orglist.php?c=' + item.county_id}, item.county);
						}
						optionsList.push(op);
					});
					if (is_frame) {
						var countySelect = Builder.node('select', {id: 'counties', onchange: "goToDropdownPage($('counties'), '" + frame_name + "');"}, optionsList);
					} else {
						var countySelect = Builder.node('select', {id: 'counties'}, optionsList);
					}
					$(parentelem).update(countySelect);
					$('counties').selectedIndex = 0;
				},
		onFailure:	function(transport) {
					//alert('Had a problem?'); 
				},
		parameters:	{st:	state}
		});
}

function goToDropdownPage(drop_down, frame_name) {
	var number = drop_down.selectedIndex;
	if (number) {
		if (frames[frame_name]) {
			$(frame_name).show();
			frames[frame_name].location.href = drop_down.options[number].value;
		} else {
			location.href = drop_down.options[number].value;
		}
	}
}

function confirmUserDelete() {
	return confirm("Are you sure you want to delete this user?  All of the user's progress / test answers will be lost.");
}

function confirmGroupDelete() {
	return confirm("Are you sure you want to delete this group?  The group information, logo, etc. wil be lost.\n\nNOTE: The group must be empty (ie. no users)");
}

var Popup = {
  open: function(options)
  {
    this.options = {
      url: '#',
      width: 600,
      height: 500,
      name:"_blank",
      location:"no",
      menubar:"no",
      toolbar:"no",
      status:"yes",
      scrollbars:"yes",
      resizable:"yes",
      left:"",
      top:"",
      normal:false
    }
    Object.extend(this.options, options || {});

    if (this.options.normal){
        this.options.menubar = "yes";
        this.options.status = "yes";
        this.options.toolbar = "yes";
        this.options.location = "yes";
    }

    this.options.width = this.options.width < screen.availWidth?this.options.width:screen.availWidth;
    this.options.height=this.options.height < screen.availHeight?this.options.height:screen.availHeight;
    var openoptions = 'width='+this.options.width+',height='+this.options.height+',location='+this.options.location+',menubar='+this.options.menubar+',toolbar='+this.options.toolbar+',scrollbars='+this.options.scrollbars+',resizable='+this.options.resizable+',status='+this.options.status
    if (this.options.top!="")openoptions+=",top="+this.options.top;
    if (this.options.left!="")openoptions+=",left="+this.options.left;
    window.open(this.options.url, this.options.name,openoptions );
    return false;
  }
}

