dojo.declare("com.mgh.Categories",null, {
	constructor : function(configParams) {
		this.categories;
		this.subCategories;
		this.previousCat;
		
		/********************************** Default Variables *****************************************/
		//accept a json object with all necessary constructor values
		this.queryParams = configParams;
		this.query = '';		
		
		// linksToDisplay: is how many categories are displayed before the "view all" link and overlay are displayed
		this.linksToDisplay = this.queryParams.links;		

		/********************************** Initialize Values *****************************************/
		this.getXmlString();
		fadeOutNode('categories1');	
		try {
			fadeOutNode('filter2');	
		} catch (e) {	
		
		}
	},
	
	/********************************** xml methods *****************************************/  
	updateQuery : function()
	{
		var m = this.queryParams;
		this.query = m.href + '?az=' + m.az + '&age=' + m.age + '&cat=' + m.cat +  '&subcat=' + m.subcat + '&type=' + m.type + '&query=' + m.query;
		
	},	
	
	getXmlString : function (){
		this.updateQuery();
		dojo.xhrGet({
			url: this.query,
			handleAs: "text",
			load: function(response, ioArgs){
				categoryDataReady(response);
				return response;
			},
			error: function(response, ioArgs){
			  alert("An error occurred, with response: " + response);
			  return response;
			}
		});
	},
	
	/********************************** categories methods *****************************************/	
 	buildCategories : function (){
		var i;
		//removes all category names from display
		var regEx = /\(.*\)/;
		var myCategories = this.categories.getElementsByTagName("NAME");
		var myCatIds = this.categories.getElementsByTagName("ID");
		var output = '<h3>' + this.queryParams.catTitle + ':</h3>';
	    var trimmed = '';
	    var rows = 0;
		var link = '<a href="#" onclick="filterByCategory(\'%1\'); updateCategories(\'%1\',\'%2\')">%2</a><br/>';

		var sortedCats = new Array();

		//first store the category and its ids and sort this new array
		//Modification 4/13/2010: 
		//The first category is the data type so start from index 1.		
		for (i=1; i<myCategories.length; i++){
			sortedCats[i-1] = myCategories[i].childNodes[0].nodeValue + '|' + myCatIds[i].childNodes[0].nodeValue;
		}
			
		sortedCats = sortedCats.sort();
        // now with the ids sorted, use the sorted categories arrray to get an alphabetized list. use the 
        // sortedCats array instead of the original nodeList elements myCats and myCatIds

        output += '<table width="100%" border="0" cellspacing="5" cellpadding="5" valign="top">'
        output += '<tr>';
        var counter = 0;
        for (var x=0; x < 3; x++){
	    	output += '<td width="33%" valign="top">';
     	
	        for (i=rows; i < (this.linksToDisplay * (x+1)); i++){
				try {
		        	trimmed = sortedCats[i].split('|')[0].replace(regEx,'');
		        	output += formatString(link,sortedCats[i].split('|')[1],trimmed);
		        	rows ++;
		        	if (i > (this.linksToDisplay *3)-1){
						output += '<a href="#" class="goBack" onclick="buildHiddenPanel(\'categoriesContent\',\'categories\'); dijit.byId(\'categoriesDialog\').show()">Display All</a><br/>';		        		
		        	}
				} catch (e) {
					break;
				} 
	        }
	    	output += '</td>';	        
        }
        output += '</tr>';
        output += '</table>';
		dojo.byId('categories1').innerHTML = output;	
	},

	updateCategories : function (id,nodeName){
		var link = '<li id="%1" class="active"><strong>%1</strong></li>';
		var removeLink = '<li><a href="#" class="goBack" onclick="removeFilter(\'categories1\')">Show all %1</a></li>';		
		var output = formatString('<h3>%1:</h3><ul>',this.queryParams.catTitle);
			output += formatString(link,nodeName);
			output += formatString(removeLink,this.queryParams.catTitle);
			output += '</ul>'
		this.previousCat = id;
		dojo.byId('categories1').innerHTML = output;
	},
	
	buildHiddenPanel : function (dialogId,catName){
		var i;
		var myCategories = this.categories.getElementsByTagName("NAME");
		var myCatIds = this.categories.getElementsByTagName("ID");;
		var output = '<ul>';
		var trimmed = '';
		var catLink = '<li><a href="#" onclick="filterByCategory(\'%1\'); updateCategories(\'%1\',\'%2\'); dijit.byId(\'categoriesDialog\').hide()">%2</a></li>';
		var subCatLink = '<li><a href="#" onclick="filterByCategory(\'%1\'); updateSubCategories(\'%1\',\'%2\'); dijit.byId(\'categoriesDialog\').hide()">%2</a></li>';
		
		for (i=0; i < myCategories.length; i++){
			trimmed = myCategories[i].childNodes[0].nodeValue.toString().replace('(Category)','');
			if (catName == "categories"){	
				output += formatString(catLink,myCatIds[i].childNodes[0].nodeValue,trimmed);
			} else {			
		       	output += formatString(subCatLink,myCatIds[i].childNodes[0].nodeValue,trimmed);
			}		
		}
		output += '</ul>';
		dojo.byId('categoriesContent').innerHTML = output	
	},

/********************************** filters *****************************************/
	buildFilter1 : function (){
		var filter1 = ["Adult","Pediatric"];
		var output = '<h3>Patient Age:</h3>';
		//added 11/05/2009 to fix display problem where categories were not hiding properly
		//var link = '<li id="%1" class="active"><a href="#" onclick="updateFilter1(\'%1\'); removeFilter(\'categories1\')")>%1</a></li>';
		var link = '<li id="%1" class="active"><a href="#" onclick="updateFilter1(\'%1\')")>%1</a></li>';
		for (var i = 0; i < filter1.length; i++){
			output += formatString(link,filter1[i]);
		}
		dojo.byId('filter1').innerHTML = output;
	},
	
	updateFilter1 : function (id){
		var output = '<H3>Patient age:</H3>';
		output += formatString('<li id="%1" class="active"><strong>%1</strong></li>',id);
		//this line makes the categories be reset
		//output += '<li><a href="#" class="goBack" onclick="removeFilter(\'filter1\'); removeFilter(\'categories1\')">Show all ages</a></li>';
		output += '<li><a href="#" class="goBack" onclick="removeFilter(\'filter1\')">Show all ages</a></li>';
		dojo.byId('filter1').innerHTML = output;
	}
});