function addEvent(_target,_event,_function){
	if (_target.addEventListener)
		_target.addEventListener(_event, _function, false );
	else{
		_target.attachEvent('on'+_event, _function);
		ieModel = true;	
	}	
}
// firebug degradiation
if (! ("console" in window) || !("firebug" in console)) {
    var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group"
                 , "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"];
    window.console = {};
    for (var i = 0; i <names.length; ++i) window.console[names[i]] = function() {};
}

// utility functions 
function endBubble(evt)
{
    if(evt.cancelBubble == false){ 
        evt.cancelBubble = true; 
        evt.returnValue = false;
        
     }
	 if (evt.stopPropagation) {
	    evt.stopPropagation(); 
	    evt.preventDefault();
    	
	 }
}
/**
 * This function allows the programmer to retrieve objects biased on the class name you 
 * want to retrieve. Similar to the GetElementByID and GetElementByTagName.
 * @member UtilNS
 * @param {object} oElm The object you want to search, could be a whole document or something more specific.
 * @param {string} strTagName The string containing the name of the tag name i.e. "a", "div", "span" what ever the class name is attached to.
 * If no tag is given it will search all elements.
 * @param {string} strClassName The string containing the class name you're searching for
 * @returns An array filled with the class names found in the search
 * @type Array
 * {@link  http://www.robertnyman.com/2005/11/07/the-ultimate-getelementsbyclassname/#more-256 getElementsByClassName} Utility Function
 */


function getElementsByClassName(oElm, strTagName, strClassName){
	var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
	var arrReturnElements = new Array();
	strClassName = strClassName.replace(/\-/g, "\\-");
	var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	var oElement;
	for(var i=0; i<arrElements.length; i++){
		oElement = arrElements[i];		
		if(oRegExp.test(oElement.className)){
			arrReturnElements.push(oElement);
		}	
	}
	return arrReturnElements;
}


function initOverList(){
   if(!document.getElementsByTagName) return;
   var LIs, listItem;
   var topMenu = document.getElementById("menu_Header");
   LIs = topMenu.getElementsByTagName('li');
   for(var i=0; i<LIs.length; i++){
      listItem = LIs[i];	  
      listItem.onmouseover=function(){
         this.className+=' hover';
      };
      listItem.onmouseout=function(){
         classNameTemp = this.className;
		 if(classNameTemp.match(" hover")) {
			 this.className=this.className.replace(' hover','');
		 }
		 else {
			 this.className=this.className.replace('hover','');
		 }
      };
   }

   var leftMenu = document.getElementById("colLeft_HElevations");
   if(leftMenu != null) {
	   LIs = leftMenu.getElementsByTagName('li');
	   for(var i=0; i<LIs.length; i++){
		  listItem = LIs[i];	  
		  listItem.onmouseover=function(){
			 this.className+=' hover';
		  };
		  listItem.onmouseout=function(){
			 classNameTemp = this.className;
			 if(classNameTemp.match(" hover")) {
				 this.className=this.className.replace(' hover','');
			 }
			 else {
				 this.className=this.className.replace('hover','');
			 }
		  };
	   }
   }
   
   
}

function initOverLabels(){
	if(!document.getElementById) return;
	var labels, id, field;
	labels = document.getElementsByTagName('label');
	for (var i = 0; i < labels.length; i++) {
		if (labels[i].className.indexOf('overlabel') != -1) {
			id = labels[i].htmlFor || labels[i].getAttribute('for');
			if (!id || !(field = document.getElementById(id))) {
				continue;
			} 
			if (field.value !== '') {
				hideLabel(field.getAttribute('id'), true);
			}
			field.onfocus = function () {
				hideLabel(this.getAttribute('id'), true);
			};
			field.onblur = function () {
				if (this.value === '') {
					hideLabel(this.getAttribute('id'), false);
				}
			};
			labels[i].onclick = function () {
				var id, field;
				id = this.getAttribute('for');
				if (id && (field = document.getElementById(id))) {
					field.focus();
				}
			};
		}
	}
}
function hideLabel (field_id, hide) {
	var field_for;
	var labels = document.getElementsByTagName('label');
	for (var i = 0; i < labels.length; i++) {
		field_for = labels[i].htmlFor || labels[i].getAttribute('for');
		if (field_for == field_id) {
			labels[i].style.display = (hide) ? 'none' : 'block';
			return true;
		}
	}
}
function addEvent(_target,_event,_function){
	if (_target.addEventListener)
		_target.addEventListener(_event, _function, false );
	else{
		_target.attachEvent('on'+_event, _function);
		ieModel = true;	
	}	
}
function catchKeyEvent(e,key){
   var _keyCode=keyCodeEvent(e);
   if(_keyCode!=null && key==_keyCode){
      cancelEvent(e);
      return true;
   }
   return false;
}
function keyCodeEvent(e){
   var _keyCode=null;
   if (!e) e = window.event;
   if(e.keyCode){
      _keyCode=e.keyCode;
   }else if(e.which){
      _keyCode=e.which;
   }else if(e.charCode){
      _keyCode=e.charcode;
   }
   return _keyCode;
}
function cancelEvent(e) {
   if (!e) e = window.event;
   if (e.preventDefault) {
      e.preventDefault();
   } else {
      e.returnValue = false;
   }
}
function stopEvent(e) {
   if (!e) e = window.event;
   if (e.stopPropagation) {
     e.stopPropagation();
   } else {
     e.cancelBubble = true;
   }
}
function initFormsSubmit(){
   try{
      var _form=document.forms[0];
      //searchSubmit
      addEvent(_form.btnSearch,'click',searchSubmit);
      addEvent(_form.search,'keypress',function(e){
         if(catchKeyEvent(e,13)==true){
            searchSubmit(e);
         }
      });
   }catch(ex){ }
}
function searchSubmit(e){
   try{
      var _keyword = document.getElementById('search');
      document.location='/search.aspx?keyword='+_keyword.value;
   }catch(ex){}
}
function fixMenu() {
	//var leftCol = (document.getElementById("colLeft")) ?  document.getElementById("colLeft") : document.getElementById("colLeft_Health");
	var selected = getElementsByClassName(document, "li", "selected")[0];
	if(!selected) {
		var branch = document.getElementById("menuId");
		
		if(!branch) return;
		var openId = branch.innerHTML;

		//console.debug("the branch id: %s", openId);

		var aTag = (openId) ? document.getElementById(openId): null;
		if(aTag) {
			// menu item not top level menu
			aTag.className += " selected";
		}
		else {
			var leaf = document.getElementById("menuItem");
			openATag = leaf.innerHTML;
		
			leafNode = (openId) ? document.getElementById(openId): null;
			if(leafNode) {
				// menu item not leaf level xml not right
				leafNode.className += " selected";
			}
			else {
				// find by id in url
				var urlSearch = new String(location.search);	
				urlSearchtemp = urlSearch.substring(1);
				urlSearchArr = urlSearchtemp.split("&");
				//console.debug("url items", urlSearchArr);
				if(urlSearchArr[0].indexOf("id=") > -1) {
						pageId = urlSearchArr[0].substring(3);
						var openBranch = getElementsByClassName(document, "li", "openBranch");
						if(openBranch[0]) {
							var menuATags = openBranch[0].getElementsByTagName("a");
							for(var i=0, len = menuATags.length; i < len; i++) {
								//console.debug("%d %s %b", i, menuATags[i].href, menuATags[i].href.search(pageId));
								if(	menuATags[i].href.search(pageId) > -1) {
									menuATags[i].className += " selected";
									break;
								}
							}
						}
						else {
							var bc = getBreadCrumb("last");
							//console.log("it got here");
							
							var aTagText = null
							
							var container = branch.parentNode;
							var menuATags = container.getElementsByTagName("a");
							
							for(var j=1, lenOuter = bc.len; j < lenOuter; j++) { 
								for(var i=0, len = menuATags.length; i < len; i++) {
									aTagText = (menuATags[i].textContent)? menuATags[i].textContent: menuATags[i].innerText
									
									//alert(aTagText + "length "+aTagText.length + "bread Crumb :"+bc.arr[j]+": len " + bc.arr[j].length);
									if(	aTagText.search(bc.arr[j]) > -1) {
										menuATags[i].className += " selected";
										var uls = menuATags[i].parentNode.getElementsByTagName("UL");
										//console.debug("ul", uls.length);
										
										if(uls.length >= 1) {
											var node = menuATags[i]
											do {
												node = node.parentNode;
											}while(node.parentNode.className.search("menu") != 0) 
	
											//console.debug("%s %s %o",node.parentNode.class, node.parentNode.tagName, node);
											node.className += " openBranch";
										}
										break;
									}
								}
							
							}
							/*
							var selectedFinal = getElementsByClassName(document, "a", "selected");
							if(selectedFinal.length == 0)
								menuATags[0].className += " selected";
							*/
					}
				}
			}

		}

	}

}
var topMenu = ["home", "whatwedo", "donors", "grantseekers", "about", "mail"];
function fixTopMenu() {
	//var selected = getElementsByClassName(document, "li", "currSection")[0];
	//if(!selected) {
		var bc = document.getElementById("breadcrumb_Health");
		
		if(!bc) return;

		var aTag = getBreadCrumb(1);
		var tab = null;
		var tempA = null;
		
		for(var i=0, len = topMenu.length; i < len; i++) {
				tab = document.getElementById(topMenu[i]);
				tempA = tab.firstChild;
				if(tab.className.search(/currSection/) > -1) {
					tab.className = tab.className.replace(/currSection/,"");	
				}
				aTagText = (aTag.text.innerHTML) ? aTag.text.innerHTML: aTag.text ;
				if(tempA.innerHTML.charAt(0) == aTagText.charAt(0)) {
					tab.className += " currSection";
					break;
				}
		}
	//}
}
 
function getBreadCrumb(aTagNumber){
	var bc = document.getElementById("breadcrumb_Health");
	var aTagText = ""
	var bcObj = new Object();
	if(!bc) return aTagText;
	
	var aTag = bc.getElementsByTagName("a");
	if((parseInt(aTagNumber) != NaN) && aTag[aTagNumber]) {
		aTagText = aTag[aTagNumber];
		bcObj.text = aTagText;
		bcObj.len = aTag.length;
		bcObj.arr = aTag;
	}
	else {
	 	pTag = (bc.textContent)? bc.textContent: bc.innerText;
		pTag = pTag.replace(/\n/,"");
		aTagArr = pTag.split(" > ");
		
		bcObj.len = aTagArr.length;
		bcObj.arr = aTagArr;
		bcObj.text = aTagArr[aTagNumber];
		for(var i=0; i < aTagArr.length; i++) {
			var newLine = aTagArr[i].search(/\n/);
			if(newLine > -1) {
				//alert(aTagArr[i] + " newline Pos:" + newLine + " strlen" + aTagArr[i].length);
				aTagArr[i] = aTagArr[i].substring(0, newLine);
				//alert(aTagArr[i] + " " + aTagArr[i].length);
				space = aTagArr[i].search(" ");
				if(space == 0) {
					aTagArr[i] = aTagArr[i].substring(space+1, aTagArr[i].length);
					//alert(aTagArr[i] + " " +aTagArr[i].length);
				}
			}
		}
		
	}
	
	return bcObj;
}


addEvent(window,'load',initOverLabels);
addEvent(window,'load',initOverList);
addEvent(window,'load',initFormsSubmit);
addEvent(window,'load',fixTopMenu);
addEvent(window,'load',fixMenu);
