// define ajax spinner object
var spinner = '<img src="/_assets/_images/spinner.gif" class="spinner" alt="Please wait..." />';


$(document).ready(function(){
	
	
	// Supersleight
	$('body').supersleight();
	

	// Add hooks for style caps to forms
	$("#call_back form, #resources_access form, #contact form, #admin_demo form, #purchase form").prepend('<div class="cap_top"></div>').append('<div class="cap_bottom"></div>');
	
	
	// Add hook to submit forms from links
	$("form a.submit").click(function(){
		$(this).parents('form').append(spinner);
		$(this).parents('form').submit();
		return false;
	});
	
	
	// Add Contact Form submit action
	$("#contact form").submit(function(){
		$.post($(this).attr('action'), 
			$(this).serialize(),
			function(data){
				if (data.status == 'fail')
				{
					form_error("contact", data);
				}
				else
				{
					form_success("contact", data);
				}				
			}, "json");
			
		return false;
	});
	
	
	// Add Call Back Form submit action
	$("#call_back form").submit(function(){
		$.post($(this).attr('action'), 
			$(this).serialize(),
			function(data){
				if (data.status == 'fail')
				{
					form_error("call_back", data);
				}
				else
				{
					form_success("call_back", data);
				}				
			}, "json");
			
		return false;
	});
	
	
	// Add Puchase Form submit action
	$("#purchase form").submit(function(){
		$.post($(this).attr('action'), 
			$(this).serialize(),
			function(data){
				if (data.status == 'fail')
				{
					form_error("purchase", data);
				}
				else
				{
					form_success("purchase", data);
				}				
			}, "json");
			
		return false;
	});
	
	
	// Add Sample License submit action
	$("#sample_license form").submit(function(){
		$.post($(this).attr('action'), 
			$(this).serialize(),
			function(data){
				if (data.status == 'fail')
				{
					form_error("sample_license", data);
				}
				else
				{
					form_success("sample_license", data);
				}
			}, "json");
			
		return false;
	});
	
	
	// Add Temporary Resources Access submit action
	$("#resources_access form").submit(function(){
		$.post($(this).attr('action'), 
			$(this).serialize(),
			function(data){
				if (data.status == 'fail')
				{
					form_error("resources_access", data);
				}
				else
				{
					form_success("resources_access", data);
				}				
			}, "json");
			
		return false;
	});
	
	
	// Add Live Admin Demo Request form submit action
	$("#admin_demo form").submit(function(){
		$.post($(this).attr('action'), 
			$(this).serialize(),
			function(data){
				if (data.status == 'fail')
				{
					form_error("admin_demo", data);
				}
				else
				{
					form_success("admin_demo", data);
				}				
			}, "json");
			
		return false;
	});
	
	
	// Add Live Admin Demo Request form submit action
	$("#resources_login form").submit(function(){
		$.post($(this).attr('action'), 
			$(this).serialize(),
			function(data){
				if (data.status == 'fail')
				{
					form_error("resources_login", data);
				}
				else
				{
					form_success("resources_login", data);
				}				
			}, "json");
			
		return false;
	});
	
	
	
	if ($("#income").length > 0)
	{
		// Update Income Calculator totals on load
		refreshTotals();
		// On Change event to update totals on Income Calculator
		$("#income input, #income select").change(function(){
			refreshTotals();
		})
	}

});



function form_error(form_id, data)
{
	$("#"+form_id+" form .spinner").remove();
	$("#"+form_id+" form .status").html(data.message).removeClass('success').addClass('error').slideDown();
	
	$("#"+form_id+" form input").removeClass('error');
	$.each(data.errors, function(i, val)
	{
		$("#"+form_id+" form input[name='"+i+"']").addClass('error');
	});
}

function form_success(form_id, data)
{
	$("#"+form_id+" form .spinner").remove();
	$("#"+form_id+" form .status").html(data.message).removeClass('error').addClass('success').slideDown();
	$("#"+form_id+" form .content :not(.status)").remove();
	
	if (form_id == 'sample_license')
	{
		// provide download link
		$("#sample_license form .status").after('<div id="license_link"><a href="/_assets/_pdfs/sample_area_license.pdf">Download License</a></div>');
	}
	
	if (form_id == 'resources_login')
	{
		window.location = '/resources/';
	}
}






/* Income Calculator */
function refreshTotals()
{
	var subarea = 0;
	var global = 0;
	var featured = 0;
	var email = 0;
	var sponsor = 0;
	var total = 0;
	var sel = '';
	
	// subarea
	sel = '#income #subarea';
	subarea = getNumber($(sel+" .price input").val()) * getNumber($(sel+" .multiplier select").val());
	subarea = subarea * getNumber($("#income #subareas input[name='subarea_count']:checked").val());
	$(sel+" .totals .monthly .amount").text(formatCurrency(subarea));
	$(sel+" .totals .annually .amount").text(formatCurrency(subarea*12));
	
	// global
	sel = '#income #global';
	global = getNumber($(sel+" .price input").val()) * getNumber($(sel+" .multiplier select").val());
	$(sel+" .totals .monthly .amount").text(formatCurrency(global));
	$(sel+" .totals .annually .amount").text(formatCurrency(global*12));
	
	// featured event
	sel = '#income #featured';
	featured = getNumber($(sel+" .price input").val()) * getNumber($(sel+" .multiplier select").val());
	$(sel+" .totals .monthly .amount").text(formatCurrency(featured));
	$(sel+" .totals .annually .amount").text(formatCurrency(featured*12));
	
	// email blast
	sel = '#income #email';
	email = getNumber($(sel+" .price input").val()) * getNumber($(sel+" .multiplier select").val());
	$(sel+" .totals .monthly .amount").text(formatCurrency(email));
	$(sel+" .totals .annually .amount").text(formatCurrency(email*12));
	
	// title sponsor
	sel = '#income #sponsor';
	sponsor = getNumber($(sel+" .price input").val());
	$(sel+" .totals .annually .amount").text(formatCurrency(sponsor));
	
	// income total
	total = (subarea*12) + (global*12) + (featured*12) + (email*12) + sponsor;
	$("#income_total span").text(formatCurrency(total));
}




function getNumber(val)
{
	val = val.replace(',', '');
	return parseInt(val);
}


/* formatNumber: PARAMETERS...
num: the decimal number to convert (must be numeric)
dec: number of resulting decimal places to keep
thou: the character to use for thousands separator
pnt: the character to use for decimal point
curr1: Preceding Currency Symbol
curr2: Trailing Currency symbol
n1: Preceding Negative character
n2: Trailing Negative character
*/
function formatNumber(num, dec, thou, pnt, curr1, curr2, n1, n2)
{
	var x = Math.round(num * Math.pow(10,dec));
	if (x >= 0) n1 = n2 = '';
	var y = (''+ Math.abs(x)).split('');
	var z = y.length - dec;
	if (z<0) z--;
	for (var i = z; i < 0; i++) y.unshift('0');
	if (z<0) z = 1;
	y.splice(z, 0, pnt);
	if (y[0] == pnt) y.unshift('0');
	while (z > 3) { z-=3; y.splice(z,0,thou); }
	var r = curr1 + n1 + y.join('') + n2 + curr2;
	return r;
}

// This function formats numbers by adding commas
function thousandsFormat(nStr)
{
  nStr += '';
  x = nStr.split('.');
  x1 = x[0];
  x2 = x.length > 1 ? '.' + x[1] : '';
  var rgx = /(\d+)(\d{3})/;
  while (rgx.test(x1))
    x1 = x1.replace(rgx, '$1' + ',' + '$2');
  return x1 + x2;
}

function formatCurrency(num) {
  num = formatNumber(num, 2, ',', '.', '$', '', '-', '');
  return thousandsFormat(num);
}






/* jQuery Supersleight */
jQuery.fn.supersleight=function(settings){settings=jQuery.extend({imgs:true,backgrounds:true,shim:'/_assets/_images/clear.gif',apply_positioning:true},settings);return this.each(function(){if(jQuery.browser.msie&&parseInt(jQuery.browser.version,10)<7&&parseInt(jQuery.browser.version,10)>4){jQuery(this).find('*').andSelf().each(function(i,obj){var self=jQuery(obj);if(settings.backgrounds&&self.css('background-image').match(/\.png/i)!==null){var bg=self.css('background-image');var src=bg.substring(5,bg.length-2);var mode=(self.css('background-repeat')=='no-repeat'?'crop':'scale');var styles={'filter':"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+src+"', sizingMethod='"+mode+"')",'background-image':'url('+settings.shim+')'};self.css(styles)};if(settings.imgs&&self.is('img[src$=png]')){var styles={'width':self.width()+'px','height':self.height()+'px','filter':"progid:DXImageTransform.Microsoft.AlphaImageLoader(src='"+self.attr('src')+"', sizingMethod='scale')"};self.css(styles).attr('src',settings.shim)};if(settings.apply_positioning&&self.is('a, input')&&(self.css('position')===''||self.css('position')=='static')){self.css('position','relative')}})}})};