/** * DISNEY UI - Tile Pack * @version 1.4.4 * @author: Dwight Brown <dwightb at construct7.com> */	 ;(function($){	var count = 1; // Used to generate div ids for SWFObject	var _options =		{            "flashProxySWF": "flashproxy.swf",			"flashVer":      "9.0.124",			"xiSwfUrlStr":   "assets/js/swfobject/expressInstall.swf",			"flashVars":     {},			"flashParams":   { "wmode": "transparent" },			"priceSaleText": "SALE: ",			"priceWasText":  "WAS: "		};	var classes =		{			"error":     "disney-ui-error",			"loading":   "disney-ui-loading",			"container": "disney-ui-tilepack",			"header":    "tilepack-header",			"footer":    "tilepack-footer",			"carousel":  "tilepack-carousel",			"grid":      "tilepack-grid",			"meta":      "tilepack-meta",			"title":     "tilepack-title",			"desc":      "tilepack-desc",			"price":     "tilepack-price",			"priceSale": "tilepack-price-sale",			"media":     "tilepack-media",			"overlay":   "tilepack-overlay",			"paging":    "tilepack-paging"		};	var xmlMap =		{			"items":           "items",			"items_title":     "", // attr("title")			"item":            "items item",			"link":            "link",			"link_url":        "", // attr("url")			"link_title":      "", // attr("title")			"media":           "media",			"media_url":       "", // attr("url")			"media_title":     "", // attr("title")			"title":           "title",			"desc":            "desc",			"price":           "price",			"price_reg_low":   "reg_price_low",			"price_reg_high":  "reg_price_high",			"price_sale_low":  "sale_price_low",			"price_sale_high": "sale_price_high"		};	$.fn.TilePack = function( options )	{		var self = this;		// Set default options		options = options || {};		options.xmlMap        = options.xmlMap        || xmlMap;		options.flashProxySWF = options.flashProxySWF || _options.flashProxySWF;		options.flashVer      = options.flashVer      || _options.flashVer;		options.xiSwfUrlStr   = options.xiSwfUrlStr   || _options.xiSwfUrlStr;		options.flashVars     = options.flashVars     || _options.flashVars;		options.flashParams   = options.flashParams   || _options.flashParams;		options.priceSaleText = options.priceSaleText || _options.priceSaleText;		options.priceWasText  = options.priceWasText  || _options.priceWasText;		function generatePaging( options, items )		{			var itemsPerPage = options.cols * options.rows;			if ( itemsPerPage >= items.length || itemsPerPage == 0 ) return "";						var html = '<table class="' + classes.paging + '"><tr>';			for ( var i = 0; i < (items.length / itemsPerPage); ++i )			{				html += '<td><a href="#page-'+ (i + 1) +'" class="page-' + (i + 1) + '"><span>' + ((i + 1).toString()) + '</span></a></td>';			}			html += '</tr></table>';					return html;		};		function changePage( target, page )		{			var carousel = $(target).find('.' + classes.carousel );			var grid = $(target).find('.' + classes.grid );			var left = 0;						left = (page - 1) * $(carousel).width();			left = "-" + left + "px";						$(grid).animate( {"left": left}, "fast" );		};		function getExtension( filename )		{			if( !filename || filename.length == 0 ) return ""; 			var i = filename.lastIndexOf( "." ); 			if ( i == -1 ) return ""; 			return (filename.substr( i+1, filename.length )).toUpperCase();		};		function embedSWFs( swfs )		{			for ( elementId in swfs )			{			    swfobject.embedSWF(			    	swfs[elementId],			    	elementId,			    	$('#'+elementId).width(),			    	$('#'+elementId).height(),			    	options.flashVer,			    	options.xiSwfUrlStr,			    	options.flashVars,			    	options.flashParams,			    	{}			    );			    			    $('#'+elementId).addClass( classes.media );			}		};		function parseXML( xml )		{			if ( window.ActiveXObject && window.GetObject )			{				var dom = new ActiveXObject( 'Microsoft.XMLDOM' );				dom.loadXML( xml );				return dom;			}						if ( window.DOMParser )			{				return new DOMParser().parseFromString( xml, 'text/xml' );			}						throw new Error( 'No XML parser available' );		};        function processXML( xml )        {			//if xml is a string parse it into an xml object first.			if ( xml.length ) xml = parseXML( xml );						var swfs = {};			var rows_media = [], rows_meta = [], rows_title_desc = [], rows_price = [];			var n = 0;			var i = 0;						var items = $(xml).find(options.xmlMap.item);						// Media/Overlays			$(items).each( function()			{				if ( i == 0 || i % options.cols == 0 )				{					if ( n >= rows_media.length ) rows_media[n] = "";				}								var link_url    = options.xmlMap.link_url    ? $(this).find(options.xmlMap.link_url).text()    : (options.xmlMap.link  ? $(this).find(options.xmlMap.link).attr("url") : "");				var link_title  = options.xmlMap.link_title  ? $(this).find(options.xmlMap.link_title).text()  : (options.xmlMap.link  ? $(this).find(options.xmlMap.link).text() : "");				var media_url   = options.xmlMap.media_url   ? $(this).find(options.xmlMap.media_url).text()   : (options.xmlMap.media ? $(this).find(options.xmlMap.media).attr("url") : "");				var media_title = options.xmlMap.media_title ? $(this).find(options.xmlMap.media_title).text() : (options.xmlMap.media ? $(this).find(options.xmlMap.media).text() : "");				link_url = link_url || "#";								rows_media[n] += '<td class="'+classes.media+'">';				rows_media[n] += '<div>';				switch ( getExtension(media_url) )				{					case 'SWF':						swfs['tile-'+count] = media_url;						media_url = '';						rows_media[n] += '<div id="tile-' + (count++) + '" class="'+classes.media+'" src="'+(media_url||'')+'"></div>';						break;					default:						rows_media[n] += '<a href="'+link_url+'" title="'+link_title+'"><img id="tile-' + (count++) + '" class="'+classes.media+'" src="'+(media_url||'')+'" /></a>';				}				rows_media[n] += '<a class="'+classes.overlay+'"';				rows_media[n] += ' href="'+link_url+'"';				rows_media[n] += ' title="'+link_title+'">';				rows_media[n] += '</a></div></td>\n';								++i;								if ( i % options.cols == 0 )				{					++n;					if ( n >= options.rows ) n = 0;				}			});						// Meta			i = 0;			n = 0;			$(items).each( function()			{				if ( i == 0 || i % options.cols == 0 )				{					if ( n >= rows_title_desc.length )  rows_title_desc[n]  = "";					if ( n >= rows_price.length ) rows_price[n] = "";				}								var title    = $(this).find(options.xmlMap.title).text();				var desc     = $(this).find(options.xmlMap.desc).text();				var link_url = options.xmlMap.link_url ? $(this).find(options.xmlMap.link_url).text() : (options.xmlMap.link ? $(this).find(options.xmlMap.link).attr("url") : "");				link_url = link_url || "#";								// determine if and what price should be displayed				var price = $(this).find(options.xmlMap.price).text();								var price_reg_low   = $(this).find(options.xmlMap.price_reg_low).text();				var price_reg_high  = $(this).find(options.xmlMap.price_reg_high).text();				var price_sale_low  = $(this).find(options.xmlMap.price_sale_low).text();				var price_sale_high = $(this).find(options.xmlMap.price_sale_high).text();								var sale = (price_sale_low != null || price_sale_high != null) && (price_sale_low != price_reg_low && price_sale_high != price_reg_high);				var price_reg  = (price_reg_low  == price_reg_high)  ? (price_reg_low || price) : price_reg_low  + ' - ' + price_reg_high;				var price_sale = (price_sale_low == price_sale_high) ? price_sale_low : price_sale_low + ' - ' + price_sale_high;								if ( sale )				{					price = '<span class="' + classes.priceSale + '">' + options.priceSaleText + price_sale + '</span><br />' + options.priceWasText + price_reg;				}				else				{					price = price_reg;				}								rows_title_desc[n] += '<td class="'+classes.meta+'">';				rows_title_desc[n] += '<p class="'+classes.title+'"><a class="'+classes.title+'" href="'+link_url+'">'+title+'</a></p>';				if ( desc ) rows_title_desc[n] += '<p class="'+classes.desc+'">'+desc+'</p>';				rows_title_desc[n] += '</td>';				rows_price[n] += '<td class="'+classes.meta+' '+classes.price+'">'+price+'</td>';								++i;								if ( i % options.cols == 0 )				{					++n;					if ( n >= options.rows ) n = 0;				}			});						var html = '<div class="' + classes.container + '">';			html += '<div class="'+classes.header+'">';			var title = options.xmlMap.items_title ? $(xml).find(options.xmlMap.items_title).text() : (options.xmlMap.items ? $(xml).find(options.xmlMap.items).attr("title") : "");			if ( title && title != "" ) html += '<h2>' + title + '</h2>';						if ( options.pagingPosition == "top" ) html += generatePaging( options, items );			html += '</div>';			html += '<div class="'+classes.carousel+'" style="position: relative; overflow: hidden;">';			html += '<table class="' + classes.grid + '" style="position: relative; left: 0;">\n';			for ( i = 0; i < options.rows; ++i )			{				if ( i >= rows_media.length ) break;				html += '<tr>\n' + rows_media[i] + '</tr>\n';				html += '<tr>\n' + rows_title_desc[i] + '</tr>\n';				html += '<tr>\n' + rows_price[i] + '</tr>\n';			}			html += "</table>\n";			html += '</div>';			html += '<div class="'+classes.footer+'">';			if ( options.pagingPosition == "bottom" ) html += generatePaging( options, items );			html += '</div></div>';						$(self).html( html );						embedSWFs( swfs );						// Hover effect			$(self).find( 'td.' + classes.media + ' ' + 'div' ).mouseover( function()			{				$(this).fadeOut("fast").fadeIn("fast");				return false;			});						// Paging buttons event			$(self).find( '.' + classes.paging + ' a' ).click( function()			{				var target = $(this).parents('.' + classes.container);				var href = $(this).attr("href");				var page = href.split("#page-");				page = parseInt( page[1] );				changePage( target, page );				return false;			});        };		function isLocal( uri )		{			var start = uri.indexOf("//") + 2;			if ( start == 1 ) return true;			var end = uri.indexOf("/", start);			var domain = uri.slice(start, end);						return (location.hostname == domain);		};		return this.each( function()		{			// Display loading indicator			$(this).html( '<p class="' + classes.loading + '">' + options.loadingText + '</p>' );						if ( options && options.feed )			{				if ( isLocal(options.feed) )				{						$.ajax(					{						target: this,						type: "GET",						url: options.feed,						dataType: "xml",						success: processXML,						error: function()						{							$(this).html( '<p class="' + classes.error + '">Error: Article feed failed to load.</p>' );						}					});				}				else if ( $.flashproxy )				{					//$.flashproxy.debug = true;					$.flashproxy.swf = options.flashProxySWF;										$.flashproxy.onFinish = processXML;										$.flashproxy.onError = function( error )					{						$(self).html( '<p class="' + classes.error + '">' +error +  '</p>' );					};										$.flashproxy.init();					$.flashproxy.get( options.feed );				}				else				{					$(this).html( '<p class="' + classes.error + '">Error: FlashProxy not available for remote request.</p>' );				}			}			else			{				$(this).html( '<p class="' + classes.error + '">Error: Article feed not specified.</p>' );			}		});	};})(jQuery);/* Avoid errors in browser that do not support console.log() */if ( !window.console ){	window.console = {};	console.log = function(){};}
