
/*
	If there is no String prototype currently in use,
	create one and define it as follows
*/

if(!String.prototype.trim){

	String.prototype.trim = function() {
	
		return this.replace(/^\s\s*/, '').replace(/\s\s*$/, '');	
	
	}

}




/*
	Include this prototype declaration to 
	include the use of the filter function 
	for IE browsers
*/
if (!Array.prototype.filter){  
	  Array.prototype.filter = function(fun){    
		var len = this.length;    
		if (typeof fun != "function"){
			throw new TypeError();
		}
		
		var res = new Array();    
		var thisp = arguments[1];    
		for (var i = 0; i < len; i++){
			if (i in this){        
				var val = this[i]; // in case fun mutates this        
				if (fun.call(thisp, val, i, this)){
					res.push(val);
				}
			}    
		}    
		return res;  
	};
}


/*
	Define and initialize the pageState object
*/
function pageState(){

	/*
		Variable to store what direction the sorting is in,
		initialize to sort ascending
	*/
	this.sortAscending = true;
	
	/*
	 * Number of records that will appear on a single page
	 */
	this.numberOfRecordsPerPage = 10;
	
	/*
	 * Number of pagination numbers to display
	 * 
	 * i.e.
	 * 
	 * if displayRange = 5
	 *  3 4 5 6 7 Next>
	 */
	this.displayRange = 10;
	
	/*
	 * Number of filter choices to display before displaying the 
	 * show more-> indicator
	 */
	this.filterDisplayRange = 5;
				
	/*
		This binding information looks like
		
		{'column1':'formname'.......}
		
		generic column name : specific column name
		
	*/					 	
	this.columnBinding =  null;
	
	/*
		This binding information looks like
		
		{'formname':'Name'.......}
		
		column name : column display value
	*/					 		
	this.dataBinding = null;	
	
	/*
		Keyword submitted by user	
	*/					 			
	this.keyword = "";
						 	
						 	
	/*
		Form type submitted by user	
	*/					 									 	
	this.formType = "";


	/*
		Form sub type submitted by user	
	*/					 			
	this.formSubType = "";
	
	/*
		Form audience submitted by user	
	*/					 			
	this.formsFor = "";
		
	/*
		Variables to store the different filter category types
	*/
	this.formtypeArray = new Array();
	this.formsubtypeArray = new Array();
	this.formsforArray = new Array();
	
	/*
		Variables to track the visibility of the filter category types
	*/	
	this.showformtype = true;
	this.showformsubtype = true;
	this.showformsfor = true;
	
						 				
}

/*
	Create a new pageState object
*/
var pState = new pageState();


/*
	Main sorting function for the application.
	This is the method that is called when a user clicks on a 
	column header
*/
function setAndSort(dArray, targetColumn){

	/*
		Create the sort compare function
	*/
	var sortFunc = function(a, b){
	

		var x = a.record[targetColumn].toLowerCase();
		var y = b.record[targetColumn].toLowerCase();
		
		
					
		if(pState.sortAscending){
			return ((x < y) ? -1 : ((x > y) ? 1 : 0));
		}
		else{
		
			return ((y < x) ? -1 : ((y > x) ? 1 : 0));	
		}
	};

	/*
		Pass the function to the sort method of the 
		input array argument
	*/
	dArray.sort(sortFunc);
	
	
}

/*
	Method to stripe rows in data table
*/
function stripeObjects(){

	/*
		Get all objects to be stripped
	*/
	var zObject = document.getElementById("results");

	var i, j;

	/*
		Get all "row" level nodes in object
	*/
	var tChildNodes = zObject.getElementsByTagName("TR");

	/*
		Loop through nodes
	*/
	for(j = 0; j < tChildNodes.length; j++){


		
		/*
			Set appropriate styles
		*/
		if(j % 4 == 0){

			tChildNodes[j].className = 'odd';
			
		}
		
		/*
			This action assigns attributes to the hidden row associated with
			it's matching odd row
		*/
		else if(j % 4 == 1){
					
			tChildNodes[j].className = 'odd';		
			tChildNodes[j].style.display = "none";
					
		}
		
		else if(j % 4 == 2){

			tChildNodes[j].className = 'even';
			

		}
		else if(j % 4 == 3){

			tChildNodes[j].className = 'even';
			tChildNodes[j].style.display = "none";			
			

		}		
		

		if(j % 4 == 0 || j % 4 == 2){

			/*
				Set the mouseover event
			*/
			tChildNodes[j].onmouseover =  function(){

				/*
					add an attribute to this node to temporarily store
					the name of the striped class
				*/
				this.setAttribute("restoreclass", this.className);
				
				this.className = "mOver";


			};

			/*
				Set the mouseout event
			*/
			tChildNodes[j].onmouseout =  function(){

				/*
					read the restoreclass attribute to restore the
					previous class name
				*/
				this.className = this.getAttribute("restoreclass");

			};
		}

			
		
		
	}

}

/*
	Main method used to write out records in 
	the data table
*/	
function writeResults(rData, numberOfRecordsPerPage, start, sortColumn){
	
	/*
		This is the closest thing to overloading that JavaScript supports
	*/
	if(sortColumn == undefined){
		sortColumn = "formname";
	}

	var columnNames = pState.columnBinding;
	var displayNames = pState.dataBinding;

			
	var obj = document.getElementById("results");

	var len = rData.length;
	var i = start;
	var j = 0;
	var header = "";
	var footer = "";

	var displayTotal = start + pState.numberOfRecordsPerPage;

	if(pState.numberOfRecordsPerPage > len){
		displayTotal = len;
	}
		
	header += "<table class='sortable' cellpadding='0' cellspacing='0'><thead><tr class='header nostripe'>" ;
	
	function makeAHeaderCell(input, width, skip){
					
			var iObj = "";		
			var retVal = "";
			
			if(skip != true){		
				if(columnNames[input] == sortColumn){
					if(pState.sortAscending){
					
						iObj = "<img src='images/arrow-up.gif'>";
					
					}
					else{
						iObj = "<img src='images/arrow-down.gif'>";				
					}
				}
				else{
				
					iObj = "<img src='images/arrow-none.gif'>";		
				}
			}
			
			retVal = "<th column='" + columnNames[input] + "' width='" + width + "'>" + displayNames[columnNames[input]]+ "   " + iObj + "</th>";			
			
			
			return retVal;
	}
			
	header += makeAHeaderCell("column1", "35%", false);
	header += makeAHeaderCell("column2", "17%", false);
	header += makeAHeaderCell("column3", "12%", false);
	header += makeAHeaderCell("column4", "16%", false);
	header += makeAHeaderCell("column5", "10%", false);
	/*
		Do not write any image for the details column
	*/
	header += makeAHeaderCell("column6", "10%", true);			
		
	header += "</tr></thead><tfoot><tr><td colspan='6'>&nbsp;</td></tr></tfoot><tbody>";	
	var allData =  header;

	function makeADataCell(isWrapped, input, data){
	
		var retVal = "";

		if(isWrapped == true){
			retVal = "<td ";
		}
		else{
			retVal = "<td class='nowrap' ";
		}

		retVal += "column='" + columnNames[input] + "'>" + data + "</td>";


		return retVal;

			
	}
	


	while( i < len && i < displayTotal){
		
		var t;
		
		var rowDisplay = "<tr>";		
		
	
		rowDisplay += makeADataCell(true, "column1", "<a href='" +  rData[i].record.URL + "' target='_new'>"  +  rData[i].record.formname + "</a>"  + addDocTypeIcon(rData[i].record.doctype) + " - " + rData[i].record.size );
		rowDisplay += makeADataCell(true, "column2", rData[i].record.formtype);
		rowDisplay += makeADataCell(true, "column3", rData[i].record.formsubtype);
		rowDisplay += makeADataCell(true, "column4", rData[i].record.formnumber);
		rowDisplay += makeADataCell(false, "column5", rData[i].record.effectivedate);
		rowDisplay += makeADataCell(true, "column6", "<a class='details' href='javascript:void(0);' toggletext='-&nbsp;Details' onclick=javascript:toggleDetails(this,'" +  rData[i].record.detailsurl + "','hiddenRow_" + i + "');>+&nbsp;Details");				
		rowDisplay +="</tr>"
			  		
		var rowHidden = "<tr class='nostripe'><td colspan='6'><div id='hiddenRow_" 
		+ i + "'></div></td></tr>";	  
		
		allData += rowDisplay + rowHidden;
		i++;
	}
	footer = "</tbody></table>";
	
	document.getElementById('dataCount').innerHTML = RecordCountDisplay(rData, start);
		
	obj.innerHTML = allData + footer ;
	createPaginationRight(rData, start);	
	
	headerInit();	
	
	
	/*
		Stripe all the data
	*/
	stripeObjects();	
		
}


function RecordCountDisplay(rData, start){

	var i;
	var len = rData.length;

	var displayTotal = start + pState.numberOfRecordsPerPage;

	if(displayTotal > len){
		displayTotal = len;
	}

	return "Results " + (start + 1) + " - " + parseInt(displayTotal,10);

}


function createNewSpan(displayText, pageNumber, id){

	var newSpan = document.createElement("SPAN");
	newSpan.innerHTML = displayText;
	newSpan.id = id;
	newSpan.setAttribute("page", pageNumber);
	
	return newSpan;

}

function createPaginationRight(rData, start){

	var pObj = document.getElementById('pagination');
	pObj.innerHTML = "";

	var i, j;
	j = 0;
	var len = rData.length;
	var recordsPerPage = pState.numberOfRecordsPerPage;
	var dRange = pState.displayRange;
	
	
	/*
	var startSpan = createNewSpan("", 0, "startSpan");	
	startSpan.onclick = function(){

		writeResults(rData, recordsPerPage, (0 * recordsPerPage));
		
	}		
	pObj.appendChild(startSpan);
	*/
	
	
	if(start != 0){
		var decrementSpan = createNewSpan("Back", start/recordsPerPage, "decrementSpan");	
		decrementSpan.onclick = function(){
	
			writeResults(rData, recordsPerPage, ((start/recordsPerPage) -1 ) * recordsPerPage);
			
		}		
		pObj.appendChild(decrementSpan);
	}	
	
	

	for(i = 0; i < len; i++){

		/*		
			If the current loop variable is a multiple of the display length
			create pagination		
		*/
		if(i % recordsPerPage == 0){
					
			if(  j < dRange){			     
				var pNum = i/recordsPerPage;
				
				if(len > recordsPerPage ){
					var newSpan = createNewSpan((pNum + 1), pNum, "");

					if( i == start   ){
						newSpan.className = "current";
					}

					newSpan.onclick = function(){

						writeResults(rData, recordsPerPage, (this.getAttribute("page")* recordsPerPage));

					}

					pObj.appendChild(newSpan);
				}
				j++;				
			}
		}

	}
	if(((start/recordsPerPage + 1) * recordsPerPage) < len){
		var incrementSpan = createNewSpan("Next", start/recordsPerPage, "incrementSpan");	
		incrementSpan.onclick = function(){
	
			writeResults(rData, recordsPerPage, ((start/recordsPerPage) + 1 ) * recordsPerPage);
			
		}		
		pObj.appendChild(incrementSpan);
	}


	
}

function headerInit(){

	
	var rObj = document.getElementById("results");
	
	var cNodes = rObj.getElementsByTagName("TH");
			
	var len = cNodes.length;
	
	var i;
	
	for(i = 0; i < len; i++){	
				
		cNodes[i].onclick = function(){			

			/*
				Toggle the current sort state
			*/
			pState.sortAscending = !(pState.sortAscending);
			setAndSort(filteredArray, this.getAttribute("column")); 
			writeResults(filteredArray, pState.numberOfRecordsPerPage, 0, this.getAttribute("column"));
					
		}		
	}

}




function toggleDetails(initiator, uniqueId, objName){


	var obj = document.getElementById(objName).parentNode.parentNode;
	
	toggleText(initiator);
		
	/*
		Make Ajax call and pass in call back function
	*/	
	performAjaxRequest('details-display.do?uniqueId=' + uniqueId, objName);
	
	
		
}

function toggleText(obj){
	
	var tText = obj.getAttribute("toggletext");	
	obj.setAttribute("toggletext", obj.innerHTML);	
	obj.innerHTML = tText;		
}


function toggleDisplay(obj){

	if(obj.style.display == 'none' || obj.style.display == ''){

		obj.style.display = 'block';

	}
	else{
		obj.style.display = 'none';

	}


}

function displayFilters(input, cat, labelArray){
	
	var obj = document.getElementById("filterContent");

    /*
    	Create function to make filter spans
    */	    	
	var createFilterDiv = function(display, iter){
		
		var nDiv = document.createElement("DIV");
		nDiv.className = "filterObjectContainer";
	        nDiv.setAttribute("filterValue", input[iter]);
	        nDiv.setAttribute(cat, display);
	        nDiv.style.display = (display == true) ? "block" : "none";	        
	        nDiv.onclick = function() { 	        	
	        
	        	/*
	        		Set the display indicator for this category to false
	        	*/
	        	eval("pState.show" + cat + "=false");
	        	filterResults(this.getAttribute("filterValue"), cat);	
	        	var cObj = document.getElementById(cat + "Container");
	        	var sObj = cObj.getElementsByTagName("span");
	        	sObj[0].innerHTML = initialUpperCase(input[iter]);	        	
	        	document.getElementById(cat + "Container").style.display = "block";
	        	document.getElementById("removeForm").style.display = "block";	        					
	        	
	        	var tObj = document.getElementById(this.parentNode.id);
	        	
	        	if(tObj != null){
	        		tObj.style.display = "none";			
	        	}
			
	        	updateURLs(cat, this.getAttribute("filterValue"));
	        	
	        	
	       	};	        
	        
	        
	        
	        /*
	        	Get a record count based on filtering by each item
	        */	       	       
	        var fArray = filterData(input[iter], cat);	        
	        
	        
	        
	        var fName = document.createElement("DIV");
	        	fName.className = "filterDisplayName";
	        	fName.innerHTML = initialUpperCase(input[iter]);
	        
	        	        
	        var fNumber = document.createElement("DIV");
	        	fNumber.className = "filterDisplayNumber";
	        	fNumber.innerHTML = "&nbsp;(" + fArray.length + ")";
		
		
	        nDiv.appendChild(fName);	        	        		        	        	      	        
	        nDiv.appendChild(fNumber);	        
	       
	        return nDiv;
	        
		
	}
		
	var i;
	var len = input.length;	
	var moreIndicator = false;
	
	/*
		Create a containing DIV for this category
	*/
	var cDiv = document.createElement("DIV");
	
	var txObj = document.getElementById(cat);	
	cDiv.id = cat;
	    
    /*
    	Create the filter category header
    */	    	    
	var hFour = document.createElement("H4");
		hFour.className = 'filterHeader';
		hFour.appendChild(document.createTextNode(labelArray[cat]));   
					 	    	 
	cDiv.appendChild(hFour);
    	        			    	        			    	        			   		
	for(i = 0; i < len; i++){
	
		if( i < pState.filterDisplayRange){	

			cDiv.appendChild(createFilterDiv(true,i));				
		}
		else{
			cDiv.appendChild(createFilterDiv(false,i));			
			moreIndicator = true;
		}					
	}	
	
	
	if(moreIndicator){
		/*
			Create the "more" link
		*/	
	   	var mDiv = document.createElement("DIV");
	   	mDiv.className = "moreOrLess";	
	    	mDiv.setAttribute(cat, true);
	    	mDiv.setAttribute("toggletext","Show fewer " + labelArray[cat] + "s");
		    mDiv.onclick = function() { 		    
		    	var tObj = document.getElementById(cat);
		    	
		    	var cNodes = tObj.childNodes;
		    	
		    	var i;
		    	
		    	var len = cNodes.length;
		    	
		    	for(i = 0; i < len; i++){
					if(cNodes[i].nodeName == "DIV" && 
					(cNodes[i].getAttribute(cat) == false || cNodes[i].getAttribute(cat) == "false")){
						toggleDisplay(cNodes[i]);
					}
		    	}
	    		
	    		/*
	    			Change the text
	    		*/
	    		var tText = this.getAttribute("toggletext");
				this.setAttribute("toggletext", this.innerHTML);
				this.innerHTML = tText;
		    
		    };	        
	    mDiv.appendChild( document.createTextNode("Show more " + labelArray[cat] + "s"));			
	    cDiv.appendChild(mDiv);
	    obj.appendChild(cDiv);
	    
	}
	else{
		
		obj.appendChild(cDiv);
		
		
	}
	
		
	
	
}

function addDocTypeIcon(input){
	

	var returnVal = "";

	if(input.toLowerCase() == "pdf" || input.toLowerCase() == "doc" || input.toLowerCase() == "xls" ){

		returnVal =  " <img src='images/icon_" + input + ".gif' border='0'> ";
	}
	else{
		returnVal =  " <img src='images/icon_question.gif' border='0'> ";
	}
	
	return returnVal;

}

function resetFilterPresentation(){

	var obj = document.getElementById("filterContent");
	
	if ( obj.hasChildNodes() )
	{
	    while ( obj.childNodes.length >= 1 )
	    {
		obj.removeChild( obj.firstChild );       
	    } 
	}



}


function captureFilters(cat){

	
	resetFilterPresentation();
	
	
    /*
    	Get the databinding information
    */	    
	var fArray = pState.dataBinding;	
	
    /*
    	Get all the filter data arrays
    	
    	If the display indicator for the filter type has been 
    	turned to false, do not display the data for that filter
    */	    		
	if(pState.formType != "" && pState.formType == "All Types" && pState.showformtype == true || (pState.formType == "" && pState.showformtype == true ) ){
		var ftArray = pState.formtypeArray;		
		displayFilters(ftArray, "formtype", fArray);
	
	}
	
	if(pState.formSubType != "" && pState.formSubType == "All Types" && pState.showformsubtype == true || (pState.formSubType == "" && pState.showformsubtype == true   )){
		var fstArray = pState.formsubtypeArray;
		displayFilters(fstArray, "formsubtype", fArray);		
	
	}
	
	
	if(pState.showformsfor == true){
		var ffArray = pState.formsforArray;	
		displayFilters(ffArray, "formsfor", fArray);
	}

	//alert(pState.showformtype + " --- " +  pState.showformsubtype + " --- " + pState.showformsfor );

	if(pState.showformtype == false && pState.showformsubtype == false && pState.showformsfor == false){
	
		var tObj = document.getElementById("filterBox");
		var txObj = tObj.getElementsByTagName("H2");
		
		/*
			Hide the "Narrow your results by" header
		*/
		txObj[0].style.display = "none";
	}
	
	


 }

function filterResults(filterValue, cat){

	/*
		Overwrite the existing filtered data Array
	*/
	filteredArray = filterData(filterValue, cat);
	
	
	resetArrays(filteredArray, "formtype");
	resetArrays(filteredArray, "formsubtype");
	resetArrays(filteredArray, "formsfor");
	
	/*
		Recreate the filter presentation	
	*/
	
	captureFilters(cat);
	
	/*
		Every newly filtered array will start off 
		sorted by formname ascending
	*/	
	setAndSort(filteredArray, "formname");
	
	/*
		Write out the data to the screen
	*/
	writeResults(filteredArray, pState.numberOfRecordsPerPage, 0);		
	
	/*
		Initialize the clickable headers
	*/
	headerInit();	

}	



function filterData(filterValue, cat){


	
	var filterFunction = function(x) {	
	
		if(filterValue == ''){
			return 1;
		}
		else if(x.record[cat].indexOf(filterValue) > -1){
			
			return 1;
		}
		else{		
			return 0;   
		}	
		
	}

	
	return filteredArray.filter(filterFunction);

}



function bindData(){
	pState.columnBinding = results.header.columnbinding;	
	pState.dataBinding =  results.header.databinding;	
}

function initializeViewAll(){
	
	var obj = document.getElementById("viewAll");
	
	obj.onclick = function(){
		
		
		writeResults(results.googledata, pState.numberOfRecordsPerPage, 0);
		
	}
	
	
	
}


var filteredArray;

function initializeData(){

	
	/*
		Populate the global variable filteredArray with 
		all of the returned records
	*/

	filteredArray = results.googledata;
	
	bindData();
	/*
		The method capture filters includes the presentation code
		for the filters
	*/	
	initializePageState();
	
	captureFilters();	
	
	setAndSort(results.googledata, "formname");
	

}

function initializePresentation(){

	/*	
		Presentation
	*/
	writeResults(results.googledata, pState.numberOfRecordsPerPage, 0);
	
	headerDisplayInit("spelling");
	
	headerDisplayInit("synonym");
	
	//filterInit();


}


function init(){
	
	
	initializeData();	
	initializePresentation();

		
}

function initializePageState(){


	pState.keyword = keyword;
	pState.formType = formType;
	pState.formSubType = formSubType;
	pState.formsFor = audience;
	
		
	pState.formtypeArray = results.header.formtype;
	pState.formsubtypeArray = results.header.formsubtype;
	pState.formsforArray = results.header.formsfor;			
	
	filterInit();

}

function filterInit(){

	/*
		If there is no keyword, do not display anything under
		the "You've searched by" section
	*/
	if(pState.keyword == ""){
		
		document.getElementById("keywordContainer").style.display = "none";
	      	
	}
	
	/*
		If the form type value = "All Types", do not display anything under
		the "You've searched by" section
	*/	
	if(pState.formType == "All Types" || pState.formType.trim() == "" ){
	
		document.getElementById("formtypeContainer").style.display = "none";		      	
	}		
	else{
	
		pState.showformtype = false;
	}
	
	
	/*
		If the form sub type value = "All Types", do not display anything under
		the "You've searched by" section
	*/		
	if(pState.formSubType == "All Types" || pState.formSubType.trim() == "" ){
	
		document.getElementById("formsubtypeContainer").style.display = "none";			     
	}
	else{
	
		pState.showformsubtype = false;
	}	
	
	
	/*
		If there are multiple audience values,
		do not show the audience values under the "You've searched by" header
		at the top of the page, display the audience values under the 
		"Narrow your search by" Forms For header
		
		If there is only one audience value,
		do show the audience values under the "You've searched by" header
		at the top of the page, hide the audience values under the 
		"Narrow your search by" Forms For header
		
	*/
	
	if(pState.formsFor.indexOf(",") > -1){
		document.getElementById("formsforContainer").style.display = "none";			     
		pState.showformsfor = true;
	}
	else{
	
		var tObj = document.getElementById("formsforContainer");
		tObj.style.display = "block";
		var sObj = tObj.getElementsByTagName("span");
		sObj[0].innerHTML = initialUpperCase(sObj[0].innerHTML);		
		pState.showformsfor = false;
	
	}
	
	if(pState.keyword == "" && pState.showformtype == true && pState.showformsubtype == true && pState.showformsfor == true){	
	
		document.getElementById("removeForm").style.display = "none";

	}
	

}




function headerDisplayInit(headerValueName){
	
	var hVal = results.header[headerValueName];
	
	/*
	 * If there is a spelling suggestion, 
	 * a.k.a. "Did you mean", make the spelling 
	 * suggestion DIV visible
	 */
	if(hVal.length > 0){
		
		/*
		 * Form object
		 */
		var fObj = document.getElementById(headerValueName + "Form");
		
		/*
		 * Visual object container
		 */
		var vObj = document.getElementById(headerValueName);		
		
		vObj.style.display = "block";
		fObj.keyword.value = hVal;		
		fObj.actionType.value = "Submit";
		
		var dObj = document.getElementById(headerValueName + "Box");
		
		dObj.innerHTML = hVal;
		
		/*
		 * Make the link clickable
		 */
		dObj.onclick = function(){					
			fObj.submit();			
		}
				
	}
		
}


function submitSearch(p_object, p_action){

	
	var aObj = p_object.audience;
	
	var i, len;
	
	len = aObj.length;
	
	var oString = "";
	
	var isAudienceSelected = false;	
	
	for(i = 0;i < len; i++){
	
		if(aObj[i].checked == true){
			
			isAudienceSelected = true;
		
		}
		
		if(i == 0){
			oString = initialUpperCase(aObj[i].value);
			
		}
		else{
			oString += ", " + initialUpperCase(aObj[i].value);
		
		}
	
	}
	
	if(isAudienceSelected == true || (len == undefined && aObj.checked == true)){
		
		submitForm(p_object, p_action);
	}
	else{
	
		alert("Please select one or more of the following values before continuing: " + oString + ".");
		
	
	
	}
	

}

function initialUpperCase(str){

	return (str.slice(0,1).toUpperCase() + str.slice(1)).trim();

}


function submitForm(p_object, p_actionType)
{

	p_object.actionType.value = p_actionType;	
	p_object.submit();
	
}

function propsInObject(object){
	for(props in object){
		alert(object[props] + " --- " + props);
	}
}

function updateURLs(category, value){


	var obj = document.getElementById("removeForm");

	/*
		Get all of the anchor tag objects from the 
		removeForm
	*/
	var aArray = obj.getElementsByTagName("A");
	
	var i, len;
	
	len = aArray.length;
	
	for(i = 0; i < len; i++){
	
		/*
			If this is not the element that initiated the request,
			modify it's URL
		*/
		if((category + "_anchor") != aArray[i].getAttribute("id")){
											
			aArray[i].setAttribute("href", parseAndModifyURL(aArray[i], category, value));				  						
		}
		
	
	
	}
	

}

function parseAndModifyURL(input, category, value){

	

	input = input + ""; 
	
	/*
		Due to an inconsistency in naming conventions, 
		I gotta do a little conversion
	*/
	
	if(category == "formsfor"){
		category = "audience";		             
	}
	else if(category == "formtype"){
		category = "formType";
	}
	else if(category == "formsubtype"){
		category = "formSubType";
	}
	
	
	var sv = input.indexOf("&" + category + "=");

	var ev = input.indexOf("&", sv + 1);

	var ss = input.substring(0, sv + 1 + category.length + 1);

	var es = input.substring(ev, input.length);

	return ss + value.trim() + es;
	
}

function resetArrays(filteredData, type){
	
	/*
		Reset the array via eval statement
	*/	
	eval("pState." + type + "Array = new Array()");
	
	var i;
	var len = filteredData.length;
		

	for(i = 0; i < len; i++){
	
		/*
			Use the eval statement to get all of the data on the 
			the type that was passed in 
			
			i.e. if type = formsFor, get all of the 
			formsFor information
		*/
		var ts = eval("filteredData[" + i + "].record." + type);
		var ms = new Array();
		
		
		/*
			Break up all the individual values into string array
		*/
		if(ts.indexOf(",") > -1){
			ms = ts.split(",");		
		}
		else{
			ms[0] = ts;
		}
		
		var k;
		var ml = ms.length;
		
		/*
			Loop through the array
		*/
		for(k = 0; k < ml; k++){
		
			var ps = eval("pState." + type + "Array") + "";
		
			/*
			
			*/
			if(ps.indexOf(ms[k]) > -1){
			
			}
			else{	
				eval("pState." + type + "Array.push(ms[k])");	
			}
					
		}
			
	}
		
}
