/* 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");
  }
}



/* ---------------------------------------------------------------------------------------------

Placing the labels inside the input fields.
Article on A List Apart - http://www.alistapart.com/articles/makingcompactformsmoreaccessible
Example - http://www.alistapart.com/d/makingcompactformsmoreaccessible/example_complete.html

--------------------------------------------------------------------------------------------- */

function initOverLabels () {
  if (!document.getElementById) return;  	

  var labels, id, field;

  // Set focus and blur handlers to hide and show 
  // LABELs with 'overlabel' class names.
  labels = document.getElementsByTagName('label');
  for (var i = 0; i < labels.length; i++) {
	
    if (labels[i].className == 'overlabel') {

      // Skip labels that do not have a named association
      // with another field.
      id = labels[i].htmlFor || labels[i].getAttribute('for');
      if (!id || !(field = document.getElementById(id))) {
        continue;
      }

      // Change the applied class to hover the label 
      // over the form field.
      labels[i].className = 'overlabel-apply';

      // Hide any fields having an initial value.
      if (field.value !== '') {
        hideLabel(field.getAttribute('id'), true);
      }

      // Set handlers to show and hide labels.
      field.onfocus = function () {
        hideLabel(this.getAttribute('id'), true);
      };
      field.onblur = function () {
        if (this.value === '') {
          hideLabel(this.getAttribute('id'), false);
        }
      };

      // Handle clicks to LABEL elements (for Safari).
      labels[i].onclick = function () {
        var id, field;
        id = this.getAttribute('for');
        if (id && (field = document.getElementById(id))) {
          field.focus();
        }
      };

    }
  }
};

function hideLabel (field_id, hide) {
  var field_for;
  var labels = document.getElementsByTagName('label');
  for (var i = 0; i < labels.length; i++) {
    field_for = labels[i].htmlFor || labels[i].getAttribute('for');
    if (field_for == field_id) {
      labels[i].style.textIndent = (hide) ? '-9999px' : '0px';
      return true;
    }
  }
}

window.onload = function () {
  setTimeout(initOverLabels, 50);
};



/*	---------------------------------------------------------------------------
	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);
	}
});