(function($) {
	$.fn.kimptonSpecials = function(options){ 

		var defaults = {
			server : 'production', // test || production
			page : '',
			property_number : '',
			media_id : '',
			specials_path : '',
			term_char_offset : '',
			new_window_height : '640',
			new_window_width : '980',
			slide_speed: '500',
			slide_rotation_duration: '4000',
			slide_number_rotations: '1', // 1 == stop on last slide, 0 == rotate infinitely
			promotion_speed: '500',
			promotion_rotation_duration: '8000'
		};
		
		/*Merge the default and optios, then set to settings*/
		var settings = $.extend({}, defaults, options);										
		
		initial_setup();
		
		function initial_setup() {
			if(settings.page == 'home') {
				var conditions = {
					'specials_publish': 'false',
					'promotional_texts_publish': 'true',
					'promotional_texts_tag': 'home'
				}
			}
			if(settings.page == 'specials') {
				var conditions = {
					'specials_publish': 'true',
					'promotional_texts_publish': 'true',
					'promotional_texts_tag': 'specials'
				}
			}
			var server_url = '';
			if(settings.server == 'test') {
				server_url = 'cms-specials.dev';
			} else {
				server_url = 'cms-specials';
			}
			$.ajax({				
				url: 'http://' + server_url + '.kimptongroup.com/properties/' + settings.property_number + '/view.json',
				dataType: 'jsonp',
				data: conditions,
				success: function(data, textStatus, XMLHttpRequest) {
					alert('Load was performed.');
				},
				error: function(XMLHttpRequest, textStatus, errorThrown) {
					alert(textStatus);
				}
			});
			
			cycle_images();
		}
		
		function cycle_images() {
			if(settings.slide_number_rotations != '0') {
				slides = $('#' + settings.media_id + '').children().size();
				rotations = slides * settings.slide_number_rotations;
				$('#' + settings.media_id + '').cycle({
					fx: 'fade',
					speed: settings.slide_speed,
					timeout: settings.slide_rotation_duration,
					autostop: '1',
					autostopCount: rotations			
				});
			} else {
				$('#' + settings.media_id + '').cycle({
					fx: 'fade',
					speed: settings.slide_speed,
					timeout: settings.slide_rotation_duration			
				});
			}
		}
		
		/* anchor animation */
		$.fn.anchorAnimate = function(settings) {
		
			settings = jQuery.extend({
				speed : 1100
			}, settings);	
		
			return this.each(function(){
				var caller = this
				$(caller).click(function (event) {	
					event.preventDefault()
					var locationHref = window.location.href
					var elementClick = $(caller).attr("href")
					
					var destination = $(elementClick).parent().offset().top;
					$("html:not(:animated),body:not(:animated)").animate({ scrollTop: destination}, settings.speed, function() {
						window.location.hash = elementClick
					});
					return false;
				})
			})
		}
		
		function strip_(title) {
			return title.toLowerCase().replace(/\s/g, '_').replace(/\'/g, '');
		}
		
		function build_link_list(data, i, data_len) {	
			var anchor_subtitle = '';
			if(data.anchor_subtitle) {
				anchor_subtitle = ' (' + data.anchor_subtitle + ')';
			}
			var li = "<li><a href=\"#" + data.anchor_link_name + "\" class=\"anchor-link\" title=\"" + data.anchor_link_title + "\"><strong>" + data.anchor_link_title + "</strong>" + anchor_subtitle + "</a></li>";
			
			// if i < math.round(data_len/2) print in first column else in second column	
			if(i>=Math.round(data_len/2)) {
				$("ul.second").append(li);
			}
			else {
				$("ul.first").append(li);
			}
		}
		
		function add_special(data, symbol_count) {
			
			var package = "<div class=\"package\"><div class=\"package-body\"><a name=\"" + data.anchor_link_name + "\" id=\"" + data.anchor_link_name + "\"></a><p class=\"specials-title\"><strong>" + data.title + "</strong></p>";
			
			package += data.body;
			if(data.terms) {
				switch(symbol_count) {
					case 0:
						var symbol = "*";
						break;
					case 1:
						var symbol = "&dagger;";
						break;
					case 2:
						var symbol = "&Dagger;";
						break;
					default: var symbol = "";
				}
				package += "<p><a class=\"anchor-link\" href=\"#" + data.anchor_link_name + "_terms\">Terms and Conditions" + symbol + "</a></p>";
				
				add_terms(data, symbol);
				symbol_count++;
			}
			if(data.valid_thru) {
				package += "<p><em>" + data.valid_thru + "</em></p>";
				//package += '<div class="valid_thru">' + data.valid_thru + '</div>';
			}
			package += '</div>';
			if(data.url != '') {
				package += '<a class="btn-book-now-specials" title="Book now" href="' + data.url + '"></a>';
			}
			else if(data.rate_code != '') {
				package += '<a class="btn-book-now-specials" title="Book now" href="' + data.reservation_url + '"></a>';
			}
			else {
				package += '<div class="button_placeholder"></div>';
			}
			package += '<div class=\"clear\"></div></div>';
			
			$("#packages").append(package);	
			return symbol_count;
		}
		
		function add_terms(data, symbol) {
			var term_split = data.terms.substring(0,settings.term_char_offset) + symbol + data.terms.substring(settings.term_char_offset,data.terms.length);
			var terms = "<div class=\"package-terms\"><a name=\"" + data.anchor_link_name + "_terms\" id=\"" + data.anchor_link_name + "_terms\"></a>" + term_split + "</div>";
			$("#terms").append(terms);
		}
		
		function write_specials(data) {
			var symbol_count = 0;
			// loop through and get all of the specials
			var data_len = data.length;
			for(var i in data) {
				if(data[i].publish==1){			
					build_link_list(data[i], i, data_len);
					symbol_count = add_special(data[i], symbol_count);
				}		
			}
			if(!($.browser.msie && $.browser.version < 8)){		
				$("a.anchor-link").anchorAnimate()
			}
			load_scroll_to();
		}
		
		function load_scroll_to() {
			var current_url = window.location.toString();
			if(current_url.indexOf('#') > 0) {
				var anchor_name = current_url.substring(current_url.indexOf('#')+1, current_url.length);
				var destination = $("a[name='" + anchor_name + "']").offset().top;
				$("html:not(:animated),body:not(:animated)").animate({ scrollTop: destination-10}, 500);
			}
		}		
		
		/* promotions */
		function write_promotion(data, page) {
			var scrim = "";
			for(var i in data) {
				var image="";
				var window_class = "";
				var subtitle = "";
				var book_now_link = "";
				var specials_link = "";
				var url = "";
				var url_text = "";
				var location = "";
				if(!data[i].subtitle) {
					subtitle= "no_subtitle ";
				}			
				if(data[i].open_url_new_window==1)
				{
					window_class = "newsite ";
				}
				if(data[i].book_now_url) {
					book_now_link = '<a class="book_now" href="' + data[i].book_now_url + '">Book Now</a>';
				}
				if(data[i].url == '' && data[i].specials_anchor_name) {
					// link goes to specials page with anchor
					url = settings.specials_path + '#' + data[i].specials_anchor_name;
				}
				else if(data[i].url != '') {
					url = data[i].url;
				}
				else {
					url = '';
				}
				if(data[i].url_text) {
					url_text = '<a class="' + subtitle + 'book-link">'+ data[i].url_text + ' &raquo;</a>';
				}
				scrim = scrim + '<div><div class="promotion_wrap"><div class="promotion" onclick="openLink(\'' + url + '\',\'' + window_class + '\',\'' + settings.new_window_height + '\',\'' + settings.new_window_width  + '\')">' + '<span class="scrim-header">' + data[i].title + '</span><br />';				
				if (data[i].subtitle){
					scrim = scrim + '<span class="scrim-subheader">' + data[i].subtitle + '</span>';
				}
				scrim = scrim + url_text + '</div>'	+ book_now_link + '</div></div>';

			}
			$("#scrim-scroll").html(scrim);
			animate_promotion();
		}				
		
		function animate_promotion() {	
			$('#scrim-scroll').cycle({
				fx: 'scrollVertUp',
				speed: settings.promotion_speed,
				timeout: settings.promotion_rotation_duration				
			});
			
			$('#scrim-scroll').animate({
				marginTop: "-70px"
			}, 1000);
		}
		
		this.do_work = function(data){
			if (data.status == "success") {
				
				if(settings.page == 'home') {
					write_promotion(data.data.PromotionalText, 'home');
				}
				if(settings.page == 'specials') {				
					write_promotion(data.data.PromotionalText, 'specials');
					write_specials(data.data.Special);
				}				
			} else if (data.status == 'error') {
			alert(data.message);
			} else {
			// this is a last resort
			alert('haps');
			}
			return this;
		}
		/*To keep chainability,  return the jQuery Object*/
		return this;	
	};

})(jQuery);

function data_callback(data) {
	kimptonSpecials.do_work(data);	
}

function openLink(url, newwindow, height, width, size) {
	var target = "";
	var settings = "width=" + width + ",height=" + height + ",scrollbars=yes,resizable=yes,status=no,toolbar=yes,location=no,menubar=no";

	if(size == 'synxis') {
		settings = "width=1000,height=600,scrollbars=yes,resizable=yes,status=no,toolbar=yes,location=no,menubar=no"; 
	}
	if(newwindow) {
		target = "_blank";		
		newWin = window.open(url, target, settings);
		newWin.focus();
	}
	else {
		location.href = url;
	}
  return false;
}
