/**
 * @author Daniel Schroeder <daniel.schroeder@groupon.de>
 * @copyright Groupon GmbH 2011
 * @package Groupon jQuery Deals plugin
 * @version $Id$
 *
 * Frontend of the jQuery Deal plugin
 * Plugin will request deals via Groupon API and inject them into DOM
 * 
 * Options:
 *	api:	Path to backend script
 *	mode:	country|city|geo|ip|coords see backend script for details
 *	limit:	number of deals to get
 *	item: html code for deal item. see example to see how it works. possible placeholders:
 *		title
 *		price
 *		original_price
 *		city_name
 *		city_url
 *		link
 *		image
 *		image_small
 *		image_medium
 *		image_large
 *		discount_percent
 *	container: html code for container of deals.see example to see how it works. there's only one placeholder {content}
 *	price_floating_point: floating point. defaults to "."
 *	price_precision: decimal places. defaults to "2"
 *	callback: a callback function taht will be called after deals have been injected into DOM
 *
 * Example:
 * $(document).ready(function() {
 * 		$('#result').deals({
 *	 		country:	'de',
 * 			limit:		3,
 * 			container:	'<div class="box-content clearfix">{content}</div>',
 *	 		item:		'<div class="extraDealDescription">\
 * 							<h3><a title="{city_name}: {title}" href="{link}" target="_blank"><span class="saving">{city_name}:</span> {title}</a></h3>\
 * 						</div>\
 *	 					<div class="extraDealData clearfix">\
 * 							<div class="price"><a title="{city_name}: {title}" href="{link}" target="_blank"><span class="priceIcon"></span>{price} &euro;</a></div>\
 * 							<div class="value"><a title="{city_name}: {title}" href="{link}" target="_blank">Instead of <span>{original_price} &euro;</span></a></div>\
 * 							<div class="extraDealView"><a title="{city_name}: {title}" href="{link}" target="_blank">View</a></div>\
 * 							<div class="extraDealImage"><a title="{city_name}: {title}" href="{link}" target="_blank"><img alt="{city_name}: {title}" width="108" src="{image}"></a></div>\
 * 						</div>',
 * 			callback:	function() {}
 * 		});
 * });
 */
(function($){
	$.fn.deals = function(options){
		var defaults = {
			//api:					'../dealapi.php',
			api:					'/wp-content/plugins/groupon-dealbox/dealapi.php',
			mode:					'geo',
			limit:					3,
			item:					'<li><a href="{link}">{title}</a></li>',
			container:				'<ul>{content}</ul>',
			price_floating_point:	',',
			price_precision:		2,
			callback:				function(){}
		};
		
		var options = $.extend(defaults, options);
		var dealContainer = $(this);
		var dealItemHtml = options['item'];
		options['item'] = undefined;
		var dealContainerHtml = options['container'];
		options['container'] = undefined;
		var dealboxCallback = options['callback']
		options['callback'] = undefined;
		$.get(options['api'], options, function(data) {			
			dealContainer.html(data);
			var dealsObj = jQuery.parseJSON(data);
			if(!dealsObj.length) {
				return;
			}
			var dealboxContent = '';
			for(var i=0;i<dealsObj.length;i++) {
				var dealInfo = {
					title: dealsObj[i]['@attributes']['title'],
					price: dealsObj[i]['@attributes']['price'],
					original_price: dealsObj[i]['@attributes']['original_price'],
					city_name: dealsObj[i]['city']['@attributes']['name'],
					city_url: dealsObj[i]['city']['@attributes']['url'],
					link: dealsObj[i]['@attributes']['url'],
					image: dealsObj[i]['@attributes']['image_small_url'],
					image_small: dealsObj[i]['@attributes']['image_small_url'],
					image_medium: dealsObj[i]['@attributes']['image_medium_url'],
					image_large: dealsObj[i]['@attributes']['image_large_url'],
					discount_percent: dealsObj[i]['@attributes']['discount_percent']
				}
				dealboxContent += dealItemHtml.replace(/\{title\}/g, dealInfo['title'])
											  .replace(/\{price\}/g, dealInfo['price'])
											  .replace(/\{original_price\}/g, dealInfo['original_price'])
											  .replace(/\{city_name\}/g, dealInfo['city_name'])
											  .replace(/\{city_url\}/g, dealInfo['city_url'])
											  .replace(/\{link\}/g, dealInfo['link'])
											  .replace(/\{image\}/g, dealInfo['image'])
											  .replace(/\{image_small\}/g, dealInfo['image_small'])
											  .replace(/\{image_medium\}/g, dealInfo['image_medium'])
											  .replace(/\{image_large\}/g, dealInfo['image_large'])
											  .replace(/\{discount_percent\}/g, dealInfo['discount_percent'])
				;
			}
			if(dealboxContent.length) {
				dealContainer.addClass('active').html(dealContainerHtml.replace(/\{content\}/g, dealboxContent));
			}
			dealboxCallback();
		});
	};
})(jQuery);
