/**
 * AutoAIP JavaScript for mootools.js
 * [ Anchored Image Pseudo-classes ]
 * Version 1.0
 * 
 * @author	Tom Goodsun (http://www.tom-gs.com/)
 * @date	2009.11.20
 **/
var AutoAIP = {
	options: {
		vColorHex      : '#551A8B',
		targetTag      : 'a',
		targetClass    : 'rollover',
		linkName       : 'link',
		hoverName      : 'hover',
		activeName     : 'active',
		visitedName    : 'visited',
		selfName       : 'self',
		srCmplName     : 'SR-complete',
		dirIndexName   : 'index',
		dirIndexExt    : ['html', 'htm', 'shtml', 'dhtml', 'zhtml', 'php', 'cgi', 'pl', 'rb', 'asp', 'aspx'],
		enableSimple   : false,
		enableSR       : false,
		SRCompleteMatch: false
	},
	defaultImages: {},
	hoverImages  : {},
	activeImages : {},
	regexps      : {},
	initValues: function(options){
		this.options = $merge(this.options, options);
		this.regexps = {
			link       : new RegExp(this.options.linkName), 
			hover      : new RegExp('!' + this.options.hoverName), 
			active     : new RegExp('!' + this.options.activeName),
			dirIndexExt: new RegExp(this.options.dirIndexName + '\.(' + this.options.dirIndexExt.join('|') + ')$')
		}
	},
	initialize: function(options){
		this.initValues(options);
		var anchorElements = $$(this.options.targetTag + '.' + this.options.targetClass);
		for (var i = 0; i < anchorElements.length; i++){
			var image = anchorElements[i].getElementsByTagName('img')[0];
			if (image.src.match(this.regexps.link)){
				var index = image.src.substr(image.src.lastIndexOf('/'), image.src.length - 1) + anchorElements[i].href;

				// create default link image
				this.defaultImages[index] = new Image();
				if (this.isVisited(anchorElements[i]) && !this.options.enableSimple){
					this.defaultImages[index].src = image.src.replace('/' + this.options.linkName + '/', '/' + this.options.visitedName + '/');
				}else{
					this.defaultImages[index].src = image.src;
				}
				// set self-realizer
				if (this.options.enableSR){
					if (this.realizeSelf(anchorElements[i])){
						this.defaultImages[index].src = image.src.replace('/' + this.options.linkName + '/', '/' + this.options.selfName + '/');
					}
				}
				anchorElements[i].addEvent('mouseout', function(){AutoAIP.changeOnOut(this);});

				// create hover image
				var disableHover = anchorElements[i].className.match(this.regexps.hover);
				if (!disableHover){
					// create hover image
					this.hoverImages[index] = new Image();
					this.hoverImages[index].src = image.src.replace('/' + this.options.linkName + '/', '/' + this.options.hoverName + '/');
					anchorElements[i].addEvent('mouseover', function(){AutoAIP.changeOnOver(this);});
				}
				

				// create active image
				if (!this.options.enableSimple){
					var disableActive = anchorElements[i].className.match(this.regexps.active);
					if (!disableActive){
						this.activeImages[index] = new Image();
						this.activeImages[index].src = image.src.replace('/' + this.options.linkName + '/', '/' + this.options.activeName + '/');
						anchorElements[i].addEvent('mousedown', function(){AutoAIP.changeOnActive(this);});
					}
				}

				// initialize current image
				image.src = this.defaultImages[index].src;
			}
		}
	},

	// current shown page is visited
	isVisited: function(anchor){
		var vColor = document.defaultView ? document.defaultView.getComputedStyle(anchor, null).getPropertyValue('color') : anchor.currentStyle['color'];
		var vColorRgb = this.options.vColorHex.replace(/^#/, '').hexToRgb(true);
		vColorRgb = 'rgb(' + vColorRgb.join(', ') + ')';
	//	alert("(" + vColor + " == " + this.options.vColorHex + " || " + vColor+ " == " + vColorRgb + ")");
		return (vColor == this.options.vColorHex || vColor == vColorRgb);
	},

	// set self-realizer
	realizeSelf: function(anchor){
		var anchorHref  = anchor.href;
		var documentUrl = document.URL;

		if(!this.options.SRCompleteMatch){
			if (anchorHref.lastIndexOf('#') != -1){
				anchorHref = anchorHref.replace(anchorHref.substr(anchorHref.lastIndexOf('#'), anchorHref.length - 1), '');
			}
			if (documentUrl.lastIndexOf('#') != -1){
				documentUrl = documentUrl.replace(documentUrl.substr(documentUrl.lastIndexOf('#'), documentUrl.length - 1), '');
			}
		}
		if (this.options.dirIndexName != ''){
			documentUrl = documentUrl.replace(this.regexps.dirIndexExt, '');
			anchorHref  = anchorHref.replace(this.regexps.dirIndexExt, '');
		}
		// debug
		//alert(anchorHref + ' == ' + documentUrl);
		return (anchorHref == documentUrl);
	},

	// run when onMouseover event is occurred
	changeOnOver: function(e){
		var image = e.getElementsByTagName('img')[0];
		image.src = this.hoverImages[image.src.substr(image.src.lastIndexOf('/'), image.src.length - 1) + e.href].src;
	},

	// run when onMouseout event is occurred
	changeOnOut: function(e){
		var image = e.getElementsByTagName('img')[0];
		image.src = this.defaultImages[image.src.substr(image.src.lastIndexOf('/'), image.src.length - 1) + e.href].src;
	},

	// run when onMousedown event is occurred
	changeOnActive: function(e){
		var image = e.getElementsByTagName('img')[0];
		image.src = this.activeImages[image.src.substr(image.src.lastIndexOf('/'), image.src.length - 1) + e.href].src;
	}
}

