
function addEvent( obj, type, fn ) {
  if ( obj.attachEvent ) {
 obj['e'+type+fn] = fn;
  obj[type+fn] = function(){obj['e'+type+fn]( window.event );}
   obj.attachEvent( 'on'+type, obj[type+fn] );
  } else
    obj.addEventListener( type, fn, false );
   }
   function removeEvent( obj, type, fn ) {
     if ( obj.detachEvent ) {
       obj.detachEvent( 'on'+type, obj[type+fn] );
      obj[type+fn] = null;
     } else
       obj.removeEventListener( type, fn, false );
 }

startList = function() {
if (document.all&&document.getElementById) {
navRoot = document.getElementById("nav2");
for (i=0; i<navRoot.childNodes.length; i++) {
node = navRoot.childNodes[i];
if (node.nodeName=="LI") {
node.onmouseover=function() {
this.className+=" over";
  }
  node.onmouseout=function() {
  this.className=this.className.replace(" over", "");
   }
   }
  }
 }
}

function bookmark() {
	title = document.title; // Current Title
	url = document.location.href; // Current URL
	
	if ( window.external )
	{ 
		// IE Favorite
		window.external.AddFavorite( url, title);
	}
	else if ( window.sidebar )
	{ 
		// Mozilla Firefox Bookmark
		window.sidebar.addPanel(title, url,"");	

	} 
	else if (window.opera)
	{ 
		// Opera Hotlist
		alert("Opera users: Please press Control + T to bookmark this page.");
	} 
}



function OnLoad()
{
  //EventSelectors.start(Rules)
}

function onBodyLoad()
{
  // Like onload - only faster!
  if ( window.gmapLoad )
    gmapLoad();
  if( window.gmapLoadMarkers)
    gmapLoadMarkers();
    startList();
  
    if($('flashMessage'))
    {
      setTimeout(function(){ opacity('flashMessage', 100, 0, 1000); }, 2000);
  	  setTimeout(function(){ $('flashMessage').style.display='none'; }, 3000);
    }
    
    
    
}

function addClassName(el,className)
{
	removeClassName(el,className);
	el.className = (el.className + " " + className).trim();
}

function removeClassName(el,className)
{
	el.className = el.className.replace(className,"").trim();
}

document.getElementsByClassName = function(searchClass,node,tag)
{  
	if(node == null)node=document;
	var ce = new Array();
	if(tag==null || tag=='*')tag='*';
	var els = new Array();
	if (tag=='*' && document.evaluate)
	{
 		var xpr=document.evaluate("//*",document, null, 0, null);
		var t=true;
		while (t=xpr.iterateNext()){
			if(els.push)
				els.push(t);
			else
				els[els.length]=t;
    }; 
	}
	else
 	els = node.getElementsByTagName(tag);
 	var elsLen = els.length;
 	var pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)");
 	var i;var j;
 	for (i = 0, j = 0; i < elsLen; i++) {
  		if ( pattern.test(els[i].className) )
   			if (ce.push)
    			ce.push(els[i]);
   			else
    			ce[j++] = els[i];
 	}
	return ce;
}

function opacity(id, opacStart, opacEnd, millisec)
{
  //speed for each frame
  var speed = Math.round(millisec / 100);
  var timer = 0;

  //determine the direction for the blending, if start and end are the same nothing happens
  if(opacStart > opacEnd) {
    for(i = opacStart; i >= opacEnd; i--) {
      setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
      timer++;
    }
  }
  else if (opacStart < opacEnd)
  {
    for(i = opacStart; i <= opacEnd; i++)
    {
      setTimeout("changeOpac(" + i + ",'" + id + "')",(timer * speed));
      timer++;
    }
  }
}

//change the opacity for different browsers
function changeOpac(opacity, id)
{
  var object = document.getElementById(id).style; 
  object.opacity = (opacity / 100);
  object.MozOpacity = (opacity / 100);
  object.KhtmlOpacity = (opacity / 100);
  object.filter = "alpha(opacity=" + opacity + ")";
}

// EventSelectors 
// Copyright (c) 2005-2006 Justin Palmer (http://encytemedia.com)
// Examples and documentation (http://encytemedia.com/event-selectors)

var Rules = {
  
  '.eventType input:click, .eventType:loaded': function(element) {

      if(element.id == '')
      {
        var radioButtons = new Array;
        radioButtons = [$('event_type_0'),$('event_type_1'),$('event_type_2')];
        for(i = 0; i < radioButtons.length; i ++)
        {
          if(radioButtons[i].checked)
          {
            elementId = radioButtons[i].id;
          }
        }
      }
      else
      {
        elementId = element.id
        $('event_occurance').focus();
      }
      
      switch(elementId)
      {
        case 'event_type_0':
          $('startDate').style.display = 'block';
          $('endDate').style.display = 'none';
          $('frequencyDescription').style.display = 'none';
        break;
        
        case 'event_type_1':
          $('startDate').style.display = 'block';
          $('endDate').style.display = 'block';
          $('frequencyDescription').style.display = 'none';
        break;
      
        case 'event_type_2':
          $('startDate').style.display = 'none';
          $('endDate').style.display = 'none';
          $('frequencyDescription').style.display = 'block';
          
        break;
      }
  },
  
  '#flashMessage': function(element)
  {
    setTimeout(function(){ opacity('flashMessage', 100, 0, 1000); }, 2000);
  	setTimeout(function(){ $('flashMessage').style.display='none'; }, 3000);
  },
  
  '.defaultField': function(element)
  {
    element.focus();
  },
  
  'select': function(element)
  {
    element.options[0].text = 'Please select one...';
  },
  '#ecardChooser img:click': function (element)
  {
    //console.log('YEAH!');
    $(element.id+'_radio').checked = true;
    var imgs = document.getElementsByClassName('inner');
    for(i=0; i<imgs.length; i++)
    {
      if(imgs[i].className == 'inner active')
      {
        imgs[i].className = 'inner';
      }
      //console.log(element.id.split('_'));
      
      if(i+1 == element.id.split('_')[1])
      {
        imgs[i].className = 'inner active';
      }
    }
    element.className = 'active';
  }
}

var EventSelectors = {
  version: '1.0_pre',
  cache: [],
  
  start: function(rules) {
    this.rules = rules || {};
    this.timer = new Array();
    this._extendRules();
    this.assign(this.rules);
  },
  
  assign: function(rules) {
    var observer = null;
    this._unloadCache();
    rules._each(function(rule) {
      var selectors = $A(rule.key.split(','));
      selectors.each(function(selector) {        
        var pair = selector.split(':');
        var event = pair[1];
        $$(pair[0]).each(function(element) {
          if(pair[1] == '' || pair.length == 1) return rule.value(element);
          if(event.toLowerCase() == 'loaded') {
            this.timer[pair[0]] = setInterval(this._checkLoaded.bind(this, element, pair[0], rule), 15);
          } else {
            observer = function(event) {
              var element = Event.element(event);
              if (element.nodeType == 3) // Safari Bug (Fixed in Webkit)
            		element = element.parentNode;
              rule.value($(element), event);
            }
            this.cache.push([element, event, observer]);
            Event.observe(element, event, observer);
          }
        }.bind(this));
      }.bind(this));
    }.bind(this));
  },
  
  // Scoped caches would rock.
  _unloadCache: function() {
    if (!this.cache) return;
    for (var i = 0; i < this.cache.length; i++) {
      Event.stopObserving.apply(this, this.cache[i]);
      this.cache[i][0] = null;
    }
    this.cache = [];
  },
  
  _checkLoaded: function(element, timer, rule) {
    var node = $(element);
    if(element.tagName != 'undefined') {
      clearInterval(this.timer[timer]);
      rule.value(node);
    }
  },
  
  _extendRules: function() {
    Object.extend(this.rules, {
     _each: function(iterator) {
       for (key in this) {
         if(key == '_each') continue;         
         var value = this[key];
         var pair = [key, value];
         pair.key = key;
         pair.value = value;
         iterator(pair);
       }
     }  
    });
  }
}

// Remove/Comment this if you do not wish to reapply Rules automatically
// on Ajax request.
Ajax.Responders.register({
  onComplete: function() { EventSelectors.assign(Rules);}
})

