/** 
 * @fileoverview 
 * This file contains the Cufon rendering functionality and a jQuery-Method to render additional selectors.
 *
 */ 
(function ($) {
	/**
	 * @name Headlines
	 * @class
	 * @private
	 *
	 * @description
	 * internal Cufon-Replacement class. Use {@link $.addCufonSelector} to add more selectors. jQuery is needed for all the CSS3-Type selectors.
	 * <br />
	 * You should avoid extending these selectors. Use the the tags and classes below instead. 
	 * For instance You can use a &lt;h4 class"header regular"&gt; for displaying 16px rendered text.
	 * If you need an inline element to be rendered you can go with something like this: 
	 * 
	 * @example
	 * &lt;span class"h4 header regular"&gt;
	 *
	 * h1 -> 30 Pixel see base.screen.less
	 * h2 -> 20 Pixel see base.screen.less
	 * h3 -> 16 Pixel see base.screen.less
	 *
	 * @requires Cufon
	 * @see Please see <a href="http://wiki.github.com/sorccu/cufon/">Cufon-Documentation</a> for more information.
	 *
	 */
	var Headlines = (function () {
			/**
			 * @name demiBold
			 * @fieldOf Headlines
			 * @type array
			 *
			 * @default 'h1.header', 'h2.header', 'h3.header', '.h1.header', '.h2.header', '.h3.header'
			 *
			 * @description Default demi-bold selectors
			 */
		var demiBold = ['h1.header', 'h2.header', 'h3.header', '.h1.header', '.h2.header', '.h3.header'],
			
			/**
			 * @name regular
			 * @fieldOf Headlines
			 * @type array
			 *
			 * @default 'h1.header.regular', 'h2.header.regular', 'h3.header.regular', '.h1.header.regular', '.h2.header.regular', '.h3.header.regular'
			 *
			 * @description Default regular selectors
			 */
			regular = ['h1.header.regular', 'h2.header.regular', 'h3.header.regular', '.h1.header.regular', '.h2.header.regular', '.h3.header.regular'],
			
			
			/**
			 * @methodOf Headlines
			 *
			 * @description 
			 * Renders the selectors from #demiBold and #regular by type.
			 */
			CufonRender	= function() {
				var _demiBold	= demiBold.join(', '),
					_regular	= regular.join(', ');
					
				demiBold = [];
				regular = [];
				
				if (_demiBold != '') {
					Cufon.replace(_demiBold, { fontFamily: 'sma futura global demibold' });
				}
				
				if (_regular != '') {
					Cufon.replace(_regular, { fontFamily: 'sma futura global regular' });
				}
			};
		
		// refault rendering
		CufonRender();

		return {
			demiBold	: demiBold,
			regular		: regular,
			CufonRender	: CufonRender
		}
	}());
	
	
	/**
	 * @memberOf jQuery
	 * @name addCufonSelector
	 * @namespace
	 * 
	 * @description add selector to Cufon and render it via {@link Headlines}
	 *
	 * @param {String/Object} selector	
	 * @param {String} type 
				Headline-Type
	 * @param {Boolean} render
				render (only for internal use)
	 *
	 * @example
	 * <h2>Single Selectors</h2>
	 * $.addCufonSelector('legend.header', 'demibold');
	 *
	 * @example
	 * <h2>Multiple Selectors</h2>
	 * $.addCufonSelector([
	 *	'legend.header',
	 *	'foo.bar'
	 * ]}, 'demibold');
	 */	
	$.addCufonSelector = function (selector, type, render) {
		if ('string' !== typeof selector) {
			$.each(selector, function (i, el) {
				$.addCufonSelector(el, type, false);
			});
			
			Headlines.CufonRender();
			return;
		}
		
		if ('demibold' == type) {
			Headlines.demiBold.push(selector);
		
		} else if ('regular' == type) {
			Headlines.regular.push(selector);
		
		} else {
			console.warn("The headings type '" + type + "' wasn't found. Possible types are 'demibold' or 'regular'");
		}
		
		if (render !== false) {
			Headlines.CufonRender();
		}
	};
}(jQuery));
