/*This file creates the tabs on the library homepage. Also includes javascript for
the tab content that is loaded dynamically.*/

(function() {
	// create a new tab object
	var oTabView = new YAHOO.widget.TabView(); 
	
    /*oTabView.contentTransition = function(newTab, oldTab) {
        if ( newTab.anim && newTab.anim.isAnimated() ) {
            newTab.anim.stop(true);
        }
        
        newTab.set('contentVisible', true);
        YAHOO.util.Dom.setStyle(newTab.get('contentEl'), 'opacity', 0);
        
        newTab.anim = newTab.anim || new YAHOO.util.Anim( newTab.get('contentEl'), { opacity: { to: 1 } }, .1 );
        newTab.anim.attributes.opacity = { to: 1 };
        
        var hideContent = function() {
            oldTab.set('contentVisible', false);
            oldTab.anim.onComplete.unsubscribe(hideContent);
        };
        
        oldTab.anim = oldTab.anim || new YAHOO.util.Anim( oldTab.get('contentEl'), { opacity: { to: 0 } }, .1 );
        oldTab.anim.onComplete.subscribe(hideContent, this, true);
        oldTab.anim.attributes.opacity = { to: 0 };
        
        newTab.anim.animate();
        oldTab.anim.animate();
    };*/

	
	// add tabs to the tab object
	oTabView.addTab( new YAHOO.widget.Tab({
		label: 'Reference Services',
		dataSrc: 'tabRefSearch.cfm',
		cacheData: true,
		active: true
	}));
	
	oTabView.addTab( new YAHOO.widget.Tab({
		label: 'Ask a Question',
		dataSrc: 'tabMeebo.cfm',
		cacheData: true
	}));
	
	oTabView.addTab( new YAHOO.widget.Tab({
		label: 'Interlibrary Loan',
		dataSrc: 'tabIll.cfm',
		cacheData: false
	}));
	
	oTabView.addTab( new YAHOO.widget.Tab({
		label: 'Search the Web',
		dataSrc: 'tabWebSearch.cfm',
		cacheData: true
	}));
	
	// append tab object to DOM
	oTabView.appendTo('tabContainer'); 
	
	// handler fires after load of first tab
	var tabSearchSetup = function(event) {							
		// show menu when user clicks on split button
		/*function onButtonOption() {
			// grab button's menu
			var menu = this.getMenu();
			
			// render the Menu instance into the button
			menu.render(this);

			// align the Menu instance to its corresponding Button and move it slightly to compensate for padding
			menu.cfg.setProperty("context", [this.get("container"), "tr", "br"]);
			menu.cfg.setProperty("x", menu.cfg.getProperty("x") - 4);
			menu.cfg.setProperty("y", menu.cfg.getProperty("y") - 7);	
		}*/
		
		// set text of search box for an advanced search
		var setAdvSearchText = function(txt) {
			var el = YAHOO.util.Dom.get("frmAdvSearchText");	// search text to change
			
			el.innerHTML = txt;
		}
		
		// onclick split menu handler
		function onClick(p_sType, p_aArgs) { 
			var oEvent = p_aArgs[0],    // DOM Event
				oMenuItem = p_aArgs[1]; // YAHOO.widget.MenuItem instance
			
			// If a MenuItem was clicked, do something								
			if (oMenuItem) {	
				// send user to proper URL for Advanced Search	
				if (oMenuItem.srcElement.text == "Advanced") {
					location.href = oMenuItem.value;
				} else {	// set button's value to new search type (append new search string to current value)
					// find which button is the parent of the dropdown
					var btnClicked;
					if (oMenuItem.srcElement.parentNode.id == "LibCatSplit") {
						btnClicked = btnGrpComboSearch.getButton(0);
					} else if (oMenuItem.srcElement.parentNode.id == "MetalibSplit") {
						btnClicked = btnGrpComboSearch.getButton(1);
					} else if (oMenuItem.srcElement.parentNode.id == "EJSSplit") {
						btnClicked = btnGrpComboSearch.getButton(1);
					} else {
						btnClicked = btnGrpComboSearch.getButton(0);	// default to library catalog search
					}

					// update button's value
					btnClicked.set("value", btnClicked.get("value") + oMenuItem.value);
					
					// update search text
					setAdvSearchText("&nbsp;(by " + oMenuItem.srcElement.text + ")");
					
					// focus cursor in search box
					setFormFocus();
				}
			}								
		}
										
		// create and setup buttons
		var createButton = function (btnId, hasMenu, txtTitle, txtLabel) {
			var oButton;
			
			// ** This was the old way to create a button, updated to reflect new features in YUI 2.6.0 release **
			/*// create span to hold button
			var oSpan = document.createElement("span")
			oSpan.id = "span" + btnId;
			btnGrpComboSearch.appendChild(oSpan);
			
			if (hasMenu) {
				// set up menu for EJS
				var oSplitMenu = new YAHOO.widget.Menu(btnId + "Split");
				
				// create button
				oButton = new YAHOO.widget.Button(btnId, { type: "split", menu: oSplitMenu, container: "span" + btnId });
				
				// subscribe to split button show menu click
				oButton.on("option", onButtonOption);
				
				// subscribe to the "click" event for menus
				oSplitMenu.subscribe("click", onClick);
			} else {
				oButton = new YAHOO.widget.Button(btnId, { container: "span" + btnId });
			}*/
			
			if (hasMenu) {	
				// split button
				oButton = new YAHOO.widget.Button(btnId, { type: "split", menu: btnId + "Split" });	

				// subscribe to the "click" event for menus
				oButton.getMenu().subscribe("click", onClick);

			} else {		
				// regular button
				oButton = new YAHOO.widget.Button(btnId);		
			}

			// set button's title
			oButton.set("title", txtTitle);
			
			// set button's label
			oButton.set("label", txtLabel);
			
			// move menu to bottom-right corner of button, and subscribe to "option" event to move menu some more when shown
			oButton.set("menualignment", ["tr", "br"]);
			oButton.on("option", alignBtnMenu);
		}
		
		// adjusts placement of menu on split buttons
		var alignBtnMenu = function () {
			// grab this button's menu
			var menu = this.getMenu();
			
			// adjust menu for padding on button
			menu.cfg.setProperty("x", menu.cfg.getProperty("x") - 4);
			menu.cfg.setProperty("y", menu.cfg.getProperty("y") - 7);
		}
		
		// create Button Group
		var btnGrpComboSearch = new YAHOO.widget.ButtonGroup("comboSearch");
		
		// create buttons
		createButton("LibCat", true, "Search the Library's catalog", "Library Catalog");
		//createButton("Metalib", false, "Search the Library's online databases", "Online Databases");
		createButton("EJS", true, "Search the Library's electronic journal holdings", "Electronic Journals");
		
		// when user clicks search buttons, focus cursor in search text box
		var setFormFocus = function(evtClick) {
			btnGrpComboSearch.getButton(0).getForm().txtLibSearch.focus();
		}
		
		// when user clicks search buttons, update search text
		var setSearchTextOnButtonClick = function(evtClick) {
			var el = YAHOO.util.Dom.get("frmSearchText");	// search text to change
			var buttonChecked = evtClick.newValue;			// checked radio button
			
			if (buttonChecked == "Button LibCat")
				el.innerHTML = "Library Catalog";
			else if (buttonChecked == "Button Metalib")
				el.innerHTML = "Online Databases";
			else if (buttonChecked == "Button EJS")
				el.innerHTML = "Electronic Journals";
			else
				el.innerHTML = "";
			
			// if advanced search text was showing, hide it
			YAHOO.util.Dom.get("frmAdvSearchText").innerHTML = "";					
		}
		
		// subscribe to button clicks
		btnGrpComboSearch.addListener("checkedButtonChange", setFormFocus);
		btnGrpComboSearch.addListener("checkedButtonChange", setSearchTextOnButtonClick);
	
		// onsubmit form handler, sets form up for different searching functions
		var manageForm = function(evtSubmit) {								
			// grab reference to form
			var frm = btnGrpComboSearch.getButton(0).getForm();
			
			// show user loading icon
			YAHOO.util.Dom.get("searchLoadingIcon").style.visibility = "visible";

			// find which type of search is being done
			for (var i=0; i<btnGrpComboSearch.getCount(); ++i) {	
				if (btnGrpComboSearch.getButton(i).get("checked"))
					comboSearchValue = btnGrpComboSearch.getButton(i).get("value");
			}
			
			// create extra form elements necessary for search handler page
			if (comboSearchValue.substr(0, 2) == 'lc') {			// library catalog search
				frm.action = 'http://apollo.sdln.net:80/F/';
				
				var input = document.createElement("input");
				input.type = "hidden"
				input.name = "func";
				input.value = "find-b";
				frm.appendChild(input);
				
				input = document.createElement("input");
				input.type = "hidden"
				input.name = "local_base";
				input.value = "bhs";
				frm.appendChild(input);
				
				input = document.createElement("input");
				input.type = "hidden"
				input.name = "find_code";
				
				// check for advanced search features
				var advSearch = comboSearchValue.substr(2, 2);
				if (advSearch) {
					if (advSearch == "tk") {		// title keywords
						input.value = "WTI";
					} else if (advSearch == "tb") {	// title beginning with
						input.value = "TTL";
					} else if (advSearch == "ak") {	// author keywords
						input.value = "WAU";
					} else if (advSearch == "ab") {	// author beginning with
						input.value = "AUT";
					} else if (advSearch == "sk") {	// subject keywords
						input.value = "WSU";
					} else if (advSearch == "sb") {	// subject beginning with
						input.value = "SUB";
					} else if (advSearch == "cn") {	// call number
						input.value = "CALL";
					} else {
						input.value = "WRD";		// didn't recognize advanced search, so just default to keywords anywhere
					}
				} else {	// not an advanced search			
					input.value = "WRD";			// default keywords anywhere 
				}
				frm.appendChild(input);
										
				frm.txtLibSearch.name = "request";
			} else if (comboSearchValue.substr(0, 2) == 'od') {		// online databases (metalib) search
				frm.action = "http://hermes.sdln.net:80/V/"
				
				var input = document.createElement("input");
				input.type = "hidden"
				input.name = "func";
				input.value = "quick-1-check1";
				frm.appendChild(input);
				
				var input = document.createElement("input");
				input.type = "hidden"
				input.name = "mode";
				input.value = "simple";
				frm.appendChild(input);
				
				var input = document.createElement("input");
				input.type = "hidden"
				input.name = "group_number";
				input.value = "000000633";
				frm.appendChild(input);
				
				frm.txtLibSearch.name = "find_request_1";										
			} else if (comboSearchValue.substr(0, 2) == 'ej') {		// electrong journal search
				frm.action = "titlesearch/serveTitleResults.cfm";
				
				var input = document.createElement("input");
				input.type = "hidden"
				input.name = "searchType";
				
				// check for advanced search features
				var advSearch = comboSearchValue.substr(2, 2);
				if (advSearch) {
					if (advSearch == "tk") {		// title keywords
						input.value = "1";
						frm.txtLibSearch.name = "title";
					} else if (advSearch == "et") {	// exact title
						input.value = "4";
						frm.txtLibSearch.name = "exactTitle";
					} else if (advSearch == "in") {	// ISSN (skip "source database" - value "3" - because it is a dropdown select)
						input.value = "2";
						frm.txtLibSearch.name = "ISSN";
					} else {
						input.value = "1";			// didn't recognize advanced search, so just default to title keywords
						frm.txtLibSearch.name = "title";
					}
				} else {	// not an advanced search			
					input.value = "1";				// default title keywords
					frm.txtLibSearch.name = "title";
				}
				
				frm.appendChild(input);
			} else {
				// if search not recognized, kill the submission
				YAHOO.util.Event.stopEvent(evtSubmit);
				
				// hide from user loading icon
				YAHOO.util.Dom.get("searchLoadingIcon").style.visibility = "hidden";
			}
		}
		
		// subscribe to the form "submit" event
		YAHOO.util.Event.addListener("frmLibSearch", "submit", manageForm);
		
		// sets active tab
		function setTabView(event) {
			// do not follow link
			YAHOO.util.Event.preventDefault(event);
			
			// if user is Asking a Question, change to that tab
			if (YAHOO.util.Dom.hasClass(this, "linkAskQuestion")) {
				oTabView.set('activeIndex', 1);
			}
			
			// if user wants ILL, change to that tab
			if (YAHOO.util.Dom.hasClass(this, "linkILL")) {
				oTabView.set('activeIndex', 2);
			}
		}
		
		// subscribe to Ask Question links' "click" event
		var askLinks = YAHOO.util.Dom.getElementsByClassName("linkAskQuestion");
		YAHOO.util.Event.addListener(askLinks, "click", setTabView);
		
		// subscribe to ILL links' "click" event
		var ILLLinks = YAHOO.util.Dom.getElementsByClassName("linkILL");
		YAHOO.util.Event.addListener(ILLLinks, "click", setTabView);
		
		// focus cursor in search box
		setFormFocus();
		
		// preload CSS background images
		/*if (document.images) {
			var img1 = new Image();
			var img2 = new Image();
			
			img1.src = "../graphics/split-button-arrow-active.png";
			img2.src = "../graphics/split-button-arrow-white.png";
		}*/
	};
	
	// event handler fires when the reference tab is fully loaded
	oTabView.getTab(0).on("dataLoadedChange", tabSearchSetup);
	
	// set up ILL tab
	var tabILLSetup = function (event) {
		// focus on username box
		YAHOO.util.Dom.get("frmILL").bor_id.focus();
	}
	
	// event handler fires when the ILL tab is fully loaded
	oTabView.getTab(2).on("dataLoadedChange", tabILLSetup);
	
	// load Google script for CSE on tab load
	var tabGoogleSetup = function(event) {
		YAHOO.util.Dom.get("cse-search-box").q.focus();
		Get.script("http://www.google.com/coop/cse/brand?form=cse-search-box&lang=en");
	}
	
	// event handler fires when the Google CSE tab is fully loaded
	oTabView.getTab(3).on("dataLoadedChange", tabGoogleSetup);
})();