var ua = navigator.userAgent.toLowerCase();var isIE = ( (ua.indexOf("msie") != -1) && (ua.indexOf("opera") == -1) && (ua.indexOf("webtv") == -1) );versionMinor = parseFloat(navigator.appVersion);if (isIE && versionMinor >= 4) {versionMinor = parseFloat( ua.substring( ua.indexOf('msie ') + 5 ) );}
versionMajor = parseInt(versionMinor);

// Horizontal positioning, moo.fx style
fx.Position = Class.create();
fx.Position.prototype = Object.extend(new fx.Base(), {
	initialize: function(el, options) {
		this.el = $(el);
		this.iniX = Position.positionedOffset(this.el)[0]
		this.iniY = Position.positionedOffset(this.el)[1]
		this.setOptions(options);
	}
});

fx.Horizontal = Class.create();
Object.extend(Object.extend(fx.Horizontal.prototype, fx.Position.prototype), {	
	increase: function() {
		this.el.style.left = this.now + "px";
	},

	toggle: function(){
	  this.el.leftPos = Position.positionedOffset(this.el)[0];
		if (this.el.leftPos > 0) this.custom(this.el.leftPos, 0);
		else this.custom(0, this.iniX);
	}
});

Object.extend(Event, {
  _domReady : function() {
    if (arguments.callee.done) return;
    arguments.callee.done = true;

    if (this._timer)  clearInterval(this._timer);
    
    this._readyCallbacks.each(function(f) { f() });
    this._readyCallbacks = null;
},
  onDOMReady : function(f) {
    if (!this._readyCallbacks) {
      var domReady = this._domReady.bind(this);
      
      if (document.addEventListener)
        document.addEventListener("DOMContentLoaded", domReady, false);
        
        /*@cc_on @*/
        /*@if (@_win32)
            document.write("<script id=__ie_onload defer src=javascript:void(0)><\/script>");
            document.getElementById("__ie_onload").onreadystatechange = function() {
                if (this.readyState == "complete") domReady(); 
            };
        /*@end @*/
        
        if (/WebKit/i.test(navigator.userAgent)) { 
          this._timer = setInterval(function() {
            if (/loaded|complete/.test(document.readyState)) domReady(); 
          }, 10);
        }
        
        Event.observe(window, 'load', domReady);
        Event._readyCallbacks =  [];
    }
    Event._readyCallbacks.push(f);
  }
});

function add_load_event(func) {
	Event.onDOMReady(func);
}

function scroll_quicklinks(action, dir){
  var scroll_increment = 350;
  var qlinks = $('quicklinks_items');
  var scroll_increment = parseInt(qlinks.getAttribute("increment")) || 350;

  var length = 0;
  var links = qlinks.getElementsByTagName('a');
  for(var i=0;i<links.length;i++){ length += links[i].offsetWidth + 1; }
  
  switch(action){
    case "start" :
    var x_pos = parseInt(Position.positionedOffset(qlinks)[0]);
    var effect = new fx.Horizontal(qlinks);
    if (dir == 'right'){
      var end_pos = x_pos - scroll_increment < (length*-1 + 536) ? (length*-1 + 536) : x_pos - scroll_increment;
      effect.custom(x_pos, end_pos);
      if (end_pos ==  (length*-1 + 536)){
        $('quicklinks_arrow_r').style.visibility = 'hidden';
      }
      Element.show('quicklinks_arrow_l');
    }else{
      var end_pos = x_pos + scroll_increment > 0 ? 0 : x_pos + scroll_increment;
      effect.custom(x_pos, end_pos);
      if (end_pos ==  0){
        Element.hide('quicklinks_arrow_l')
      }
      $('quicklinks_arrow_r').style.visibility = '';
    }
    effect.toggle();
    break;
  }
}

function hide_left_arrow(){
  if ($('quicklinks_arrow_l')){
    Element.hide('quicklinks_arrow_l');
  }
}
Event.onDOMReady(hide_left_arrow);

function set_placeholders(){
  var inputs = document.getElementsByTagName('input');
  for (var i=0; i<inputs.length; i++){
    var input = inputs[i];
    if (input.getAttribute('placeholder')){
      if (input.value != '') continue;
 
      input.value = input.getAttribute('placeholder');
      input.onfocus = function(){
        if (this.value == this.getAttribute('placeholder')){
          this.value ='';
        }
      }
      input.onblur = function(){
        if (this.value == ''){
          this.value = this.getAttribute('placeholder');
        }
      }
      
    }
  }
}

debug = function(stuff){
  if ($('debug'))
    $('debug').innerHTML += stuff + '<br />';
}


var Sidenav = Class.create();
Sidenav.prototype = {
  initialize: function(id){
    this.sidenav = $(id);
    this.hide_invisibles();
    this.set_triggers();
  },
  
  hide_invisibles: function(){
    // Put into a js function so that people w/o JS can still see the content
    var containers = document.getElementsByClassName('expand-content');
    for(var i=0; i<containers.length; i++){
      var container = containers[i];
      Element.hide(container);
    }
  },
  
  set_triggers: function(){
    var triggers = document.getElementsByClassName('expand-trigger');
    for(var i=0; i<triggers.length; i++){
      var trigger = triggers[i];
      trigger.container = document.getElementsByClassName('expand-content', trigger.parentNode)[0];
      if (!trigger.container) trigger.container = document.getElementsByClassName('expand-content', trigger.parentNode.parentNode)[0];
      if (!trigger.container) continue;
      trigger.onclick = function(e){
        Element.toggle(this.container);
        Element.hasClassName(this, 'selected') ? Element.removeClassName(this, 'selected') : Element.addClassName(this, 'selected')
        return true;
      }
      
    }
  }
}

function createCookie(name, value, days) 
{
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	}
	else var expires = "";
	document.cookie = name+"="+value+expires+"; path=" + location.pathname;
}

function readCookie(name) 
{
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return false;
}

function eraseCookie(name) 
{
	createCookie(name,"",-1);
}

var active_tab = false;
var Tab = Class.create();
Tab.prototype = {
  initialize: function(link){
    this.link = $(link);
    this.link.tab = this;
    var loc = /#([a-z][\w.:-]*)$/i.exec(this.link.getAttribute('href'))[1];
    this.container = $(loc);
    
    this.eventClick = this.toggle.bindAsEventListener(this);
    Event.observe(this.link, 'click', this.eventClick)
  },
  toggle: function(e){
    this.show();
    Event.stop(e);
  },
  show: function(){
    if (active_tab) active_tab.tab.hide();
    active_tab = this.link;
	eraseCookie('current_tab');
	createCookie('current_tab', this.link.hash.replace(/#/,''), '1');
    Element.show(this.container);
    Element.addClassName(this.link, 'selected');
  },
  hide: function(){
    Element.hide(this.container);
    Element.removeClassName(this.link, 'selected')
  }
}


function set_tabs(){
	if (!$('tabs')) return;

	var previous_default_tab;
	var current_hash;
	
	// set up each tab and hide the corresponding content if the tab is not selected
	$A($('tabs').getElementsByTagName('a')).each(function(el) {
		if(document.location.hash) {
			new Tab(el);
			if (Element.hasClassName(el, 'selected')){
				Element.removeClassName(el, 'selected');
				previous_default_tab = el.tab;
			}
			if(document.location == el.href){
				active_tab = el;
				Element.addClassName(el, 'selected');
			} else {
				el.tab.container.style.display = 'none';
			}
		} else if(current_hash = readCookie('current_tab')) {
			new Tab(el);
		    var loc = /#([a-z][\w.:-]*)$/i.exec(el.href)[1];		
			if (Element.hasClassName(el, 'selected')){
				Element.removeClassName(el, 'selected');
				previous_default_tab = el.tab;
			}
			if(loc == current_hash) {
				active_tab = el;
				Element.addClassName(el, 'selected');
			} else {
				el.tab.container.style.display = 'none';
			}				
		} else {
			$A($('tabs').getElementsByTagName('a')).each(function(el) {
			// if this is an anchor
			if(el.href){
				new Tab(el);
				if (Element.hasClassName(el, 'selected')) {
					active_tab = el;
				} else {
					el.tab.container.style.display = 'none';
				}
			}
			});
		}
	});

	// if no tab is selected, it's because the hash of the current url is not pointing at a tab.
	if(!active_tab && document.location.hash) {
		previous_default_tab.show();
		// TODO: find the anchor by name and determine which tab, if any, it is located within.  activate that tab.
	}

	// for every link in the page that points at a hash that is a tab, change it to call the tab instead of the link
	convert_hash_hrefs_to_tab_links(document.getElementsByTagName('a'));
	convert_hash_hrefs_to_tab_links(document.getElementsByTagName('area'));
}

function convert_hash_hrefs_to_tab_links(links)
{
	var tablinks = $('tabs').getElementsByTagName('a');
	for(var i=0; i<links.length; i++) {
		var el = links[i];
		
		if(!el.href) {
			continue;
		}
		
		var str = el.pathname;
		
		if(isIE) {
			str = "/" + el.pathname;
		}

		if(str == document.location.pathname && el.hash != '' && el.tab==undefined) {
			for(var j=0; j<tablinks.length; j++) {
				var tablink = tablinks[j];

				if(el.href == tablink.href) {
					el.tab = tablink.tab;
					el.onclick = function(e) {
						this.tab.show();
						return false;
					};
				}
			}
		}
	}
}

function stripe_lists(){
  var stripers = $A(document.getElementsByClassName('zebra'));
  stripers.each(function(element){
    var children = $A(element.getElementsByTagName('li'));
    var odd = 0;
    children.each(function(child){
      odd = !odd;
      odd ? Element.addClassName(child, 'odd') : false;
    });
  });
}

if(isIE && versionMajor < 7) {
	javascript:void(document.execCommand("BackgroundImageCache",false,true));
}

/* adding styles for image gallery. May 25, 2007, ES */
/* Gallery: */
function prep() {
	window.gGalleries = document.getElementsByClassName("gallery");
	if (gGalleries.length > 0) {
		// if only one gallery on the page:
		window.gFeaturedImage = gGalleries[0].getElementsByTagName('img')[0];
		window.gList = gGalleries[0].getElementsByTagName('ul')[1];
		gList.style.display = "none";
		gList = gList.getElementsByTagName('a');

		window.gButtons = gGalleries[0].getElementsByTagName('ul')[0];
		gButtons.style.display = "block";
		gButtons = gButtons.getElementsByTagName('a');
		gButtons[0].className = "disabled";
		gButtons[0].onclick = function() { return gDirection('prev'); }
		gButtons[1].onclick = function() { return gDirection('next'); }

		window.gNumbers = gGalleries[0].getElementsByTagName('strong');
		window.gPosition = 0;
		window.gImages = new Array();
		for (x=0; x<gList.length; x++) {
			window.gImages[gImages.length] = gList[x].href;
		}

		// show total number of images:
		gNumbers[0].innerHTML = "| 1 of " + gList.length;
		gGalleries[0].getElementsByTagName("div")[2].style.display = "block";
	}
}
function gDirection(direction) {
	if (direction == 'prev' && gPosition > 0) --gPosition;
	else if (direction == 'next' && gPosition != gList.length-1) gPosition++;
	gFeaturedImage.src = gImages[gPosition];

	// show current image number:
	gNumbers[0].innerHTML = "| " + (gPosition+1) + " of " + gList.length;

	// if gPosition is at beginning or end, disable the prev or next button:
	if (gPosition == 0) { gButtons[0].className = "disabled"; }
	else { gButtons[0].className = ""; }
	if (gPosition == gList.length-1) { gButtons[1].className = "disabled"; }
	else { gButtons[1].className = ""; }

	return false;
}
window.onload = function() { prep(); }
/* end of Gallery */
/************
 * The following section is by Robin Daugherty and matches a section of admin.js
 ***********/
var admin_js_old_onload = window.onload;
window.onload = function()
{
	if(admin_js_old_onload) {
		admin_js_old_onload();
	}

	if(typeof admin_window_onloads != 'undefined') {
		for(var i=0; i < admin_window_onloads.length; i++) {
			admin_window_onloads[i]();
		}
	}
}

/* adds the given function to the window.onload procedure...inserts before any current onload.
 */
function onload_insert(fun)
{
	if(typeof admin_window_onloads == 'undefined') {
		admin_window_onloads = new Array;
	}
	
	admin_window_onloads.reverse();
	admin_window_onloads[admin_window_onloads.length] = fun;
	admin_window_onloads.reverse();
}

/* adds the given function to the window.onload procedure...adds after any current onload.
 */
function onload_add(fun)
{
	if(typeof admin_window_onloads == 'undefined') {
		admin_window_onloads = new Array;
	}
	
	admin_window_onloads[admin_window_onloads.length] = fun;
}


/* Searches the given DOM object for any form fields and disables them.
 */
function disable_fields_within(obj)
{
	var inputs = obj.getElementsByTagName('INPUT');
	disable_field_list(inputs);
	var selects = obj.getElementsByTagName('SELECT');
	disable_field_list(selects);
}

/* disables all fields in the nodelist given.
 */
function disable_field_list(nodelist)
{
	for(var i = 0; i < nodelist.length; i++) {
		var field = nodelist[i];
		if(typeof field == 'object') {
			if(typeof field.disabled != 'undefined') {
				field.disabled = true;
			}
		}
	}
}

function getElementsByClassName(className, tag, elm){
	var testClass = new RegExp("(^|\\s)" + className + "(\\s|$)");
	var tag = tag || "*";
	var elm = elm || document;
	var elements = (tag == "*" && elm.all)? elm.all : elm.getElementsByTagName(tag);
	var returnElements = [];
	var current;
	var length = elements.length;
	for(var i=0; i<length; i++){
		current = elements[i];
		if(testClass.test(current.className)){
			returnElements.push(current);
		}
	}
	return returnElements;
}

function selectOrUnSelectByClassName(className, selectOrUnselect)
{
	var elements;
	if(elements = getElementsByClassName(className)) {
		if(typeof(selectOrUnselect) == 'boolean') {
			for(var i = 0; i < elements.length; i++) {
				elements[i].checked = selectOrUnselect;
			}
		}
	}
}
