// Custom Functions for Emphasis Search
// Dependencies : js/emphasis_common.js, js/yui/*
// Start Logging
YAHOO.widget.Logger.enableBrowserConsole()

var Emp = YAHOO.namespace('YAHOO.Emphasis');

Emp.init = function() {
	
	// Apply Dynamic Styles & Behaviors
	// Emp.Logger.init(); // Fire Up the Logger for IE
	Emp.DiseaseSuggest.init(); // Attach XHR Autocomplete to search fields. 
	Emp.Labels.init(); // Display default label to search fields
	Emp.Cloakmail.init();
	Emp.Tabitha.init() // Tabbing System... converts div section system into a dynamically tabbed interface. 
}

Emp.Tabitha = function() {

	var initTabitha = function(elem) {
		// Working on a Tabitha Block
		var sections = DOM.getElementsByClassName('section', 'div', elem);
		var default_block = -1;
		var tab_output = "";
		var hdr;

		// Set Tabs
		for(var i=0; i < sections.length; i++) {
			sections[i].id = "tabsection_" + i;
			if(sections[i].getAttribute('default_block')) {
				default_block = i;
			} else{
				sections[i].style.display = "none";
			}
			hdr = DOM.getElementsByClassName('section_title', 'div', sections[i])[0];	
			// body = DOM.getElementsByClassName('section_body', 'div', sections[i])[0];	
			tab_output += '<li class="tablink';
			if(default_block == i) 
				tab_output += ' active';
			tab_output +='" id="tablink_' + i + '"><a href="#" onclick="return false;">' + hdr.innerHTML + '</a></li>';
			hdr.style.display = "none";

		}
		
		// Handle exception where we hid everything!
		if(default_block == -1) { 
			sections[0].style.display = "block";
			default_block = 0;
		}
	
		var tabs = document.createElement('ul');
		tabs.className = "tablinks";
		tabs.innerHTML = tab_output;
		var first_child = DOM.getFirstChild(elem);
		elem.insertBefore(tabs,first_child);

		// Add Event Handlers
		EVENT.addListener(DOM.getElementsByClassName('tablink','li',elem),'click',showSection);
	}
	
	var showSection = function(e) {
		var elem = EVENT.getTarget(e);
		while(elem.tagName != 'LI') {
			elem = elem.parentNode;
		}
		
		var scope = elem;
		while(scope.className.indexOf('tabitha') == -1) {
			scope = scope.parentNode;
		}
		
		var node_id = elem.id.substr(8);
		var tablinks = DOM.getElementsByClassName('tablink','LI',scope);
		DOM.removeClass(tablinks, 'active')
		DOM.addClass(elem, 'active');
		
		var sections = DOM.getElementsByClassName('section','div',scope);
		for(var i in sections) {
			sections[i].style.display = "none";
		}
		DOM.get('tabsection_' + node_id).style.display = "block";
	
	}

	return {
		init:function() {
			var tab_blocks = DOM.getElementsByClassName('tabitha', 'div');
			for(var i in tab_blocks) {
				initTabitha(tab_blocks[i]);
			}
		}
	}
}();

Emp.Cloakmail = function() {
	// This is a simple script to help cloak emails from spam harvesting bots etc. 
	// It's not too hard to crack, but relies on obscurity.
	// Use the format <span class="cloakmail"> 
	
	var init = function(elem) {
		var user = elem.getAttribute('user');
		var domain = elem.getAttribute('domain') ? elem.getAttribute('domain') : 'emphasissearch.com';
		var addl = elem.getAttribute('addl'); 
		var content = elem.getAttribute('content');
		content = content.replace('#', '@');
		
		var href="mailto:" + user + "@" + domain;
		if(addl) href += "?" + addl; 
		
		elem.href = href;
		elem.innerHTML = "<a href=" + href + ">" + content + "</a>"; 
	}
	
	return {
		init:function() {
			var elems=DOM.getElementsByClassName('cloakmail');
			for(var i in elems) {
				init(elems[i]);
			}			
		}
	}
}();


Emp.DiseaseSuggest = {

	init:function () {
		
	    this.diseaseDS = new YAHOO.widget.DS_XHR(this.xhr_location, ["\n", "\t"]);
	    this.diseaseDS.responseType = YAHOO.widget.DS_XHR.TYPE_FLAT;
	    this.diseaseDS.maxCacheEntries = 60;
	    this.diseaseDS.queryMatchSubset = true;
	
		// Find all disease_search fields.
		this.elems = DOM.getElementsByClassName("disease_search","DIV");
		for(var i in this.elems) {
			this.input = DOM.getElementsByClassName("disease_input","INPUT",this.elems[i]);
			this.options = DOM.getElementsByClassName("disease_options","DIV",this.elems[i]);
			
			this.disease_suggest = new YAHOO.widget.AutoComplete(this.input[0],this.options[0], this.diseaseDS);
		    this.disease_suggest.prehighlightClassName = "yui-ac-prehighlight";
		    this.disease_suggest.minQueryLength = 3; 
			this.disease_suggest.maxResultsDisplayed = 30;
		    this.disease_suggest.useShadow = true;
		    
		    if(this.options[0].getAttribute('suggest_options')) { 
			   this.fnCustomFormatter = function(oResultItem, sQuery) {
			        var sKey = oResultItem[0];
			        var sAOC = oResultItem[1];
			        var aMarkup = ["<div class='results'><div class='result_disease'>",
			            sKey,
			            "</div><div class='result_aoc'>",
			            sAOC,
			            "</div></div>"];
			        return (aMarkup.join(""));
			    };
			    this.disease_suggest.formatResult = this.fnCustomFormatter; 	    	
		    }
		}
	}
};






Emp.Labels = function() {
   // Finds all input tags with title attributes and creates a label inside.
   
   // Wouldn't take much to do the same with textarea.... would it?
   var initLabel = function(input) {
      var lbl = input.title;
      input._label = lbl;
      EVENT.addListener(input, 'focus', focusedLabel);
      EVENT.addListener(input, 'blur', blurredLabel);
      if(input.value == '')showLabel(input);
      }
   var wipeLabels = function(div) {

      var inputs = document.getElementsByTagName('input', div);
  	  YAHOO.log(inputs.length);
      for(var i = 0; i < inputs.length; i++) {
         if(inputs[i].value == inputs[i]._label) hideLabel(inputs[i]);
         }
      }
   var focusedLabel = function(e) {
      var input = window.event ? window.event.srcElement : e ? e.target : null;
      if(input.value == input._label)hideLabel(input);
      }
   var blurredLabel = function(e) {
      var input = window.event ? window.event.srcElement : e ? e.target : null;
      if(input.value == '')showLabel(input);
      }
   var hideLabel = function(input) {
      input.value = '';
      DOM.removeClass(input, 'hint');
      }
   var showLabel = function(input) {
      input.value = input._label;
      DOM.addClass(input, 'hint');
      }
   return {
      init : function(id, form) {
       
      	var div; 
        if(!document.getElementById ||!document.getElementById(id)) {
        	div = document.getElementsByTagName('body');
        	div = div[0];
        } else {
         	div = document.getElementById(id);
        }
        var titles = document.getElementsByTagName('input');
        for(var i = 0; i < titles.length; i++) {
         	if(titles[i].type == "text" && titles[i].title) {
          		initLabel(titles[i]);
         	}
        }
        if(!form) {
         	if(div.getElementsByTagName('form')[0]) var form = div.getElementsByTagName('form')[0];
        	else return false;
        }
        EVENT.addListener(form, 'submit', function() {
            wipeLabels(div)}
        	);
        }
     }
   }
(); // Yay, we have closure.



Emp.Logger = {
	
	init : function() {
		var body = document.getElementsByTagName('body');
		DOM.addClass(body[0],'yui-skin-sam');
		myLogReader = new YAHOO.widget.LogReader('myLogger'); 
	}
}

EVENT.onDOMReady(Emp.init);
