/* ------------------------------------------------------------------------

    Title:      Westwood Concern JavaScript (behavior) file
    Filename:   westwood_concern.js
    Method:     <link>
    Author:     Bob Prokop | bobprokop@yahoo.com
    Updated:    June 2009
    Notes:      ...		

------------------------------------------------------------------------- */
/*------ what to do onload of document ------*/
	// W3C DOM-standards user agents //
	if(window.addEventListener){
		window.addEventListener("load",init_page,false);
	}
	// Internet Explorer //
	else{
		window.attachEvent("onload",init_page);
	}
/*-------------------------------------------*/
function init_page(){
	/*--- remove the 'marching ants' from the specified element type ---*/
	stopTheAnts('a');
	/*--- open Flickr Photostream from gallery image ---*/
	openFlickr();
	/*--- NOT IN USE: set the width of caption div elements to match their child content's width (usually an image) ---*/
	//shrinkwrap();
	/*--- initialize the 'How They Voted' table(s) ---*/
	init_htv();
	/*--- hide Twitter ticker update timestamp hrefs & open links in new window ---*/
	twitterLinks();
}

//-------------------------------------------------------------------------------------------------------
// jQuery + plug-in stuff
//-------------------------------------------------------------------------------------------------------
$(document).ready(function(){
//--- preload images files ---//
$.preloadCssImages();

//--- sidebar photo transition ---//
$(function(){
    $('#photos').cycle({
        delay: 1600,
        speed: 600,
		pause: true,
        before: onBefore
    });
    function onBefore(){
		$('#photos img.notfirst').removeClass('notfirst');
        $('#caption').html('<h1>' + this.alt + '</h1>' + '<p>' + this.title + '</p>' );
		$('#caption').fadeIn(800);
    }
});

$(window).load(function(){ 

	// For each instance of p.caption
	$('.caption').each(function(){
		$(this)
			// Add the following CSS properties and values
			.css({
				'width' : $(this).children('img').width() + 'px'
			})
	// End $(this)
	});

});

//--- twitter ticker ---//
$(function(){
    $('#twitter_update_list').cycle({
		fx:     'zoom', 
    	speedIn:  400, 
    	speedOut: 200, 
    	delay:  3000,
		pause: true
	})
});


//--- news and events banner transition ---//
$(function(){
	$('#news_photos').cycle({ 
		delay: 600,
        speed: 400,
		fx: 'scrollHorz',
		pause: true,
		prev:   '#prev', 
   		next:   '#next',
		before: onBeforeBanner
	});
    function onBeforeBanner(){
		$('#news_photos p.notfirst').removeClass('notfirst');
        $('#banner_caption').html('<h2>' + this.firstChild.lastChild.alt + '</h2>' + '<p>' + this.firstChild.lastChild.title + '</p>' );
		$('#banner_caption').show();
    }
});
});
//-------------------------------------------------------------------------------------------------------
// The following scripts are called from the init_page function (and some of these call other functions) 
//-------------------------------------------------------------------------------------------------------

/*--- remove the 'marching ants' from the specified element type ---*/
function stopTheAnts(elTypeOrVar){
	var elements = document.getElementsByTagName(elTypeOrVar);
		for(var i=0; i<elements.length; i++){
			elements[i].onfocus = function(){
				if(this.blur)this.blur();
			}
		}
}
function openFlickr(){
	if(document.getElementById('flickr')){
		var flickr = document.getElementById('flickr');
			flickr.onclick = function(){
				window.open('http://www.flickr.com/photos/39059912@N06/sets/', 'flickr');
			}
	}
}
/*--- NOT IN USE: set the width of caption div elements to match their child content's width (usually an image) ---*/
/*function shrinkwrap(){
	if(document.getElementsByTagName('div')){
		var div = document.getElementsByTagName('div');
		for(var i=0; i<div.length; i++){
			if(div[i].className == 'caption' || div[i].className == 'caption floatR' || div[i].className == 'caption floatL'){
				var contentWidth = div[i].childNodes[0].clientWidth;
				div[i].style.width = contentWidth + 'px';
			}
		}
	}
}*/
/*--- Initialize 'How They Voted' tables ---*/
function init_htv(){
	if(document.getElementsByTagName('strong')){
		var strong = document.getElementsByTagName('strong');
			for(var i=0; i<strong.length; i++){
				if(strong[i].className == 'caps toggle'){
					strong[i].title = 'Click to toggle display of contact information';
					strong[i].onclick = function(){
						this.className = (this.className == 'caps toggle red') ? 'caps toggle' : 'caps toggle red';
						this.nextSibling.className = (this.nextSibling.className == 'indent block') ? 'indent  hide' : 'indent block';
						this.previousSibling.className = (this.previousSibling.className == 'left border') ? 'left border hide' : 'left border';

						/* need this conditional statement for IE6 due to lack of :hover support */
						if(window.attachEvent){ /* if IE6 */
							this.parentNode.parentNode.className = (this.parentNode.parentNode.className == 'hilite IEhover') ? 'stripe': 'hilite IEhover';
						}
						else{ /* if modern, standards-compliant user-agent */
							this.parentNode.parentNode.className = (this.parentNode.parentNode.className == 'hilite') ? 'stripe' : 'hilite';
						}

				}
			}
		}
	}
}
/*--- don't show the timestamp links in Twitter ticker element and open Twitter ticker links in new window ---*/
function twitterLinks(){
	var tickerHrefs = document.getElementById('twitter_update_list').getElementsByTagName('a');
		for(var i=0; i<tickerHrefs.length; i++){
			tickerHrefs[i].target = '_blank';
			if(tickerHrefs[i].style.fontSize == '85%'){
				tickerHrefs[i].style.display = 'none';
			}
		}
}
//-----------------------------------------------------------------------------//

///////////////////////////////////////
//
//  Smooth Scroller by Kryogenix
//  http://www.kryogenix.com/
//
///////////////////////////////////////

var ss = {
  fixAllLinks: function() {
    // Get a list of all links in the page
    var allLinks = document.getElementsByTagName('a');
    // Walk through the list
    for (var i=0;i<allLinks.length;i++) {
      var lnk = allLinks[i];
      if ((lnk.href && lnk.href.indexOf('#') != -1) && 
          ( (lnk.pathname == location.pathname) ||
	    ('/'+lnk.pathname == location.pathname) ) && 
          (lnk.search == location.search)) {
        // If the link is internal to the page (begins in #)
        // then attach the smoothScroll function as an onclick
        // event handler
        ss.addEvent(lnk,'click',ss.smoothScroll);
      }
    }
  },

  smoothScroll: function(e) {
    // This is an event handler; get the clicked on element,
    // in a cross-browser fashion
    if (window.event) {
      target = window.event.srcElement;
    } else if (e) {
      target = e.target;
    } else return;

    // Make sure that the target is an element, not a text node
    // within an element
    if (target.nodeName.toLowerCase() != 'a') {
      target = target.parentNode;
    }
  
    // Paranoia; check this is an A tag
    if (target.nodeName.toLowerCase() != 'a') return;
  
    // Find the <a name> tag corresponding to this href
    // First strip off the hash (first character)
    anchor = target.hash.substr(1);
    // Now loop all A tags until we find one with that name
    var allLinks = document.getElementsByTagName('a');
    var destinationLink = null;
    for (var i=0;i<allLinks.length;i++) {
      var lnk = allLinks[i];
      if (lnk.name && (lnk.name == anchor)) {
        destinationLink = lnk;
        break;
      }
    }
  
    // If we didn't find a destination, give up and let the browser do
    // its thing
    if (!destinationLink) return true;
  
    // Find the destination's position
    var destx = destinationLink.offsetLeft; 
    var desty = destinationLink.offsetTop;
    var thisNode = destinationLink;
    while (thisNode.offsetParent && 
          (thisNode.offsetParent != document.body)) {
      thisNode = thisNode.offsetParent;
      destx += thisNode.offsetLeft;
      desty += thisNode.offsetTop;
    }
  
    // Stop any current scrolling
    clearInterval(ss.INTERVAL);
  
    cypos = ss.getCurrentYPos();
  
    ss_stepsize = parseInt((desty-cypos)/ss.STEPS);
    ss.INTERVAL = setInterval('ss.scrollWindow('+ss_stepsize+','+desty+',"'+anchor+'")',10);
  
    // And stop the actual click happening
    if (window.event) {
      window.event.cancelBubble = true;
      window.event.returnValue = false;
    }
    if (e && e.preventDefault && e.stopPropagation) {
      e.preventDefault();
      e.stopPropagation();
    }
  },

  scrollWindow: function(scramount,dest,anchor) {
    wascypos = ss.getCurrentYPos();
    isAbove = (wascypos < dest);
    window.scrollTo(0,wascypos + scramount);
    iscypos = ss.getCurrentYPos();
    isAboveNow = (iscypos < dest);
    if ((isAbove != isAboveNow) || (wascypos == iscypos)) {
      // if we've just scrolled past the destination, or
      // we haven't moved from the last scroll (i.e., we're at the
      // bottom of the page) then scroll exactly to the link
      window.scrollTo(0,dest);
      // cancel the repeating timer
      clearInterval(ss.INTERVAL);
      // and jump to the link directly so the URL's right
      location.hash = anchor;
    }
  },

  getCurrentYPos: function() {
    if (document.body && document.body.scrollTop)
      return document.body.scrollTop;
    if (document.documentElement && document.documentElement.scrollTop)
      return document.documentElement.scrollTop;
    if (window.pageYOffset)
      return window.pageYOffset;
    return 0;
  },

  addEvent: function(elm, evType, fn, useCapture) {

    // addEvent and removeEvent
    // cross-browser event handling for IE5+,  NS6 and Mozilla
    // By Scott Andrew
    if (elm.addEventListener){
      elm.addEventListener(evType, fn, useCapture);
      return true;
    } else if (elm.attachEvent){
      var r = elm.attachEvent("on"+evType, fn);
      return r;
    } else {
      alert("Handler could not be removed");
    }
  } 
}

ss.STEPS = 15;

ss.addEvent(window,"load",ss.fixAllLinks);