//----------------------------------------------------
//---------------------------------------------------- GENERAL SCRIPTS: DO NOT ALTER ---
//----------------------------------------------------

// stored attributes from datamodel to be reused when parsing XML or JSON documents
var storedData={};
var isToggledExternal = "false";

// Reads dataModel, builds data request, stores reuasable data
function buildQuery(dataModel){

	var i=0;
	
	do {
		var query = "";
		var archiveQuery = "";
		var elementID = dataModel[i][0];
		var queryData = dataModel[i][1];
		var outputType = dataModel[i][2];
		var alternateData = {};
		var j = 0;
		
		do{
			queryType = queryData[j][0];
			queryURI = queryData[j][1].replace(/&/g, "@");
			queryURI = queryURI.replace(/=/g, "*");
			if(queryType == "plotQuery"){
				query = query + "&" + queryType +"=" + plotBaseURL + queryURI; 
			}else{
				query = query + "&" + queryType +"=" + queryURI;
			}
			archiveQueryURI = queryURI.replace(/maxRows\*(.*)\@/, "");
			archiveQuery = archiveQuery + "['" + queryType +"','" + archiveQueryURI + "']";
			if(queryData[j+1]){
				archiveQuery = archiveQuery + ",";
			}
			if(queryData[j][2]){
				alternateData[queryType] = queryData[j][2];
			}else{
				alternateData[queryType] = "NONE";
			}
			
			j++;
			} while(j < queryData.length);
			
		if (outputType == "enhancedSummary" || outputType == "fullContent" || outputType == "showContent") {
			query = query + "&includeContent=true";
		}
		if(isToggledExternal == "true"){
			dataURL = baseURL+"inc/php/dataExOnly.php?" + query;
		}else if(queryType == "plotQuery"){
			dataURL = baseURL+"inc/php/plotData.php?" + query;
		}else{
			dataURL = baseFeed + query;
		}
		storedData[elementID] = [outputType, archiveQuery, alternateData];
		callApplication(elementID, dataURL, designConfig.docType);
		i++;
	} while (i < dataModel.length);
	determinCall();
}

// Ajax call, returns XML (eventually JSON as well)
function callApplication(elementID, dataURL, docType){
	var xhrRec = xhrRequest(docType);
	xhrRec.open('GET', dataURL, true);
	
	var statusNode = "";
	var storedText = "";
	
	if(designConfig.displayStatus == "true"){
		var foundPathStatus = getDisplayPath(elementID, displayPaths.statusPath);
		statusNode = designLocate(foundPathStatus);
		storedText = statusNode.innerHTML;
	}
	
	xhrRec.onreadystatechange = function() {
		if (xhrRec.readyState == 4 && xhrRec.status == 200) {
			//	Clear status
			statusNode.innerHTML = storedText;
			if(docType == "xml"){
				parseXML(elementID,xhrRec.responseXML);
			} else if(docType == "json"){
				parseJSON(elementID,xhrRec.responseText);
			}
		}else{
			//	display status
			statusNode.innerHTML = "Gathering Data: "+25 *xhrRec.readyState+"% of " + storedText;
		};
	};
	xhrRec.send(null);
}

//----------------------------------------------------
//---------------------------------------------------- PARSE AND DISPLAY XML DOC ---
//----------------------------------------------------
function parseXML(elementID, xmlDoc){
	var designHTML = "";
	var editingFeatures = "";
	
/// 		----- PARSE SCIM XML----
//----------------------------------------------------
	if (storedData[elementID][0] != "empty") {
		var allItems = xmlDoc.getElementsByTagName("item");
		
///			----- POPULATE VARIABLES WITH XML CONTENT----
		for(var i = 0; i < allItems.length; i++) {
			//-- vars to hold individual item elements
			var itemID = "";
			var title = "";
			var public = "";
			var author = "";
			var dateLastModified = "";
			var userCanEdit = "";
			var summary = "";
			var content = "";
			
			thisItem = allItems[i];
			public = thisItem.getElementsByTagName("public")[0].firstChild.nodeValue;
			if (!public) {	
				continue;
			}
			itemID = thisItem.getElementsByTagName("id")[0].firstChild.nodeValue;
			title = thisItem.getElementsByTagName("title")[0].firstChild.nodeValue;
			author = thisItem.getElementsByTagName("author")[0].firstChild.nodeValue;
			dateLastModified = thisItem.getElementsByTagName("dateLastModified")[0].firstChild.nodeValue;
			try {
				userCanEdit = thisItem.getElementsByTagName("userCanEdit")[0].firstChild.nodeValue;
			} catch(err) {
				userCanEdit = false;
			}
			summary = thisItem.getElementsByTagName("summary")[0].firstChild.nodeValue;
			try {
				if (window.ActiveXObject) {
					content = thisItem.getElementsByTagName("content")[0].firstChild.nodeValue;
				} else {
					content = thisItem.getElementsByTagName("content")[0].textContent;
				}
			} catch(err) {}
			
			var dataHash = {'itemID': itemID, 'title': title, 'public': public, 'author': author, 'dateLastModified': dateLastModified, 'userCanEdit': userCanEdit, 'summary': summary, 'content':content};
			
			if(userCanEdit == "true"){
				editingFeatures = "true";
			}
			
			designHTML += dataDisplay(elementID, dataHash);
			
		}
	}
//----------------------------------------------------	
// 		----- PARSE PLOT XML----
//----------------------------------------------------	
	if (storedData[elementID][2].plotQuery) {
// 		----- PARSE TEAM XML----	
		if(storedData[elementID][1].match("publicTeam")){
			var theTeam = xmlDoc.getElementsByTagName("team");
///			-----GLOBAL TEAM CONTENT ----	
			teamID = theTeam[0].getAttribute("id");
			
			if(theTeam[0].getElementsByTagName("name")[0].firstChild){teamName = theTeam[0].getElementsByTagName("name")[0].firstChild.nodeValue;}else{teamName = "";}
			
			if(theTeam[0].getElementsByTagName("description")[0].firstChild){teamDescription = theTeam[0].getElementsByTagName("description")[0].firstChild.nodeValue;}else{teamDescription = "";}
			
			if(theTeam[0].getElementsByTagName("email")[0].firstChild){teamEmail = theTeam[0].getElementsByTagName("email")[0].firstChild.nodeValue;}else{teamEmail = "";}
			
			if(theTeam[0].getElementsByTagName("url")[0].firstChild){teamURL = theTeam[0].getElementsByTagName("url")[0].firstChild.nodeValue;}else{teamURL = "";}
			
			if(theTeam[0].getElementsByTagName("organization")[0]){teamOrganizationID = theTeam[0].getElementsByTagName("organization")[0].getAttribute("id");}else{teamOrganizationID = 'none';}
			
			if(theTeam[0].getElementsByTagName("organization")[0].firstChild){teamOrganization = theTeam[0].getElementsByTagName("organization")[0].firstChild.nodeValue;}else{teamOrganization = 'none'}
			
			
			var teamHash = {'teamID': teamID, 'teamName': teamName, 'teamDescription': teamDescription, 'teamEmail': teamEmail, 'teamURL': teamURL, 'teamOrganizationID': teamOrganizationID, 'teamOrganization': teamOrganization};
			
			designHTML += dataDisplay(elementID, teamHash);
			
			///			-----MULTIPLE TEAM CONTENT ----
			var theMembers = theTeam[0].getElementsByTagName("member");
			for(var m = 0; m < theMembers.length; m++) {
				var thisMember = theMembers[m];
				
				var memberID = thisMember.getElementsByTagName("person")[0].getAttribute("id");
				var memberSort = thisMember.getElementsByTagName("sort")[0].firstChild.nodeValue;
				var memberRole = thisMember.getElementsByTagName("teamRoleTitle")[0].firstChild.nodeValue;
				var memberNameLotus = thisMember.getElementsByTagName("name")[0].firstChild.nodeValue;
				var memberName = thisMember.getElementsByTagName("displayName")[0].firstChild.nodeValue;
				var memberEmail = thisMember.getElementsByTagName("email")[0].firstChild.nodeValue;
				var memberOfficeNum = thisMember.getElementsByTagName("officePhone")[0].firstChild.nodeValue;
				
				var memberHash = {'memberID': memberID, 'memberSort': memberSort, 'memberRole': memberRole, 'memberNameLotus': memberNameLotus, 'memberName': memberName, 'memberEmail': memberEmail, 'memberOfficeNum': memberOfficeNum };
				
				if(m == theMembers.length-1){ 
					memberHash.flag = 'last'; 
				}else{
					memberHash.flag = '';
				}
				
				designHTML += dataDisplay(elementID, memberHash);
			
			}
		}
		// 		----- PARSE ORGANIZATION XML----	
		if(storedData[elementID][1].match("publicOrganization")){
			var theOrg = xmlDoc.getElementsByTagName("organization");
			if(theOrg){
///			-----GENERAL ORGANIZATION CONTENT ----	
				var orgID = theOrg[0].getAttribute("id");
				var orgName = "";
				var orgDescription = "";
				var orgEmail = "";
				var orgURL = "";
				
				if(theOrg[0].getElementsByTagName("description")[0].firstChild){ orgName = theOrg[0].getElementsByTagName("description")[0].firstChild.nodeValue; }
				
				if(theOrg[0].getElementsByTagName("description")[0].firstChild){ orgDescription = theOrg[0].getElementsByTagName("description")[0].firstChild.nodeValue; }
				
				if(theOrg[0].getElementsByTagName("email")[0].firstChild){ orgEmail = theOrg[0].getElementsByTagName("email")[0].firstChild.nodeValue; }
				
				if(theOrg[0].getElementsByTagName("url")[0].firstChild){ orgURL = theOrg[0].getElementsByTagName("url")[0].firstChild.nodeValue; }
				
				
	///			-----MAIL ADDRESS ORGANIZATION ----			
				var mailAddress = {};
				
				if(theOrg[0].getElementsByTagName("mailAddress")[0].getElementsByTagName("line1")[0].firstChild){mailAddress.street1 = theOrg[0].getElementsByTagName("mailAddress")[0].getElementsByTagName("line1")[0].firstChild.nodeValue;}else{mailAddress.street1 = "";}
				
				if(theOrg[0].getElementsByTagName("mailAddress")[0].getElementsByTagName("line2")[0].firstChild){mailAddress.street2 = theOrg[0].getElementsByTagName("mailAddress")[0].getElementsByTagName("line2")[0].firstChild.nodeValue;}else{mailAddress.street2 = "";}
				
				if(theOrg[0].getElementsByTagName("mailAddress")[0].getElementsByTagName("city")[0].firstChild){mailAddress.city = theOrg[0].getElementsByTagName("mailAddress")[0].getElementsByTagName("city")[0].firstChild.nodeValue;}else{mailAddress.city = "";}
				
				if(theOrg[0].getElementsByTagName("mailAddress")[0].getElementsByTagName("state")[0].firstChild){mailAddress.state = theOrg[0].getElementsByTagName("mailAddress")[0].getElementsByTagName("state")[0].firstChild.nodeValue;}else{mailAddress.state = "";}
				
				if(theOrg[0].getElementsByTagName("mailAddress")[0].getElementsByTagName("zip")[0].firstChild){mailAddress.zip = theOrg[0].getElementsByTagName("mailAddress")[0].getElementsByTagName("zip")[0].firstChild.nodeValue;}else{mailAddress.zip = "";}
				
				if(theOrg[0].getElementsByTagName("mailAddress")[0].getElementsByTagName("country")[0].firstChild){mailAddress.country = theOrg[0].getElementsByTagName("mailAddress")[0].getElementsByTagName("country")[0].firstChild.nodeValue;}else{mailAddress.country = "";}
	
	///			-----STREET ADDRESS ORGANIZATION ----	
				var streetAddress = {};
				
				if(theOrg[0].getElementsByTagName("streetAddress")[0].getElementsByTagName("line1")[0].firstChild){streetAddress.street1 = theOrg[0].getElementsByTagName("streetAddress")[0].getElementsByTagName("line1")[0].firstChild.nodeValue;}else{streetAddress.street1 = "";}
				
				if(theOrg[0].getElementsByTagName("streetAddress")[0].getElementsByTagName("line2")[0].firstChild){streetAddress.street2 = theOrg[0].getElementsByTagName("streetAddress")[0].getElementsByTagName("line2")[0].firstChild.nodeValue;}else{streetAddress.street2 = "";}
				
				if(theOrg[0].getElementsByTagName("streetAddress")[0].getElementsByTagName("city")[0].firstChild){streetAddress.city = theOrg[0].getElementsByTagName("streetAddress")[0].getElementsByTagName("city")[0].firstChild.nodeValue;}else{streetAddress.city = "";}
				
				if(theOrg[0].getElementsByTagName("streetAddress")[0].getElementsByTagName("state")[0].firstChild){streetAddress.state = theOrg[0].getElementsByTagName("streetAddress")[0].getElementsByTagName("state")[0].firstChild.nodeValue;}else{streetAddress.state = "";}
				
				if(theOrg[0].getElementsByTagName("streetAddress")[0].getElementsByTagName("zip")[0].firstChild){streetAddress.zip = theOrg[0].getElementsByTagName("streetAddress")[0].getElementsByTagName("zip")[0].firstChild.nodeValue;}else{streetAddress.zip = "";}
				
				if(theOrg[0].getElementsByTagName("streetAddress")[0].getElementsByTagName("country")[0].firstChild){streetAddress.country = theOrg[0].getElementsByTagName("streetAddress")[0].getElementsByTagName("country")[0].firstChild.nodeValue;}else{streetAddress.country = "";}
				
				var orgHash = {'orgID': orgID, 'orgName': orgName, 'orgDescription': orgDescription, 'orgEmail': orgEmail, 'orgURL': orgURL, 'mailAddress': mailAddress, 'streetAddress': streetAddress};
				
				designHTML += dataDisplay(elementID, orgHash);
			}
				
		}
	}	
	populateDesign(elementID, designHTML, editingFeatures);
}

function parseJSON(elementID, jsonDoc){
	alert("JSON parse not yet implemented");
}

//-- POPULATES DIV ELEMENTS
function populateDesign(elementID, designHTML, editingFeatures){
	if(designConfig.expandDesign == "true"){
		 expandedDesign(elementID, designHTML);
		 //addEditDisplays("inc/php/editDisplay.php?toggleDisplay="+isToggledExternal);
	} else {
		document.getElementById(elementID).innerHTML = designHTML;
		addEditDisplays("inc/php/editDisplay.php?toggleDisplay="+isToggledExternal);
	}
}

// function to Toggle between external and internal view
function toggleView(theDisplay) {
	isToggledExternal = theDisplay;
	addDesignConstants();
	buildQuery(dataModel);
	initialize();
}

//----------------------------------------------------
//---------------------------------------------------- HELPER SCRIPTS ---
//----------------------------------------------------

// removes HTML images
function extractImg(html) {
	var regex = /<img[^>]*>/g;
	imgtags = html.match(regex);
	if (imgtags == null) {
		return;
	} else {
		return imgtags[0];	
	}
}
// cleans text of HTML tags
function stripHTML(oldString) {
	return oldString.replace(/<\S[^><]*>/g, "");
}
// creates an XMLHTTPRequest object
function xhrRequest(type) {
	var xhrSend;
	if (!type) {
		type = 'text';
	}
	if (window.ActiveXObject) {
		try {
			xhrSend = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e) {
			try {
				xhrSend = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e) {}
		}
	} else if (window.XMLHttpRequest) {
		xhrSend = new XMLHttpRequest();
		if (xhrSend.overrideMimeType) {
			xhrSend.overrideMimeType('text/' + type);
		}
	}
	return (xhrSend);
}

function getQueryParam(name) {
	name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	var regexS = "[\\?&]"+name+"=([^&#]*)";
	var regex = new RegExp( regexS );
	var results = regex.exec( window.location.href );
	if(results == null) {
		return "";
	} else {
		return results[1];
	}
}


//returns elements in a page with a specific class
function getElementsByClass(searchClass,node,tag) {
	var classElements = new Array();
	if ( node == null )
		node = document;
	if ( tag == null )
		tag = '*';
	var els = node.getElementsByTagName(tag);
	var elsLen = els.length;
	var pattern = new RegExp("(^|\\\\s)"+searchClass+"(\\\\s|$)");
	for (i = 0, j = 0; i < elsLen; i++) {
		if ( pattern.test(els[i].className) ) {
			classElements[j] = els[i];
			j++;
		}
	}
	return classElements;
}

// expands and collapses list with class "hiddenItem"

// --------CHANGES TO BE MADE
// no need for parentElement??
//combine with showTeam, make class a param
//will null ever NOT be null??


function showItem(elementID,parentElement) {
	var itemDIVs = getElementsByClass("hiddenItem",null,"div");
	var theElement = document.getElementById(elementID);
	for (var i = 0; i < itemDIVs.length; i++) {
		if(itemDIVs[i] != theElement){
			itemDIVs[i].style.display = "none";
		}
	}	
	if (theElement.style.display == "") {
		theElement.style.display = "none";
	} else {
		theElement.style.display = "";
	}
}


function showTeam(elementID) {
	var itemDIVs = getElementsByClass("hiddenTeam",null,"div");
	for (var i = 0; i < itemDIVs.length; i++) {
		if (elementID != itemDIVs[i].id) {
			itemDIVs[i].style.display = "none";
		}
	}
	var theElement = document.getElementById(elementID);
	if (theElement.style.display == "block") {
		theElement.style.display = "none";
	} else {
		theElement.style.display = "block";
	}
}

function getMap(elementID,OrgClass) {
	if (!OrgClass) {
		OrgClass = "CR";
	}
	document.getElementById(elementID).src = baseURL+"inc/php/map.php?OrgClass="+OrgClass;
}