/*
 * A class that is used to represent an instance of query results.
 * Just create an instance and pass the window and the queryId.
 * An event watcher will be registerd and ran when the window
 * loads
 *
 * win = window
 */
 // TODO this relies on ListItemManager.js... Make it so this imports that. And don't include it in the html.
 //		Change things in here and there to reflect JSAN coolness.
function QueryResult( win, queryId ) {

	var start = function() {
		var _GROUPS = queryId + "-groups";
		var _GROUPS_DEACTIVE = queryId + "-group-deactive";
		
		var _NAV_CONTROLS_GROUP_ACTIVE = queryId + "-group-navigation-controls-group-active";
		var _NAV_TOP_CONTROLS = queryId + "-group-navigation-top-controls-groups";
		var _NAV_BOTTOM_CONTROLS = queryId + "-group-navigation-bottom-controls-groups";
		
		var _NAV_PREVIOUS_DEACTIVE = queryId + "-group-navigation-previous-deactive";
		var _NAV_NEXT_DEACTIVE = queryId + "-group-navigation-next-deactive";
		var _NAV_TOP_PREVIOUS = queryId + "-group-navigation-top-previous";
		var _NAV_TOP_NEXT = queryId + "-group-navigation-top-next";
		var _NAV_BOTTOM_PREVIOUS = queryId + "-group-navigation-bottom-previous";
		var _NAV_BOTTOM_NEXT = queryId + "-group-navigation-bottom-next";
		
		var _NAV_TOP_DISPLAY_AG = queryId + "-group-navigation-top-display-activeGroup";
		var _NAV_TOP_DISPLAY_NOG = queryId + "-group-navigation-top-display-numberOfGroups";
		var _NAV_BOTTOM_DISPLAY_AG = queryId + "-group-navigation-bottom-display-activeGroup";
		var _NAV_BOTTOM_DISPLAY_NOG = queryId + "-group-navigation-bottom-display-numberOfGroups";
		
		
		/*
		 * Managers
		 */
		/** TODO Need to makde this dynamic. The ids are different depending on stuff (goes for all this js stuff) */
		var managers = new Array();
		// Groups Manager
		var groupsManager = managers[0] = new ListItemManager(
			win.document, _GROUPS, null,
			null, _GROUPS_DEACTIVE
		);
		// Controls Managers
		var topControls = managers[1] = new ListItemManager(
			win.document, _NAV_TOP_CONTROLS, null,
			_NAV_CONTROLS_GROUP_ACTIVE, null
		);
		var bottomControls = managers[2] = new ListItemManager(
			win.document, _NAV_BOTTOM_CONTROLS, null,
			_NAV_CONTROLS_GROUP_ACTIVE, null
		);
		
		
		/*
		 * Controls.
		 */
		var hrefTop = "javascript:;";
		var hrefsTop = [ hrefTop, hrefTop, hrefTop ];
		var hrefbottom = win.location.pathname + win.location.search + "#searchResult-top";
		var hrefsBottom = [hrefbottom, hrefbottom, hrefbottom ];
		
		// Top Controls
		var topPageNumberAnchors = retrieveFirstElement( topControls.getItems(), "a" );
		var topPrevious = win.document.getElementById( _NAV_TOP_PREVIOUS );
		var topNext = win.document.getElementById( _NAV_TOP_NEXT );
		registerToManagers( managers, topPageNumberAnchors, topPrevious, topNext, hrefsTop );
		
		topControls.setPreviousElem( topPrevious, _NAV_PREVIOUS_DEACTIVE ) ;
		topControls.setNextElem( topNext, _NAV_NEXT_DEACTIVE );
		
		topControls.registerElementAsDisplay(
			win.document.getElementById( _NAV_TOP_DISPLAY_AG  ),
			win.document.getElementById( _NAV_TOP_DISPLAY_NOG )
		);
		
		
		// Bottom Controls
		var bottomPageNumberAnchors = retrieveFirstElement( bottomControls.getItems(), "a" );
		var bottomPrevious = win.document.getElementById( _NAV_BOTTOM_PREVIOUS );
		var bottomNext = win.document.getElementById( _NAV_BOTTOM_NEXT );
		registerToManagers( managers, bottomPageNumberAnchors, bottomPrevious, bottomNext, hrefsBottom );
		
		bottomControls.setPreviousElem( bottomPrevious, _NAV_PREVIOUS_DEACTIVE );
		bottomControls.setNextElem( bottomNext, _NAV_NEXT_DEACTIVE );
		
		bottomControls.registerElementAsDisplay(
			win.document.getElementById( _NAV_BOTTOM_DISPLAY_AG  ),
			win.document.getElementById( _NAV_BOTTOM_DISPLAY_NOG )
		);
		
		/*
		 * Start mangagers
		 */
		startManagers( managers );
		
		_clean();
	};
	
	// Sets stuff to null so the garbage collecter can do its stuff. (I think this will work.)
	function _clean() {
		windowOnLoad = null;
	};
	
	// Start this thing up.
	start();
	/*
	// Replaced by line above.
	// Run windowOnLoad on window load.
	addEvent(
		win,
		'load',
		new function() { start(); }
	);
	*/
}

// ======================================================
// TODO Temp. Will be in JSAN soon. Same goes for ListItemManager.js
function addEvent(obj, evType, fn) { 
 if (obj.addEventListener){ 
   obj.addEventListener(evType, fn, false); 
   return true; 
 } else if (obj.attachEvent){ 
   var r = obj.attachEvent("on"+evType, fn); 
   return r; 
 } else { 
   return false; 
 } 
}
// ======================================================

