/**
 * @projectDescription JavaScript to handle the replacemnt of text within named (css) selectors with images from Scene7. 
 *  Borrows functionality from sIFR and must use Mootols (version 1.11). Also uses Dean Edwards
 *  excellent work with cssQuery. See http://dean.edwards.name/my/cssQuery/
 * @author Andrew Massey Andrew.Massey@lbi.com
 * @version 0.1
 */
 
s7IR = {
	/**
	 * Object constants
	 */	
	preloadImages : [], 
	/**
	 * Replace text with an image
	 * @method replace
	 * @param {Object} s7args
	 */
	replace : function(s7args) {
		var nodes = $$(s7args.selector);

		for(var i = 0; i < nodes.length; i++) {
		
			var node = nodes[i];
			var el = $(node);
			var txt = $(el).get('text');
			
			if (s7args.css) {
				for (rule in s7args.css) {
					
					switch (rule) {
						case 'textTransform':
							txt = s7IR.doCSSTextTransform(txt, s7args);
							break;			
						case 'padding':
							s7IR.doCSSPadding(el, s7args)
							break;			
						case 'paddingParent':
							el.parentNode.style.padding = s7args.css.paddingParent;
							break;	
						case 'fontSize':
							el.parentNode.style.fontSize = s7args.css.fontSize;
							//s7IR.doCSSFontSize(el.parentNode, s7args);
							break;	
					}	
				}		
			}
			
			//console.log(txt)
			txt = txt.trim();
			if (txt == "") {
				continue;
			}

			if (txt.test('£')) {
				txt = txt.replace(/£/g, '%c2%a3');
			}
			if (txt.test('&')) {	
				txt = txt.replace(/[&=%]/g, '%26'); 
			}
			
			var txt2 = txt;
			
			if (s7args.text) {
				txt = "&$text=" + txt;
			} 	else  {
				txt = '{' + txt + '}';
			}
			
			$(el).empty();
			var img = document.createElement("img");

			var url = new String();
			url = scene7Root;
			
			if (s7args.url) {
				url += s7args.url;
			}
			
			if (s7args.button) {
				if (txt.length <= 2) {
					var bttnSize  = s7args.button.small;
					if (s7IR.isSelected($(el))) {
						bttnSize += "_select";
					} else if (s7IR.isDisabled($(el))) {
						bttnSize += "_nostock";
						url = s7IR.changeButtonFontColour(s7args, url);
					}					
 					url = url.replace(/size_button/, bttnSize);
				}
				if (txt.length >= 3 && txt.length <= 5) {
					var bttnSize  = s7args.button.medium;
					if (s7IR.isSelected($(el))) {
						bttnSize += "_select"
					} else if (s7IR.isDisabled($(el))) {
						bttnSize += "_nostock";
						url = s7IR.changeButtonFontColour(s7args, url);
					}
					url = url.replace(/size_button/, bttnSize);
				}
				if (txt.length > 5) {
					var bttnSize  = s7args.button.large;
					if (s7IR.isSelected($(el))) {
						bttnSize += "_select"
					} else if (s7IR.isDisabled($(el))) {
						bttnSize += "_nostock";
						url = s7IR.changeButtonFontColour(s7args, url);
					}
					url = url.replace(/size_button/, bttnSize);
				}
			}
			
			if (s7args.basic == undefined || !s7args.basic){
				url += txt;
				url = url.replace(/&$/, '');
			}
			
			
			if (s7args.effects) {
				url = url + s7args.effects;
			}

			$(img).setProperty('src', url);
			$(img).setProperty('alt', txt2);
			var span = document.createElement("span");
			$(span).addClass('s7IR-alternate');
			span.innerHTML = txt2;	
				
			$(el).addClass('s7IR-replaced');
			$(el).appendChild(img);
			$(el).appendChild(span);
			// make sure the element is visible
			if ($(el).getStyle('visibility') == 'hidden') {
				$(el).setStyle('visibility', 'visible');
			}
			
			if (s7args.rollover) {
				rolloverUrl = scene7Root + s7args.rollover + txt;
				s7IR.preloadImages.push(url);
				s7IR.preloadImages.push(rolloverUrl);				
				s7IR.rollover(el, img, url, txt2, rolloverUrl)
				
			}
		}
	},
	/**
	 * 
	 * @param {Object} s7args
	 */
	rollover : function(a, img, url, txt, rolloverUrl) {
		

			
		$(a).addEvent('mouseenter', function (){
			_img = img;
			_src = rolloverUrl;				
			_src = _src.replace(/&$/, '');
			
			$(_img).setProperty('src', _src);
			$(_img).setProperty('alt', txt);
			$(_img).setProperty('title', txt);
		});
		$(a).addEvent('mouseleave', function (){
			_img = img;
			_src = url;
			_src = _src.replace(/&$/, '');
			
			$(_img).setProperty('src', _src);
			$(_img).setProperty('alt', txt);
			$(_img).setProperty('title', txt);
		});		
	},
	
	/**
	 * @param {Object} el
	 * @param {Object} sargs
	 * @return {String} str
	 */
	doCSSTextTransform : function(str, sargs) {		
		if (sargs.css['textTransform']) {
			switch (sargs.css['textTransform']) {
				case 'uppercase':
					str = str.toUpperCase();
					break;					
			}
		}	
		return str;
	},
	doCSSPadding : function(el, aArgs) {
		//console.log($(el).getStyles('padding'));
		$(el).setStyle('padding', 0);
	},
	/**
	 * @param {Object} el
	 */
	isSelected : function(el) {
		var parent = $(el).getParent();
		var inputs = parent.getElementsByTagName('input');
		
		return $$(inputs)[0].getProperty('checked');
	},
	/**
	 * @param {Object} el
	 */
	isDisabled : function(el) {
		var parent = $(el).getParent();
		var inputs = parent.getElementsByTagName('input');
		
		return $$(inputs)[0].getProperty('disabled');
	},
	/**
	 * @param {Object} sargs
	 * @param {String} url
	 */
	changeButtonFontColour : function(sargs, url) {
		
		for(var att in sargs.button.disabledFontColour) {
			var re = new RegExp(att + '\\d+')
			var colour = sargs.button.disabledFontColour[att];
			url = url.replace(re, att+colour);
		}
		return url;
		
	}
	
}






