var Highlights = Class.create({

	initialize:function(className, useClick) {
		var useClick = (useClick != undefined) ? useClick : true; 
		var list = document.getElementsByClassName(className);
		for (var i = 0; i < list.length; i++) {
			var element = $(list[i]);
			new Highlight(element, useClick);
		}
		
		var list = $(document.getElementsByClassName('highlightImg'));
		var srcList = new Array();
		for (var i = 0; i < list.length; i++){
			srcList[i] = $(list[i]).readAttribute('usemap');
		} 
		srcList.uniq();
		for (var i = 0; i < srcList.length; i++){
			var myimage = new Image();
			myimage.src = srcList[i];
		}
	}
	
							  
});

String.prototype.parseColor = function() {  
  var color = '#';  
  if(this.slice(0,4) == 'rgb(') {  
    var cols = this.slice(4,this.length-1).split(',');  
    var i=0; do { color += parseInt(cols[i]).toColorPart() } while (++i<3);  
  } else {  
    if(this.slice(0,1) == '#') {  
      if(this.length==4) for(var i=1;i<4;i++) color += (this.charAt(i) + this.charAt(i)).toLowerCase();  
      if(this.length==7) color = this.toLowerCase();  
    }  
  }  
  return(color.length==7 ? color : (arguments[0] || this));  
}


var Highlight = Class.create({
	
	initialize:function(element, useClick) {
   	 	this.element = $(element);
		this.colored = false;
		
		this.element.observe('mouseover', this.onMouseOver.bindAsEventListener(this));
		this.element.observe('mouseout', this.onMouseOut.bindAsEventListener(this));
		this.element.stopObserving('click');

		if (this.element.title) {
			this.element.url = this.element.title;
			this.element.title = '';
			this.element.setStyle({cursor: 'pointer'});
			if (useClick) {
				this.element.observe('click', this.onClick);
			}
		}
	},
	
	onMouseOver:function(event) {
    	var element = event.element();
		if (this.colored) 
			return;
			
		if (!element.hasClassName('highlight')) {
			element = element.up('.highlight');
		}
		if (!element || (element && !element.hasClassName('highlight'))) {
			return;
		}
		element.setStyle({backgroundColor: '#F7F7F7'});
		var elementImg = element.down('.highlightImg');	
		if (elementImg && elementImg.readAttribute('usemap') && element.getStyle('backgroundColor').parseColor() == '#f7f7f7') {
			//if (elementImg.readAttribute('rel') != '') {
			//	var attr = 'rel';	
			//} else {
				var attr = 'usemap';
			//}
			var rel = elementImg.readAttribute(attr)
			elementImg.writeAttribute(attr, elementImg.src);
			elementImg.writeAttribute('src', rel);
		}
		this.colored = true;
	},
	
	onMouseOut:function(event) {
    	var element = event.element();
		if (!this.colored) 
			return;
		if (!element.hasClassName('highlight')) {
			element = element.up('.highlight');
		}
		if (!element || (element && !element.hasClassName('highlight'))) {
			return;
		}
		element.setStyle({backgroundColor: '#FFFFFF'});
		var elementImg = element.down('.highlightImg');	
		if (elementImg && elementImg.readAttribute('usemap') && element.getStyle('backgroundColor').parseColor() == '#ffffff') {
			var rel = elementImg.readAttribute('usemap')
			elementImg.writeAttribute('usemap', elementImg.src);
			elementImg.writeAttribute('src', rel);
		}
		this.colored = false;
	},
	
	onClick:function(event) {
    	var element = event.element();
		if (!element.hasClassName('highlight')) {
			element = element.up('.highlight');
		}
		if (!element || (element && !element.hasClassName('highlight'))) {
			return;
		}
		if (element.url) {
			document.location = element.url;
		}
	}
	
});

function highlightInit() {
	new Highlights('highlight');
}

document.observe('dom:loaded', highlightInit);
