dojo.declare("com.mgh.Multimedia",[com.mgh.Search], {
	constructor : function(config) {
		this.urlRoot = "http://www.massgeneral.org";
		this.url = config.href;
		this.currentPage = 0;
	},
	
   getXmlString: function() {
        dojo.xhrGet({
            url: this.query,
            handleAs: "text",
            load: function(response, ioArgs) {
                //outside function listening for the data to be ready
                searchDataReady(response);
                return response;
            },
            error: function(response, ioArgs) {
                alert("An error occurred, with response: " + response);
                return response;
            }
        });
    },	
	
	refreshView : function (num){
		try
		{
			this.gotoPage(num);
		} catch (e) {
			console.log(e);
		}
	},

	defaultView : function(){
		try
		{
			this.gotoPage(0);					
		} 
		catch (e) 
		{
			console.log(e);
		}
	},
	
	gotoPage : function (start){
		var page = this.displayResults(start,'',0);
		this.currentPage = start;
		var paging = this.createPaging(start);
		dojo.byId('browseResults').innerHTML = page;	
		dojo.byId('pagingTop').innerHTML = paging;
		dojo.byId('pagingBottom').innerHTML = paging;			
	},	
	
	
	createRow : function(rowFormat, columnFormat, cells){
		var output = '';
		var column;
		if(cells.length > 0) {
			for(var i = 0; i < cells.length; i ++){
				//column = dojo.string.substitute(columnFormat, [ i.toString() ]);
				output += dojo.string.substitute(columnFormat, [ (i + 1).toString(), cells[i] ]);
			}
			
			return dojo.string.substitute(rowFormat, [ output ]);
		} else {
			return output;
		}
	},	
	
	mediaIconAttributes : function(mediaDisplay) {
		var obj = {
			title : '',
			css : ''
		}
		
		switch(mediaDisplay) {
			case 'video' : 
				obj.title = 'Watch Video';
				obj.css = 'videoLink';
				break;
				
			case 'audiocast' :
				obj.title = 'Listen';
				obj.css = 'audioLink';
				break;
				
			default :
				obj.title = 'Interact';
				obj.css = 'interactLink';
				break;
		}
		
		return obj;
	},
	
	displayResults : function (id,type,year){
		var output = '';
		var counter = 0;
		var description = '';
		var upperLimit;
		var ids;
		var numberOfRows;
		
		var container = '<div class="facetedMM" id="">${0}</div>';
		
		var row = '<div class="rowNoBorder clearfix">${0}</div>';		
				
		var column = '<div class="col${0}">${1}</div>';

		/*
		var cell = '<div class="mediaMod">\
					  <div><a href="${urlRoot}/news/multimedia.aspx?id=${mediaId}"><img height="100" width="214" src="${image}" alt="${title}"></a>\
						<p><a href="${urlRoot}/news/multimedia.aspx?id=${mediaId}" class="${iconCss}" title="${title}">${iconTitle}</a></p>\
					  </div>\
					  <h4><a href="${urlRoot}/news/multimedia.aspx?id=${mediaId}">${title}</a></h4>\
					  <p class="searchDescription">${description}</p>\
					</div>';
		*/		
		
		var cell = '<div class="mediaMod">\
					  <div><a href="${urlRoot}/news/multimedia.aspx?id=${mediaId}"><img height="100" width="214" src="${image}" alt="${title}"></a>\
						<p><a href="${urlRoot}/news/multimedia.aspx?id=${mediaId}" class="${iconCss}" title="${title}">${iconTitle}</a></p>\
					  </div>\
					  <h4><a href="${urlRoot}/news/multimedia.aspx?id=${mediaId}">${title}</a></h4>\
					</div>';					
					
		var cells = [];
		
		if (type != 'letter'){
			upperLimit = id + this.queryParams.numPerPage;	
		} else {
			//this is the point where elements can be sorted by date. 
			letter = String.fromCharCode(id);
			ids = this.letters[letter].split(',');
			if (this.letters[letter] != ''){
				id = parseInt(ids[0]);				
			 	upperLimit = id + ids.length;
			}
		}		
		
		var elements = new Array();
		var names = this.xmlDoc.getElementsByTagName('NAME');
		var metaTags = this.xmlDoc.getElementsByTagName('METADATA');
		var mediaIcon;
		var image;
		
		var media = {
			image : '',
			urlRoot : '',
			url : '',
			mediaId : '',
			mediaDisplay : '',
			title : '',
			description : '',
			iconTitle : '',
			iconCss : ''
		}
		
		media.urlRoot = this.urlRoot;
		media.url = this.url;
		
		upperLimit = upperLimit < this.results ? upperLimit : this.results;
		
		for (var i = id; i < upperLimit; i++)
		{
			var media = {
				image : '',
				urlRoot : '',
				url : '',
				mediaId : '',
				mediaDisplay : '',
				title : '',
				description : '',
				iconTitle : '',
				iconCss : ''
			};
			
			try {
				media.title = names[i].childNodes[0].nodeValue;
				media.mediaId = this.getNodeData(metaTags[i],'MediaID');
				media.mediaDisplay = this.getNodeData(metaTags[i],'MediaDisplay');
				media.description = this.getNodeData(metaTags[i],'Description');
				
				image = this.getNodeData(metaTags[i],'Image');
				media.image = image == '' ? '/assets/images/thumb/th_audio_thumb.gif' : image;
				
				mediaIcon = this.mediaIconAttributes(media.mediaDisplay);
				
				media.iconTitle = mediaIcon.title;
				media.iconCss = mediaIcon.css;
				
				cells.push(dojo.string.substitute( cell, media ));
								
				counter += 1;				
			} catch (e) {				
				break;
			}		
		}
		
		numberOfRows = this.queryParams.numPerPage/this.queryParams.numPerRow;
		
		for(var x = 0; x < numberOfRows; x ++){
			var start = x == 0 ? 0 : x * this.queryParams.numPerRow;
			output += this.createRow(row, column, cells.slice(start, start + this.queryParams.numPerRow));
		}
		
		output = dojo.string.substitute(container, [ output ]);		
		
		this.recordsDislaying = counter;
		
		if (counter == 0){	
            output = '<div class="noResultsBody" style="border-bottom: none;">\
							<p><b>No results found.</b><br />\
							Deselect one or more categories above to display more results. \
							Or, <a href="#" onclick="dojo.publish(\'clearAllSelections\', [])">clear all selections</a> and try your search again.<br/>\
							To expand your search to the entire Mass General website, use the search box in the top right corner of the page.</p>\
						</div>';
			dojo.byId('descriptions').style.display = 'none';			
		} else {
			dojo.byId('descriptions').style.display = 'block';
		}
		return output;
	}
});
