/*

jQuery Sifr Plugin...
	* URL: http://jquery.thewikies.com/sifr
	* Description: jQuery Browser Plugin embeds Sifr.
	* Author: Jonathan Neal
	* Copyright: Copyright (c) 2008 Jonathan Neal under dual MIT/GPL license.

*/

jQuery.fn.sifr = function (settings) {

	/* --------------------------------
	   jQuery Extend
	   --------------------------------*/
	var settings = jQuery.extend({}, settings);
	var hex = function(N) {
		if (N==null) return "00";
		N = parseInt(N);
		if (N==0||isNaN(N)) return "00";
		N = Math.max(0,N);
		N = Math.min(N,255);
		N = Math.round(N);
		return "0123456789ABCDEF".charAt((N-N%16)/16)+"0123456789ABCDEF".charAt(N%16);
	};

	/* --------------------------------
	   Function: Convert colors to HEX
	   --------------------------------*/
	var colorToHex = function(color) {
		color = or(color,'000000');
		if (color.search('rgb')>-1) {
			color = color.substr(4,color.length-5).split(', ');
			color = hex(color[0])+hex(color[1])+hex(color[2]);
		}
		color = color.replace('#','');
		if (color.length<6) {
			color = color.substr(0,1) + color.substr(0,1) + color.substr(1,1) + color.substr(1,1) + color.substr(2,1) + color.substr(2,1);
		}
		return color;
	};

	/* --------------------------------
	   Function: Custom Ternary
	   --------------------------------*/
	var or = function() {
		return (!arguments[2])
			? (arguments[0]) ? arguments[0] : (arguments[1])
			: (arguments[0]) ? arguments[2] : (arguments[1]);
	};

	/* --------------------------------
	   jQuery Sifr for Each Element
	   --------------------------------*/
	return this.each(function() {
		var elem = jQuery(this);

		/* --------------------------------
		   Check for Sifr Presense
		   --------------------------------*/
		if (elem.attr('class')&&elem.attr('class').search('sifr')>-1) {
			elem.unsifr();
		}

		/* --------------------------------
		   jQuery Sifr
		   --------------------------------*/
		elem.flash(
			{},
			{},
			function (htmlOptions) {

				/* --------------------------------
				   Assign Settings
				   --------------------------------*/
				elem.addClass('sifr');
				/* Absolute Offset X ... */ var faox = or(settings['absoluteOffsetX'], or(settings['aoX'], 0));
				/* Absolute Offset Y ... */ var faoy = or(settings['absoluteOffsetY'], or(settings['aoX'], 0));
				/* Font Path + File .... */ var font = or(settings['path'], '') + or(settings['font'], elem.css('fontFamily').split(',')[0].replace(/\"|\'/gm , ''));
				/* Text Color .......... */ var fcol = or(settings['color'], colorToHex(elem.css('color')), colorToHex(settings['color']));
				/* Text Underline ...... */ var fund = or(settings['underline'], (elem.css('textDecoration')=='underline'), true);
				/* Text Link Color ..... */ var falc = or(settings['link'], '', colorToHex(settings['link']));
				/* Text Hover Color .... */ var fahc = or(settings['hover'], '', colorToHex(settings['hover']));
				/* Background Color .... */ var bcol = or(settings['backgroundColor'], colorToHex(elem.css('backgroundColor')), colorToHex(settings['backgroundColor']));
				/* Text Align on Y ..... */ var haln = or(settings['hAlign'], or(elem.css('textAlign'), 'left'));
				/* Text Align on X ..... */ var valn = or(settings['vAlign'], or(elem.css('verticleAlign'), 'top'));
				/* Text Part 1 ......... */ elem.html('<span style="display:inline;margin:0;padding:0;float:none;width:auto;height:auto;">'+elem.html()+'</span>');
				/* Text Part 2 ......... */ var fkid = jQuery(this.firstChild);
				/* Font Size ........... */ if (settings['size']) { fkid.css('fontSize',settings['size']+'px'); }
				/* Content ............. */ var html = or(settings['content'], fkid.html());
				/* Width ............... */ var wide = or(settings['width'], fkid.width());
				/* Height .............. */ var tall = or(settings['height'], fkid.height());
				/* Relative Offset X ... */ var frox = faox + or((wide/100)*or(settings['relativeOffsetX'], settings['roX']), 0);
				/* Relative Offset Y ... */ var froy = faoy + or((tall/100)*or(settings['relativeOffsetY'], settings['roY']), 0);
				/* Hide Child .......... */ fkid.hide();

				/* --------------------------------
				   Assign Settings: Font Size
				   --------------------------------*/
				if (settings['size']) {
					/* Save Font Size ...... */ fkid.css('fontSize',elem.css('fontSize'));
					/* Save Line Height .... */ fkid.css('lineHeight',elem.css('lineHeight'));
					/* Clear Font Size ..... */ elem.css('fontSize', '0');
					/* Clear Line Height ... */ elem.css('lineHeight', '0');
				} else {
					fkid.css('fontSize','0');
				}

				/* --------------------------------
				   Execute Sifr
				   --------------------------------*/
				htmlOptions.style = 'vertical-align:' + valn + ';';
				htmlOptions.wmode = 'transparent';
				htmlOptions.src = font +'.swf';
				htmlOptions.flashvars.txt = html;
				htmlOptions.width = wide;
				htmlOptions.height = tall;
				htmlOptions.flashvars.w = wide;
				htmlOptions.flashvars.h = tall;
				htmlOptions.flashvars.textalign = haln;
				if (frox!=0) { htmlOptions.flashvars.offsetLeft = frox; }
				if (froy!=0) { htmlOptions.flashvars.offsetTop = froy; }
				if (fcol) { htmlOptions.flashvars.textcolor = fcol; }
				if (falc) { htmlOptions.flashvars.linkColor = falc; }
				if (fahc) { htmlOptions.flashvars.hoverColor = fahc; }
				if (fund) { htmlOptions.flashvars.underline = fund; }
				if (bcol) { htmlOptions.flashvars.bgColor = bcol; }
				/* --------------------------------
				   Append Sifr Element
				   --------------------------------*/
				elem.append(jQuery.fn.flash.transform(htmlOptions));
		});
	});
};
jQuery.fn.unsifr = function() {
	return this.each(function() {
		var elem = jQuery(this);
		var ekid = jQuery(this.firstChild);

		/* --------------------------------
		   Check for Existing Sifr Presence
		   --------------------------------*/
		if (elem.attr('class')&&elem.attr('class').search('sifr')>-1) {
			if (parseInt(ekid.css('fontSize'))>0)
			{
				elem.css('fontSize',ekid.css('fontSize'));
				elem.css('lineHeight',ekid.css('lineHeight'));
			}
			elem.html(ekid.html());
			elem.removeClass('sifr');
		}
	});
};
