// Instantiate and configure Loader:
var loader = new YAHOO.util.YUILoader({

    // Identify the components you want to load.  Loader will automatically identify
    // any additional dependencies required for the specified components.
    require: ["autocomplete", "tabview", "animation", "element", "button", "dom", "event"],

    // Configure loader to pull in optional dependencies.  For example, animation
    // is an optional dependency for slider.
    loadOptional: true,

    base: "http://www2.lib.virginia.edu/scripts/yahoo/",
    comboBase: "http://www2.lib.virginia.edu/scripts/yahoo/combo?",

    // The function to call when all script/css resources have been loaded
    onSuccess: function() {



// Namespace our global variables and functions
var uvalib = {
  searchEl: "search", // ID of search widget
  searchInCleared: false,
  simpSrchTip: "search for keywords...",
  balanceSrchInputs: function(e,inputs) { // function to keep search value the same between tabbing
		if(typeof e != 'undefined' && e.type == 'load') {
			uvalib.resetSrchInputs(inputs);
		} else {
			for (var i=0; i<inputs.length; i++) {
				inputs[i].value = this.value;
				YAHOO.util.Dom.removeClass(inputs[i],"dimmed");
			}
		}
  },
  resetSrchInputs: function(inputs) {
		for (var i=0; i<inputs.length; i++) {
			// Add a dimmed hint message to the search input
			//alert(inputs[i].form.id);
			//inputs[i].value = uvalib.simpSrchTip;
			inputs[i].value = YAHOO.util.Dom.getAttribute(inputs[i], 'alt');
			YAHOO.util.Dom.addClass(inputs[i],"dimmed");
		}
  },
  clearSrchInputs: function(e,inputs) {
		for (var i=0; i<inputs.length; i++) {
			if(inputs[i].value == YAHOO.util.Dom.getAttribute(inputs[i], 'alt')) inputs[i].value = '';
			YAHOO.util.Dom.removeClass(inputs[i],"dimmed");
		}
  }
  // Make sure there's no comma after last property, as that breaks js in Safari
}


var $E = YAHOO.util.Event;
var $D = YAHOO.util.Dom;
var $El = YAHOO.util.Element;

// Make header search tab widget
YAHOO.util.Event.onAvailable(uvalib.searchEl, function() {
		// Build tabview widget from existing markup
		var tabView = new YAHOO.widget.TabView(uvalib.searchEl);
		// Make Yahoo buttons out of regular search submit buttons
		var srchBtns = $D.getElementsByClassName('searchBtn','input','search');
		var srchBtnsYUI = [];
		for(var i=0; i<srchBtns.length; i++) {
			srchBtnsYUI[i] = new YAHOO.widget.Button(srchBtns[i].id,{ id: srchBtns[i].id+'YUI' });
		}		
		// Set listeners for the simple search text inputs within the tabs
        var simpSrchInputs = $D.getElementsByClassName('searchIn','input','search');
        $E.on(simpSrchInputs, 'blur', uvalib.balanceSrchInputs, simpSrchInputs);
		$E.on(simpSrchInputs, 'focus', uvalib.clearSrchInputs, simpSrchInputs);
		
		for (var i=0; i<tabView.get('tabs').length; i++) {
			tabView.getTab(i).addListener('click', function(e,inputs){
				var input = inputs[1][inputs[0]];
				if (input.value == '') {
					uvalib.resetSrchInputs(inputs[1]);
				}
			}, [i,simpSrchInputs]);
		}
		
		uvalib.resetSrchInputs(simpSrchInputs);
});

// Make global navigation bar
YAHOO.util.Event.onAvailable('globalNav', function() {   
   
	var expand = new YAHOO.util.Anim('globalNav', { paddingBottom: {from: 0, to: 2, unit: 'em'} }, 0.2, YAHOO.util.Easing.easeOut);
	var contract = new YAHOO.util.Anim('globalNav', { paddingBottom: {from: 2, to: 0, unit: 'em'} }, 0.2, YAHOO.util.Easing.easeOut);
	var fadeIn = new YAHOO.util.Anim('libNav', { opacity: {from: 0, to: 1} }, 1, YAHOO.util.Easing.easeOut);
	var fadeOut = new YAHOO.util.Anim('libNav', { opacity: {from: 1, to: 0} }, 0.2, YAHOO.util.Easing.easeOut);
	var mOpen = false;
	var oTitle = 'Click to hide the below menu of links to U.Va. Libraries';
	var cTitle = 'Click to show a menu of links to U.Va. Libraries';
	function openMenu(e, ln) {
		if(!mOpen) {
			$D.addClass(lli, 'pressed');
			expand.animate();
			expand.onComplete.subscribe(function(){
				$D.setStyle(ln, "left", "0px");
				$D.setStyle(ln, "opacity", "0");
				fadeIn.animate();
			});
			mOpen = true;
			this.setAttribute('title',oTitle);
		} else {
			$D.removeClass(lli, 'pressed')
			fadeOut.animate();
			fadeOut.onComplete.subscribe(function(){
				contract.animate();
				$D.setStyle(ln, "left", "-3000px");
			});
			mOpen = false;
			this.setAttribute('title',cTitle);
		}
	}
	
	var ln = $D.get('libNav');
	var ll = $D.get('LibrariesLink');
	var lli = ll.parentNode;
	var llContent = ll.innerHTML;
	// create first span element
	newllNode = document.createElement('span');
	newllNode.id = 'LibrariesLink';
	newllNode.innerHTML = '<span><span>'+llContent+'</span></span>';
	lli.replaceChild(newllNode,ll);
	//var ll = lli.firstChild;  //The First child node might be a text node which doesn't like attributes
	var ll = $D.getFirstChildBy(lli,function(node) { return (node.nodeName != "#text")});
	ll.setAttribute('title',cTitle);
	
	// Add a hover class to the first span, with ID "LibrariesLink"
	$E.on(newllNode, 'mouseover', function(e,obj) { $D.addClass(obj, 'hover'); },newllNode);
	$E.on(newllNode, 'mouseout', function(e,obj) { $D.removeClass(obj, 'hover'); },newllNode);

	//$D.setStyle(ln, "left", "-3000px");
	$E.on(ll, 'click', openMenu, ln);
	
	var globalNavLiEls = $D.get('globalNav').getElementsByTagName('li');
	//alert($D.get('globalNav').childNodes.length);
	for(var i=0; i<globalNavLiEls.length; i++) {
		//alert(globalNavLiEls[i].parentNode.parentNode.parentNode.id);
		if(globalNavLiEls[i].parentNode.parentNode.parentNode.id) {
			if($D.hasClass(globalNavLiEls[i],'first')) {
				$E.on(globalNavLiEls[i], 'mouseover', function(e,obj) { $D.addClass(obj, 'hover-first'); },globalNavLiEls[i]);
				$E.on(globalNavLiEls[i], 'mouseout', function(e,obj) { $D.removeClass(obj, 'hover-first'); },globalNavLiEls[i]);
			} else  {
				$E.on(globalNavLiEls[i], 'mouseover', function(e,obj) { $D.addClass(obj, 'hover'); },globalNavLiEls[i]);
				$E.on(globalNavLiEls[i], 'mouseout', function(e,obj) { $D.removeClass(obj, 'hover'); },globalNavLiEls[i]);
			}
		}
	}
} );


YAHOO.util.Event.onContentReady("DatabasesSeach",function(){
YAHOO.example.CustomFormatting = (function(){
	var query = '';
    // Instantiate DataSource
    var oDS = new YAHOO.util.ScriptNodeDataSource("http://uvalibmobile.appspot.com/databases.json?");
    oDS.responseSchema = {
        resultsList: "value.items",
        fields: ["title", "desc", "link"]
    };

    // Setting to default value for demonstration purposes.
    // The webservice needs to support execution of a callback function.
    oDS.scriptCallbackParam = "callback";

    // Instantiate AutoComplete
    var oAC = new YAHOO.widget.AutoComplete("DatabasesSearchIn","suggestContainer", oDS);

    oAC.suppressInputUpdate = true;
    oAC.maxResultsDisplayed = 1000;
    // Bump up the query delay to reduce server load    
    oAC.queryDelay = .1;

    // The webservice needs custom parameters
    oAC.generateRequest = function(sQuery) {
    	query = sQuery;
    	if (sQuery.length > 2) {
    	  oAC.setHeader("<div class='suggestHeader'>Databases matching '<span>"+sQuery+"</span>'</div>");
          return "count=1000&query=" + sQuery; }
        else {
          oAC.setHeader("<div class='suggestHeader'>Database titles starting with '<span>"+sQuery+"</span>'</div>");
          return "count=1000&startsWith=" + sQuery; }
    };

    // Result data passed as object for easy access from custom formatter.
    oAC.resultTypeList = false;

    // Customize formatter 
    oAC.formatResult = function(oResultData, sQuery, sResultMatch) {
        myregexp = new RegExp('('+sQuery+')', 'i')
        desc = oResultData.desc.replace(/<(.|\n)+?>/g,'')
        if (desc.length > 100) desc = desc.substring(0,100)+'...';
        var done = "<div class=\"result\"><div class=\"name\">" 
                   + oResultData.title.replace(/<(.|\n)+?>/g,'').replace(myregexp, "<b>$1</b>");
        if (sQuery.length > 2) 
            done += "</div><div class=\"desc\" >"+desc.replace(/<(.|\n)+?>/g,'').replace(myregexp, "<b>$1</b>")+"</div></div>";
        else
            done += "</div><div class=\"desc\" >"+desc.replace(/<(.|\n)+?>/g,'')+"</div></div>";
        return done;
    };

    oAC.itemSelectEvent.subscribe(function(sType, aArgs) {
        var oData = aArgs[2]; // object literal of selected item's result data
        window.location.href = oData.link.replace(/<(.|\n)+?>/g,'');
    });

    // Stub for form validation
    var validateForm = function() {
        // Validation code goes here
        return true;
    };

    return {
        oDS: oDS,
        oAC: oAC,
        validateForm: validateForm
    }
})();
});


    },

    // Configure the Get utility to timeout after 10 seconds for any given node insert
    timeout: 10000,

    // Combine YUI files into a single request (per file type) by using the Yahoo! CDN combo service.
    combine: true
});

// Load the files using the insert() method. The insert method takes an optional
// configuration object, and in this case we have configured everything in
// the constructor, so we don't need to pass anything to insert().
loader.insert();


