//----------------------------------------------------
//---------------------------------------------------- GENERAL SCRIPTS: DO NOT ALTER ---
//---------------------------------------------------- exception: if you have a new out put type that requires full content in the summary, state so on line 39

// 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, "*");
			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];
			}
			j++;
			} while(j < queryData.length);
			
		if (outputType == "enhancedSummary" || outputType == "fullContent" || outputType == "showContent" ||outputType == "pictureShortSummary") {
			query = query + "&includeContent=true";
		}
		if(isToggledExternal == "true"){
			dataURL = "inc/php/dataExOnly.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 = "";
	
	if (storedData[elementID].outputType != "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);
			
		}
	}
	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;
	buildQuery(dataModel);
}

//----------------------------------------------------
//---------------------------------------------------- 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";
	}
}