/* This script and many more are available free online at
The JavaScript Source :: http://javascript.internet.com
Created by: Philip Myers :: http://virtualipod.tripod.com/bookmark.html */

function bookmark(url,title){
  if ((navigator.appName == "Microsoft Internet Explorer") && (parseInt(navigator.appVersion) >= 4)) {
  window.external.AddFavorite(url,title);
  } else if (navigator.appName == "Netscape") {
    window.sidebar.addPanel(title,url,"");
  } else {
    alert("Press CTRL-D (Netscape) or CTRL-T (Opera) to bookmark");
  }
}



/*	---------------------------------------------------------------------------
	CLASS:		Menu();
	AUTHOR:		Ryan J. Salva
	REVISED:	December 2007

	Creates a drop-down menu for navigation. Also Corrects Windows IE support 
	for LI:hover and adds an <IFRAME> behind drop-down menus to keep the 
	menu above <select> elements.
*/

var Menu = new Class({
	Implements: Options,
	options: {
		iframe: true,
		onComplete: Class.empty,
		onStart: Class.empty
	},
	initialize: function(el,options){
		this.el = $(el);
		if (!$defined(this.el)) return false;
		this.setOptions(options);
		
		this.el.getElements('li').each(function(li,index) {
			li.setStyle('zIndex',1000-index);
			li.addEvent('mouseenter',function() {
				this.addClass('hover');
			});
			li.addEvent('mouseleave',function() {
				this.removeClass('hover');
			});
		});
		if (this.options.iframe) this.addIframe();
	},
	addIframe: function() {
		this.el.getElements('ul').each(function(ul,index) {
			var coord = ul.getCoordinates();
			var iframe = new Element('iframe',{'src':'about:blank','styles':{
				'overflow':'hidden',
				'border':0,
				'width': coord.width,
				'height': coord.height,
				'left': 0,
				'top': 0,
				'zIndex': -10,
				'opacity': 0,
				'position':'absolute'
			}});
			iframe.inject(ul);
			ul.setStyle('z-index',99);
		});
	}
});



/*	---------------------------------------------------------------------------
	CLASS:		Marquee()
	OPTIONS:	speed			the speed of the animation in milliseconds (default:20)
				pauseOnOver		boolean value to stop animation on mouse over (default:true)
	AUTHOR:		Ryan J. Salva, ryan@capitolmedia.com

	ABOUT:		Creates a single line marquee for scrolling text
*/

var Marquee = new Class({
	Implements: [Events, Options],
	options: {
		speed: 25,
		pauseOnOver: true,
		onStart: $empty,
		onUpdate: $empty
	},
	initialize: function(element, options) {
		this.container = $(element);
		this.el = this.container.clone({'contents':'true'});
		this.el.erase('style');
		this.el.erase('class');
		this.el.setStyles({
			'position':'absolute',
			'top':0,
			'left':this.pos,
			'white-space':'nowrap'
		});
		this.container.setStyle('position','relative');
		this.container.empty();
		this.pos = this.container.getSize().x;
		this.container.adopt(this.el);

		if (this.options.pauseOnOver) {
			this.container.addEvents({
				'mouseenter' : function(e){
					this.stop();
				}.bind(this),
				'mouseleave' : function(e){
					this.start();
				}.bind(this)
			});
		}
		this.start();

	},
	start: function() {
		this.timer = this.update.periodical(this.options.speed, this);
	},
	stop: function(){
		$clear(this.timer);
	},
	update: function(){
		this.pos--;
		
		if (-this.pos > this.el.getCoordinates().width) this.pos = this.container.getSize().x;
		this.el.setStyle('left',this.pos);
	}
});



/************************************************
*   carousel v.0                                 *
/***********************************************/

var CNETcarousel = new Class({
   initialize: function(container, options){
      this.container = $(container);
      if(!this.container.hasClass('hasCarousel')){
         this.container.addClass('hasCarousel');
         this.slides = [];
         this.buttons = [];
         this.setOptions({
            onRotate: Class.empty,
            onStop: Class.empty,
            onAutoPlay: Class.empty,
            onShowSlide: Class.empty,
            slidesSelector: ".slide",
            buttonsSelector: ".button",
            slideInterval: 4000,
            transitionDuration: 700,
            startIndex: 0,
            buttonOnClass: "selected",
            buttonOffClass: "off",
            rotateAction: "none",
            rotateActionDuration: 100,
            autoplay: false
         }, options);
         this.slides = $(container).getElements(this.options.slidesSelector);
         this.buttons = $(container).getElements(this.options.buttonsSelector);
         this.createFx();
         this.showSlide(this.options.startIndex);
         if(this.options.autoplay) this.autoplay();
         if(this.options.rotateAction != 'none') this.setupAction(this.options.rotateAction);
         return this;
      } else return false;
   },

   setupAction: function(action) {
      this.buttons.each(function(el, idx){
         $(el).addEvent(action, function() {
            this.slideFx.setOptions(this.slideFx.options, {duration: this.options.rotateActionDuration});
            if(this.currentSlide != idx) this.showSlide(idx);
            this.stop();
         }.bind(this));
      }, this);
   },

   createFx: function(){
      this.slideFx = new Fx.Elements(this.slides, {duration: this.options.transitionDuration});
      this.slides.each(function(slide){
         slide.setStyle('opacity',0);
      });
   },

   showSlide: function(slideIndex){
      var action = {};
      this.slides.each(function(slide, index){
         if(index == slideIndex && index != this.currentSlide){ //show
            $(this.buttons[index]).removeClass(this.options.buttonOffClass).addClass(this.options.buttonOnClass);
            action[index.toString()] = {
               'opacity': [1]
            };
         } else {
            $(this.buttons[index]).removeClass(this.options.buttonOnClass).addClass(this.options.buttonOffClass);
            action[index.toString()] = {
               'opacity':[0]
            };
         }
      }, this);
      this.fireEvent('onShowSlide', slideIndex);
      this.currentSlide = slideIndex;
      this.slideFx.start(action);
   },

   autoplay: function(){
      this.createFx();
      this.slideshowInt = this.rotate.periodical(this.options.slideInterval, this);
      this.fireEvent('onAutoPlay');
   },

   stop: function(){
      clearInterval(this.slideshowInt);
      this.fireEvent('onStop');
   },

   rotate: function(){
      current = this.currentSlide;
      next = (current+1 >= this.slides.length) ? 0 : current+1;
      this.showSlide(next);
      this.fireEvent('onRotate');
   },

   show: function() {
      $(this.options.carouselContainer).setStyle('visibility','visible');
      if(!$(this.options.carouselContainer).isVisible())$(this.options.carouselContainer).setStyle('display','block');
   },

   hide: function(){
      $(this.options.carouselContainer).setStyle('visibility','hidden');
   }
});
CNETcarousel.implement(new Options);
CNETcarousel.implement(new Events);

var CNETcarouselWithButtons = CNETcarousel.extend({
   initialize:function(el, options){
      this.parent(el, $merge({
         bubbleButtonBGImgSelector: '.bbg',
         buttonOnGifSrc: 'http://i.i.com.com/cnwk.1d/i/fd/c/green_button.gif',
         buttonOffGifSrc: 'http://i.i.com.com/cnwk.1d/i/fd/c/gray_button.gif'
      }, options));
   },
   showSlide: function(slideIndex){
      this.buttons.each(function(button, index){
         $(button).getElement(this.options.bubbleButtonBGImgSelector).src = (index == slideIndex)?this.options.buttonOnGifSrc:this.options.buttonOffGifSrc;
      }, this);
      this.parent(slideIndex);
   }
});
var carousel = null;
window.addEvent('domready', function(){
   if($('Carousel')) {
      carousel = new CNETcarouselWithButtons($('Carousel'),{buttonsSelector:'.bubble', rotateAction:'mouseover'});
   }
});