/* 

Atlantic BT base scripts
v. 1.5

CHANGELOG:
Date		Who				What
3-18-08		Locke & Mark	new: add new functions -- "removeClass," "appendClass," and "String.prototype.trim"
2011-03-04	Jeremy S		library-style declaration

*/
(function($) {
abtlib = {
	general : {
		test : function(){ $('body').prepend('ABT library loaded'); }
		, equalHeights : function(selector){
				$(document).ready(function() {
					$(selector).equalHeights();
				});
		}//----	lib.general.equalHeights
		, cycleInit : function(cycleSelector){
			$(function(){
				$('#' + cycleSelector)
					.after('<div id="'+cycleSelector+'-nav">')
					.cycle({'pager':'#'+cycleSelector+'-nav'});
			});
		}//----	lib.general.rotator
		, categoryMenuAjax : function(){
			$(function(){
					//ajax loading of content pages when clicking on sidebar nav
					$('#sidebar-nav').delegate('li:not(.ext) a', 'click', function(){
						var $this = $(this)
							,target = $this.attr('href');
							
						//update active classes
						$('#sidebar-nav').find('li.active').removeClass('active');
						$this.parent().addClass('active');
						
						$('#page-content')
							.find('h1,div.content-inner').fadeOut()
							.end()
							.prepend('<div class="loading-box"><p>Loading Content &hellip;</p><img src="/images/ajax_loading.gif" alt="" /></div>')
							.load(target + ' #page-content');
						return false;
					});
				});
		}//----	lib.general.categoryMenuAjax
	}//----	lib.general
	, homepage : {
		rotator : function(cycleSelector){
			$(function(){
				$(cycleSelector)
					.after('<div id="cycle-nav">')
					.cycle({'pager':'#cycle-nav'});
			});
		}//----	lib.homepage.rotator
		
	}//---- lib.homepage
	, search : {
		toggleAdvancedSearch : function(){
			$(function(){
				var $advancedSearch = $('#site-search-advanced')
					,$searchResults = $('#search-results')
					,refineSearch = '#refine-search'
					;
				
				//hide by default
				//window.setTimeout(function(){ $advancedSearch.slideUp(); $(refineSearch).addClass('expand');  }, 2000);
				
				$searchResults.delegate(refineSearch, 'click', function(){
					$(this).toggleClass('expand');
					$advancedSearch.slideToggle();
					return false;
				});
			});
		}//----	lib.search.toggleAdvancedSearch
	}//----	lib.search
};
})(jQuery);




/*################################################################################## ABT BASE Functions */

/* Remove negative text-indent borders on links */
var theahrefs = document.getElementsByTagName('a');
//fix dotted line thing when link is OnClicked
for(var x=0;x!=theahrefs.length;x++){ theahrefs[x].onfocus = function stopLinkFocus(){this.hideFocus=true;}; }
//a:focus { -moz-outline-style: none; }   <-- this is found in the moz.css file to take care of firefox

/* Basic Toggle Functions */
function toggle(obj) {
	var el = document.getElementById(obj);
	if ( el.style.display != 'none' ) { el.style.display = 'none'; }
	else { el.style.display = ''; }
}

	/*
		Written by Jonathan Snook, http://www.snook.ca/jonathan
    	Add-ons by Robert Nyman, http://www.robertnyman.com
	*/
	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)
	}
	
	/*
		Snook Knockoff to get any attribute with any value
		By Mark C.
	*/
	function getElementsByAttribute(oElm, strTagName, strAttType, strAttName){
		var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
		var arrReturnElements = new Array();
		strAttName = strAttName.replace(/\-/g, "\\-");
		var oRegExp = new RegExp("(^|\\s)" + strAttName + "(\\s|$)");
		var oElement;
		for(var i=0; i<arrElements.length; i++){
			oElement = arrElements[i];      
			if(oRegExp.test(oElement.getAttribute(strAttType))){
				arrReturnElements.push(oElement);
			}   
		}		
		return (arrReturnElements)
	}

	

/*############################################################################## Event Handler Functions */

/*

	EVENT HANDLERS
	
	By Matt Read (http://mattread.com/archives/2005/10/faking-two-column-text/)
	from: http://www.scottandrew.com/weblog/articles/cbs-events
*/	

function addEvent(obj, evType, fn, useCapture) {
	if (obj.addEventListener) {
		obj.addEventListener(evType, fn, useCapture);
		return true;
	}
	else if (obj.attachEvent) {
		var r = obj.attachEvent("on"+evType, fn);
		return r;
	}
	else
		alert("Handler could not be attached");
}

function removeEvent(obj, evType, fn, useCapture) {
	if (obj.removeEventListener) {
		obj.removeEventListener(evType, fn, useCapture);
		return true;
	}
	else if (obj.detachEvent) {
		var r = obj.detachEvent("on"+evType, fn);
		return r;
	}
	else
		alert("Handler could not be removed");
}


/*########################################################################### Prototype Knockoffs Functions */

/*

	Shortcut scripts

*/

function $(id) {
	return document.getElementById(id);
}

function $2(id) {
	return document.getElementsByClassName(document.all,'*',id);
}

function $tags(name) {
	return document.getElementsByTagName(name);
}

function $new(type, id) {
	var element = document.createElement(type);
	if (id) element.id = id;
	return element;
}

function $text(text) {
	return document.createTextNode(text);
}



/*################################################################################## CSS Class Functions */

/*
	APPRENDCLASS and REMOVE CLASS
	scripts work in sync with CSS to remove/add classes. Functions will leave any 2nd class and only remove/add the 
	class designated by the 2nd parameter.
	
	written by Locke M, 3/17/08
*/

/* Doesn't append if className already present */
function appendClass(elm, appClass)
{
var currClass = elm.className;
if(!(new RegExp('\\b'+appClass+'\\b').test(currClass)) )
elm.className += (currClass? ' ':'') + appClass;
}

function removeClass(elm, remClass)
{
elm.className = elm.className
.replace(new RegExp('\\s*'+remClass+'\\s*'),' ')
.trim();
} 

/* String trim function to clean up white space */
String.prototype.trim = function(){ return this.replace(/^\s*¦\s*$/g,"")} 


/* Pause functions to pause. To replace setTimeOut() */
function pause(millis)
{
        var date = new Date();
        var curDate = null;

        do { curDate = new Date(); }
        while(curDate-date < millis)
}






/*#################################################################### Proprietary Functions, Misc. Functions */

/*
	PLACEHOLDER
	placeholder script for form fields default value. function needs a proprietary attribute placeholder="" for the 		
	function to work
*/

function activatePlaceholders() {
	var detect = navigator.userAgent.toLowerCase();
	if (detect.indexOf("safari") > 0) return false;
	var inputs = document.getElementsByTagName("input");
	for (var i=0;i<inputs.length;i++) {
	  if (inputs[i].getAttribute("type") == "text") {
	   if (inputs[i].getAttribute("placeholder") && inputs[i].getAttribute("placeholder").length > 0) {
		inputs[i].value = inputs[i].getAttribute("placeholder");
		inputs[i].onclick = function() {
		 if (this.value == this.getAttribute("placeholder")) {
		  this.value = "";
		 }
		 return false;
		}
		inputs[i].onblur = function() {
		 if (this.value.length < 1) {
		  this.value = this.getAttribute("placeholder");
		 }
		}
	   }
	  }
	}
}

window.onload=function() {
	activatePlaceholders();
}
