/*
ajax.js

*/

// ajax routines for managing navigation & tagging on the web

var debug = 1;
var startTagHTML = "<table><tr><th class=\"tagsTh\" colspan=\"4\">";
var endTagHTML = "&nbsp;</th></tr></table></div>";	

function GetXmlHttpObject() {
	var xmlHttp=null;
	try {
		// Firefox, Opera 8.0+, Safari
		xmlHttp=new XMLHttpRequest();
	}
	catch (e) {
		// Internet Explorer
		try {
			xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
		}
		catch (e) {
			xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  		}
	}
	return xmlHttp;
}

function getTagOptions(level) {
	var key = "";
	var url = "";
	xmlHttp=GetXmlHttpObject();
	if (xmlHttp==null) {
		alert ("Your browser does not support AJAX!");
		return;
	}
	var levelOneTag = document.forms[0].LevelOneTag;
	var levelTwoTag = document.forms[0].LevelTwoTag;
	var levelThreeTag = document.forms[0].LevelThreeTag;
	switch (level) {
		case 1:
			clearSelections(levelThreeTag, "Three");
			clearSelections(levelTwoTag, "Two");
			key = getRadioBtn(levelOneTag);
			if (key==null) {
				key = document.forms[0].LevelOneTag.value;
			}
			frm = "TaggingWebLevelTwo";
			xmlHttp.onreadystatechange=stateChangedLevel1;
			break;
		case 2:
			clearSelections(levelThreeTag, "Three");
			key = getRadioBtn(levelTwoTag);
			frm = "TaggingWebLevelThree";
			xmlHttp.onreadystatechange=stateChangedLevel2;
			break;
	}
	url = globalDb + frm + "?readform&key=" + escape(key) + "&" + Math.random();
	xmlHttp.open("GET",url,true);
	xmlHttp.send(null);
}

function clearSelections(radiogrp, strLevel) {
	if (radiogrp!=null) {	
		for (var i=0;i<radiogrp.length;i++) {
			radiogrp[i].checked = false;
		}
		returnHTML = "<div class=\"wrapper\" id=\"level"+strLevel+"TagsWrapper\">" + startTagHTML + endTagHTML;
		eval("var level"+strLevel+" = document.getElementById(\"level"+strLevel+"TagsWrapper\");");
		eval("level"+strLevel+".className = 'hideTags';");
		eval("level"+strLevel+".innerHTML = returnHTML;");
	}
}

function getRadioBtn(radiogrp) {
	for (var i=0;i<radiogrp.length;i++) {
		if (radiogrp[i].checked == true) {
			var option = radiogrp[i];
			return option.value;
		}
	}
}

function stateChangedLevel1() { 
	if (xmlHttp.readyState==4) {
		var returnValue = xmlHttp.responseText;
		var levelTwo = document.getElementById("levelTwoTagsWrapper");
		levelTwo.className = "showTags";
		levelTwo.innerHTML = returnValue;
	}
}

function stateChangedLevel2() { 
	if (xmlHttp.readyState==4) { 
		var returnValue = xmlHttp.responseText;
		var levelThree = document.getElementById("levelThreeTagsWrapper");
		levelThree.className = "showTags";
		levelThree.innerHTML = returnValue;
	}
}

function toggleExpandCollapse(section) {
	var head = document.getElementById(section+"heading");
	var tab = document.getElementById(section+"table");
	var img = document.getElementById(section+"image");
	var headClass="expanded";
	var tabClass="chkbx showTags";
	var imgSrc = "minus.jpg";

	if (head.className==headClass) {
		headClass="collapsed";
		tabClass = "chkbx hideTags";
		imgSrc = "plus.jpg";
	}
	head.className = headClass;
	tab.className = tabClass;
	img.src = globalDb+imgSrc;
}

/* AJAX Routines for creating view modules */
function getView(divName,url,format){
	var myAjax = new Ajax.Request(
	url, 
	{
		method: "get", 
		onComplete: function(xmlDoc) {
			var viewentry="";
			var returnHTML="";
			var entries = xmlDoc.responseXML.getElementsByTagName("viewentry");
			for (var i=0; i<entries.length; i++) {
				columns = entries[i].getElementsByTagName("text");
				viewentry = columns.item(0).firstChild.nodeValue;
				if (format=="1") viewentry = leftBack(columns.item(0).firstChild.nodeValue," (")+rightBack(columns.item(0).firstChild.nodeValue,")");
				returnHTML+=viewentry;
			}
			$(divName).innerHTML = "<ul>"+returnHTML+"</ul>";
		}
	});
} 

// Helper functions for module ajax calls
function getQS(url, name) {
	return "1";
}


function getNotesView(divName,viewName,count,restricttocategory,format) {
	/*
	getNotesView Parameters

		divName			the id of the div to return the results
		viewName			the name of the view to lookup
		count				number of documents to return
		restricttocategory	display a single category in a view
		format			display format
	*/

	var url = globalDb+viewName+"?ReadViewEntries";
	if(restricttocategory!="") url+="&restricttocategory="+restricttocategory;

	if(count>0) url+="&count="+count;
	url+="&rnd="+random;

	getView(divName,url,format);
}

function leftBack(fullString, startString) {
	var storeString = fullString;

	var position = fullString.indexOf(startString);
	var tmp = position;

	while (position>-1) {
		fullString = fullString.substring(position+1,fullString.length);
		position = fullString.indexOf(startString);
		tmp = tmp+position+1;
	}
	return (storeString.substring(0,tmp));
}
function rightBack(fullString, startString) {
	startString += "";
	var position = fullString.indexOf(startString);
	if (startString != "" && position>-1) {
		while (position>-1) {
			fullString = fullString.substring(position+startString.length,fullString.length);
			position = fullString.indexOf(startString);
		}
		return (fullString);
	} else {
		return ("");
	}
}


