(function(jQuery) {
	
	var name='newsTicker';
	
	function runTicker(settings) {
		
		tickerData = jQuery(settings.newsList).data('newsTicker');
		
		if(tickerData.currentItem > tickerData.newsItemCounter){
			// if we've looped to beyond the last item in the list, start over
			tickerData.currentItem = 0;
		}
		else if (tickerData.currentItem < 0) {
			// if we've looped back before the first item, move to the last one
			tickerData.currentItem = tickerData.newsItemCounter;
		}
		
		if(tickerData.currentPosition == 0) {
			if(tickerData.newsLinks[tickerData.currentItem].length > 0) {
				jQuery(tickerData.newsList).empty().append('<li><a href="'+ tickerData.newsLinks[tickerData.currentItem] +'"></a></li>');
			}
			else {
				jQuery(tickerData.newsList).empty().append('<li></li>');
			}
		}
		
		//only start the ticker itself if it's defined as animating: otherwise it's paused or under manual advance
		if (tickerData.animating) {
			
			if( tickerData.currentPosition % 2 == 0) {
					var placeHolder = tickerData.placeHolder1;
			}
			else {
				var placeHolder = tickerData.placeHolder2;
			}
			
			if( tickerData.currentPosition < tickerData.newsItems[tickerData.currentItem].length) {
				// we haven't completed ticking out the current item
				
				var tickerText = tickerData.newsItems[tickerData.currentItem].substring(0,tickerData.currentPosition);
				if(tickerData.newsLinks[tickerData.currentItem].length > 0) {
					jQuery(tickerData.newsList + ' li a').text(tickerText + placeHolder);
				}
				else {
					jQuery(tickerData.newsList + ' li').text(tickerText + placeHolder);
				}
				tickerData.currentPosition ++;
				setTimeout(function(){runTicker(settings); settings = null;},tickerData.tickerRate);
			}
			
			else {
				// we're on the last letter of the current item
				
				if(tickerData.newsLinks[tickerData.currentItem].length > 0) {
					jQuery(tickerData.newsList + ' li a').text(tickerData.newsItems[tickerData.currentItem]);
				}
				else {
					jQuery(tickerData.newsList + ' li').text(tickerData.newsItems[tickerData.currentItem]);
				}
				
				setTimeout(function(){
					if (tickerData.animating) {
						tickerData.currentPosition = 0;
						tickerData.currentItem ++;
						runTicker(settings); settings = null;
					}
				},tickerData.loopDelay);
				
			}
		}
		
		else {// settings.animating == false 
			
			// display the full text of the current item
			var tickerText = tickerData.newsItems[tickerData.currentItem];
			
			if(tickerData.newsLinks[tickerData.currentItem].length > 0) {
				jQuery(tickerData.newsList + ' li a').text(tickerText);
			}
			else {
				jQuery(tickerData.newsList + ' li').text(tickerText);
			}
					
		}
		
	}

	
	// Core plugin setup and config
	jQuery.fn[name] = function(options) {
 
	    // Add or overwrite options onto defaults
	    var settings = jQuery.extend({}, jQuery.fn.newsTicker.defaults, options);
	 
        var newsItems = new Array();
		var newsLinks = new Array();
		var newsItemCounter = 0;
		
		// Hide the static list items
		jQuery(settings.newsList + ' li').hide();
		
		// Store the items and links in arrays for output
		jQuery(settings.newsList + ' li').each(function(){
			if(jQuery(this).children('a').length) {
				newsItems[newsItemCounter] = jQuery(this).children('a').text();
				newsLinks[newsItemCounter] = jQuery(this).children('a').attr('href');
			}
			else {
				newsItems[newsItemCounter] = jQuery(this).text();
				newsLinks[newsItemCounter] = '';
			}
			newsItemCounter ++;
		});
        
        var tickerElement = jQuery(settings.newsList); // for quick reference below
        
        tickerElement.data(name, {
        	newsList: settings.newsList,
			tickerRate: settings.tickerRate,
			startDelay: settings.startDelay,
			loopDelay: settings.loopDelay,
			placeHolder1: settings.placeHolder1,
			placeHolder2: settings.placeHolder2,
			controls: settings.controls,
			ownControls: settings.ownControls,
			stopOnHover: settings.stopOnHover,
            newsItems: newsItems,
			newsLinks: newsLinks,
			newsItemCounter: newsItemCounter - 1, // -1 because we've incremented even after the last item (above)
			currentItem: 0,
			currentPosition: 0,
			firstRun:1
        })
        .bind({
			stop: function(event) {
				// show remainder of the current item immediately
		    	tickerData = tickerElement.data(name);
		    	if (tickerData.animating) { // only stop if not already stopped
            		tickerData.animating = false;
               	}
		  	},
		  	play: function(event) {
		  		// show 1st item with startdelay
		    	tickerData = tickerElement.data(name);
		    	if (!tickerData.animating) { // if already animating, don't start animating again
	            	tickerData.animating = true;
	            	setTimeout(function(){runTicker(tickerData); tickerData = null;},tickerData.startDelay);
	            }
		  	},
		  	resume: function(event) {
		  		// start from next item, with no delay
		    	tickerData = tickerElement.data(name);
		    	if (!tickerData.animating) { // if already animating, don't start animating again
	            	tickerData.animating = true;
	            	// set the character position as 0 to ensure on resume we start at the right point
					tickerData.currentPosition = 0;
	            	tickerData.currentItem ++;
	            	runTicker(tickerData); // no delay when resuming.
		        }
		  	},
		  	next: function(event) {
		  		// show whole of next item
		  		tickerData = tickerElement.data(name);
		  		// stop (which sets as non-animating), and call runticker
		  		jQuery(tickerData.newsList).trigger("stop");
		  		// set the character position as 0 to ensure on resume we start at the right point
				tickerData.currentPosition = 0;
	            tickerData.currentItem ++;
	            runTicker(tickerData);
		  	},
		  	previous: function(event) {
				// show whole of previous item
				tickerData = tickerElement.data(name);
		  		// stop (which sets as non-animating), and call runticker
		  		jQuery(tickerData.newsList).trigger("stop");
		  		// set the character position as 0 to ensure on resume we start at the right point
				tickerData.currentPosition = 0;
	            tickerData.currentItem --;
	            runTicker(tickerData);
			}
		}); 	
		if (settings.stopOnHover) {
	    	tickerElement.bind({			    	
			  	mouseover: function(event) {
			  		tickerData = tickerElement.data(name);
			    	if (tickerData.animating) { // stop if not already stopped
				  		jQuery(tickerData.newsList).trigger("stop");
				  		if (tickerData.controls) { // ensure that the ticker can be resumed if controls are enabled
				  			jQuery('.stop').hide();
			        		jQuery('.resume').show();
				  		}
			  		}
			  	}
			});
    	}
    	
    	tickerData = tickerElement.data(name);
    	
    	// set up control buttons if the option is on
		if (tickerData.controls || tickerData.ownControls) {
			if (!tickerData.ownControls) {
			 	jQuery('<ul class="ticker-controls"><li class="play"><a href="#play">Play</a></li><li class="resume"><a href="#resume">Resume</a></li><li class="stop"><a href="#stop">Stop</a></li><li class="previous"><a href="#previous">Previous</a></li><li class="next"><a href="#next">Next</a></li></ul>').insertAfter(jQuery(tickerData.newsList));
			}
			jQuery('.play').hide();
		    jQuery('.resume').hide();
			
		    jQuery('.play').click(function(event){
		        jQuery(tickerData.newsList).trigger("play");
		        jQuery('.play').hide();
		        jQuery('.resume').hide();
		        jQuery('.stop').show();
		        event.preventDefault();
		    });
		    jQuery('.resume').click(function(event){
		        jQuery(tickerData.newsList).trigger("resume");
		        jQuery('.play').hide();
		        jQuery('.resume').hide();
		        jQuery('.stop').show();
		        event.preventDefault();
		    });
			jQuery('.stop').click(function(event){
		        jQuery(tickerData.newsList).trigger("stop");
		        jQuery('.stop').hide();
		        jQuery('.resume').show();
		        event.preventDefault();
		    });
		    jQuery('.previous').click(function(event){
		        jQuery(tickerData.newsList).trigger("previous");
		        jQuery('.stop').hide();
			    jQuery('.resume').show();
		      //  event.preventDefault();
		    });
		    jQuery('.next').click(function(event){
		        jQuery(tickerData.newsList).trigger("next");
		        jQuery('.stop').hide();
			    jQuery('.resume').show();

		       // event.preventDefault();
		    });

	    };
    	
    	// tell it to play
    	jQuery(tickerData.newsList).trigger("play");
	};

	// News ticker defaults 
	jQuery.fn[name].defaults = {
	    newsList: "#news",
		tickerRate: 80,
		startDelay: 100,
		loopDelay: 3000,
		placeHolder1: " |",
		placeHolder2: "_",
		controls: true,
		ownControls: false,
		stopOnHover: false
	}

})(jQuery);
(function(jQuery) {
jQuery.fn.lavaLamp = function(o) {
    o = jQuery.extend({ fx: "linear", speed: 500, click: function(){} }, o || {});

    return this.each(function() {
        var me = jQuery(this), noop = function(){},
            jQueryback = jQuery('<li class="back" style="top:30px;"><div class="left"></div></li>').appendTo(me),
            jQueryli = jQuery("li", this), curr = jQuery("li.current", this)[0] || jQuery(jQueryli[0]).addClass("current")[0];
        jQueryli.not(".back").hover(function() {
            move(this);
        }, noop);

        jQuery(this).hover(noop, function() {
            move(curr);
        });

        setCurr(curr);

        function setCurr(el) {
        			_wleft = Number(jQuery(el).css("margin-left").replace('px', ''));
			    	  _wright =Number(jQuery(el).css("margin-right").replace('px', ''));
         //   alert(_wleft+' '+_wright);
            jQueryback.css({ "left": el.offsetLeft+"px", "width": el.offsetWidth+"px" ,"top": el.offsetTop+"px"});
            curr = el;
        };

        function move(el) {
        	   jQueryback.css('top',el.offsetTop);
            jQueryback.each(function() {
                jQuery(this).dequeue(); }
            ).animate({
             //   top: el.offsetTop,
                width: el.offsetWidth,
                left: el.offsetLeft
            }, o.speed, o.fx);
        };

    });
};
})(jQuery);

jQuery(document).ready(TB_launch); 
function TB_launch() {
jQuery("a.thickbox").click(function(){
  var t = this.title;
  TB_show(t,this.href);
  this.blur();
  return false;
});
}

function TB_show(caption, url) { //function called when the user clicks on a thickbox link
	try {
		jQuery("body").append("<div id='TB_overlay'></div><div id='TB_window'></div>");
		
		jQuery("#TB_overlay").css("opacity","0.6");
		jQuery("#TB_overlay").css("filter","alpha(opacity=60)");
		jQuery("#TB_overlay").css("-moz-opacity","0.6");
		jQuery(window).resize(TB_position);
		jQuery("body").append("<div id='TB_load'><div id='TB_loadContent'><img src='images/circle_animation.gif' /></div></div>");
		jQuery("#TB_overlay").show();
		var urlString = /.jpg|.jpeg|.png|.gif|.html|.htm/g;
		var urlType = url.match(urlString);
		
		if(urlType == '.jpg' || urlType == '.jpeg' || urlType == '.png' || urlType == '.gif'){//code to show images

			var imgPreloader = new Image();
			imgPreloader.onload = function(){

			// Resizing large images added by Christian Montoya
			var de = document.documentElement;
			var x = (self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth) - 50;
			var y = (self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight) - 80;
			if(imgPreloader.width > x) { 
				imgPreloader.height = imgPreloader.height * (x/imgPreloader.width); 
				imgPreloader.width = x; 
				if(imgPreloader.height > y) { 
					imgPreloader.width = imgPreloader.width * (y/imgPreloader.height); 
					imgPreloader.height = y; 
				}
			} 
			else if(imgPreloader.height > y) { 
				imgPreloader.width = imgPreloader.width * (y/imgPreloader.height); 
				imgPreloader.height = y; 
				if(imgPreloader.width > x) { 
					imgPreloader.height = imgPreloader.height * (x/imgPreloader.width); 
					imgPreloader.width = x;
				}
			}
			// End Resizing

			TB_WIDTH = imgPreloader.width + 30;
			TB_HEIGHT = imgPreloader.height + 60;
			jQuery("#TB_window").append("<img id='TB_Image' src='"+url+"' width='"+imgPreloader.width+"' height='"+imgPreloader.height+"' alt='"+caption+"'/>"+ "<div id='TB_caption'>"+caption+"</div><div id='TB_closeWindow'><a href='#' id='TB_closeWindowButton'>CLASS</a></div>"); 
			jQuery("#TB_closeWindowButton").click(TB_remove);
			jQuery("#TB_Image").click(TB_remove); // close when image clicked added by Christian Montoya
			TB_position();
			jQuery("#TB_load").remove();
			jQuery("#TB_window").slideDown("normal");
			}
	  
			imgPreloader.src = url;
		}
		
		if(urlType == '.htm' || urlType == '.html'){//code to show html pages
			
			var queryString = url.replace(/^[^\?]+\??/,'');
			var params = parseQuery( queryString );
			
			TB_WIDTH = (params['width']*1) - 60;
			TB_HEIGHT = (params['height']*1) + 40;
			ajaxContentW = TB_WIDTH - 30;
			ajaxContentH = TB_HEIGHT - 45;
			jQuery("#TB_window").append("<div id='TB_closeAjaxWindow'><a href='#' id='TB_closeWindowButton'>CLASS</a></div><div id='TB_ajaxContent' style='width:"+ajaxContentW+"px;height:"+ajaxContentH+"px;'></div>");
			jQuery("#TB_closeWindowButton").click(TB_remove);
			jQuery("#TB_ajaxContent").load(url, function(){
			TB_position();
			jQuery("#TB_load").remove();
			jQuery("#TB_window").slideDown("normal");
			});
		}
		
	} catch(e) {
		alert( e );
	}
}

//helper functions below

function TB_remove() {
	// #TB_load removal added by Christian Montoya; solves bug when overlay is closed before image loads
	jQuery("#TB_window").fadeOut("fast",function(){jQuery('#TB_window,#TB_overlay,#TB_load').remove();}); 
	return false;
}

function TB_position() {
	var de = document.documentElement;
	var w = self.innerWidth || (de&&de.clientWidth) || document.body.clientWidth;
	var h = self.innerHeight || (de&&de.clientHeight) || document.body.clientHeight;
  
  	if (window.innerHeight && window.scrollMaxY) {	
		yScroll = window.innerHeight + window.scrollMaxY;
	} else if (document.body.scrollHeight > document.body.offsetHeight){ // all but Explorer Mac
		yScroll = document.body.scrollHeight;
	} else { // Explorer Mac...would also work in Explorer 6 Strict, Mozilla and Safari
		yScroll = document.body.offsetHeight;
  	}
	
	jQuery("#TB_window").css({width:TB_WIDTH+"px",height:TB_HEIGHT+"px",
	left: ((w - TB_WIDTH)/2)+"px", top: ((h - TB_HEIGHT)/2)+"px" });
	jQuery("#TB_overlay").css("height",yScroll +"px");
}

function parseQuery ( query ) {
   var Params = new Object ();
   if ( ! query ) return Params; // return empty object
   var Pairs = query.split(/[;&]/);
   for ( var i = 0; i < Pairs.length; i++ ) {
      var KeyVal = Pairs[i].split('=');
      if ( ! KeyVal || KeyVal.length != 2 ) continue;
      var key = unescape( KeyVal[0] );
      var val = unescape( KeyVal[1] );
      val = val.replace(/\+/g, ' ');
      Params[key] = val;
   }
   return Params;
}
 
