var priceCache = {};

$(document).ready(function() {
	$('.tabContainer .tabList:not(.inactiveTabList) div').click(function() {
		var page = $(this).attr('id').replace('Tab', '');
		$('#clientFrmLogin').attr('action', '/' + page + '.php');
		$('#partnerFrmLogin').attr('action', '/' + page + '.php');
	});

	$('a.clientAreaLogin').bind('click', function() {
		$.iModal({
			data: $('#clientAreaLoginPopup').html() ,
			width: 350,
			title: 'Login to the Client Area'
		});
		$('#ModalContainer #clientLoginEmail').focus();
		return false;
	});

	$('a.partnerAreaLogin').bind('click', function() {
		$.iModal({
			data: $('#partnerAreaLoginPopup').html() ,
			width: 370,
			title: 'Interspire Partner Login'
		});
		$('#ModalContainer #partnerLoginEmail').focus();
		return false;
	});

	$('#AjaxLoading').ajaxStart(function() {
		var windowWidth = $(window).width();
		var scrollTop;
		if(self.pageYOffset) {
			scrollTop = self.pageYOffset;
		}
		else if(document.documentElemet && document.documentElement.scrollTop) {
			scrollTop = document.documentElement.scrolTop;
		}
		else if(document.body) {
			scrollTop = document.body.scrollTop;
		}
		$(this).css('position', 'absolute');
		$(this).css('top', scrollTop+'px');
		$(this).css('left', parseInt((windowWidth-600)/2)+'px');
		$(this).show();
		return false;
	});

	$('#AjaxLoading').ajaxStop(function() {
		$(this).hide();
	});

	$('#frmCheckout').submit(function() {
		var requiredFields = {
			'#orderFirstName': {
				message: 'Please enter your first name.'
			},
			'#orderLastName': {
				message: 'Please enter your last name.'
			},
			'#orderPhone': {
				message: 'Please enter your phone number, including country and area codes.'
			},
			'#orderEmail': {
				message: 'Please enter a valid email address.',
				validateAs: 'email'
			},
			'#orderBillingAddress' : {
				message : 'Please enter your billing address.'
			},
			'#orderBillingCity' : {
				message: 'Please enter the city/suburb your billing address is in.'
			},
			'#orderBillingPostcode' : {
				message: 'Please enter the Postcode or Zip Code of your billing address.'
			},
			'#orderCustomerCountry' : {
				message: 'Please choose your billing country.'
			},
			'select#orderCustomerCountry_state': {
				message: 'Please select your billing state.'
			},
			'#orderPaymentType': {
				message: 'Please choose how to pay for your order.'
			}
		}

		for(field in requiredFields) {
			options = requiredFields[field];

			if(options.validateAs == undefined) {
				options.validateAs = 'string';
			}

			var valid = true;

			if($(field).length == 0) {
				return true;
			}
			switch(options.validateAs) {
				case 'email':
					if($(field).val().indexOf('@') == -1 || $(field).val().indexOf('.') == -1) {
						valid = false;
					}
					break;
				default:
					if($.trim($(field).val()) == '' || $(field).val() == null) {
						valid = false;
					}
			}

			if(valid == false) {
				alert(options.message);
				$(field).focus().select();
				return false;
			}
		}

		return true;
	});

	$('#product').change(function() {
		if ($('#product').val() == '') {
			$('.editionRow').hide();
			$('.usersRow').hide();
			$('.supportRow').hide();
			$('.designRow').hide();
		} else {
			setProductEditions($('#product').val());
			$('.supportRow').hide();
			$('.designRow').hide();

			var prodDir = '';
			var showCompare = true;

			if ($('#product').val() == 'iem') {
				prodDir = '/emailmarketer';
				showCompare = false
			} else if ($('#product').val() == 'isc') {
				prodDir = '/shoppingcart';
			} else if ($('#product').val() == 'ikm') {
				prodDir = '/knowledgemanager';
			} else if ($('#product').val() == 'iwp') {
				prodDir = '/websitepublisher';
			} else if ($('#product').val() == 'isc_vendor') {
				prodDir = '/virtual-shopping-mall';
				showCompare = false;
			}

			$('#requirementsLink').attr('href', prodDir + '/requirements.php');
			$('#compareEditionsLink').attr('href', prodDir + '/compare.php');
			if (showCompare) {
				$('#compareEditionsLink').show();
			} else {
				$('#compareEditionsLink').hide();
			}
		}
	})

	$('#edition').change(function() {
		showProductSupport();
		showDesignServices();
	});

	$('#users').change(function() {
		showProductSupport();
		showDesignServices();
	});

	$('#addToCart').click(function() {
		if ($('#product').val() == '') {
			alert("Please choose an option from the product dropdown first.");
			$('#product').focus();
			return false;
		}

		if ($("#edition:visible").val() == '') {
			alert('Please choose an option from the pricing dropdown first.');
			$('#edition').focus();
			return false;
		}

		if ($("#users:visible").val() == '') {
			alert('Please choose an option from the pricing dropdown first.');
			$('#users').focus();
			return false;
		}

	 	AddToCart()
		return false;
	});

	$('#addUpgradeToCart').click(function() {
		$('.upgrade').each(function() {
			var productId = $(this).val();
			if (productId != '') {
				var id = $(this).attr('id').replace(/^upgrade_/, '');
				return AjaxAddUpgradeToCart(id, productId);
			}
		});
		return false;
	});

	$('#addRenewalsToCart').click(function() {
		$('.renewal').each(function() {
			var renewalLength = $(this).val();
			if (renewalLength != '') {
				var id = $(this).attr('id').replace(/^renewal_/, '');
				AjaxAddRenewalToCart(id, renewalLength);
			}
		});
		return false;
	});

	$('.RemoveLink').live('click', function() {

		if (!confirm("Are you sure you want to remove this product from your cart? Click OK to confirm.")) {
			return false;
		}

		var cartId = $(this).attr('id').replace('Remove_', '');

		jQuery.ajax({
			url: '/cart.php',
			type: 'post',
			dataType: 'json',
			data: {
				method: 'ajax',
				a: 'remove',
				id: cartId,
				AuthenticityToken: $('#PricingAuthenticityToken').val()
			},
			success: function(result) {
				LoadCartContents(result);
			}
		});

		return false;
	});

	$('.DupeLink').live('click', function() {
		var cartId = $(this).attr('id').replace('Dupe_', '');

		jQuery.ajax({
			url: '/cart.php',
			type: 'post',
			dataType: 'json',
			data: {
				method: 'ajax',
				a: 'dupe',
				id: cartId,
				AuthenticityToken: $('#PricingAuthenticityToken').val()
			},
			success: function(result) {
				LoadCartContents(result);
			}
		});

		return false;
	});

	$('#couponLink').click(function() {
		GetCoupon();
		return false;
	})
});

function GetCoupon() {
	var coupon = prompt('Enter your coupon code:', '');

	if(coupon != '' && coupon != null) {
		$('#coupon').val(coupon);
		$('#couponForm').submit();
	}
}

function CheckForm(frm)
{
	if(frm.loginEmail.value.indexOf("@") == -1 || frm.loginEmail.value.indexOf(".") == -1)
	{
		alert("Please enter a valid email address.");
		frm.loginEmail.focus();
		frm.loginEmail.select();
		return false;
	}

	if(frm.loginPassword.value == "")
	{
		alert("Please enter your password.");
		frm.loginPassword.focus();
		return false;
	}

	return true;
}

function setProductEditions(product)
{
	GetProductPrice();
	if (product == 'iem' || product == '') {
		$('.editionRow').hide();
		$('.usersRow').show();
	} else {
		$('.editionRow').show();
		$('.usersRow').hide();
	}
}

function showProductSupport()
{
	$('.supportRow').show();

	var product = $('#product').val();
	var edition = null;
	var numUsers = null;
	if (product == 'iem') {
		edition = null;
		numUsers = $('#users').val();
		index = numUsers;
	} else {
		edition = $('#edition').val();
		numUsers = $('#users').val();
		index = edition;
	}
	$('#support').empty();
	$('#support').append('<option value="12">12 Months [Included]</option>');
	$('#support').append('<option value="24">24 Months [Add $'+ priceCache[product][index]['support']['24month']+']</option>');
	$('#support').append('<option value="36">36 Months [Add $'+ priceCache[product][index]['support']['36month']+']</option>');
}

function showDesignServices()
{
	var product = $('#product').val();
	var edition = null;
	var numUsers = null;
	if (product == 'iem') {
		edition = null;
		numUsers = $('#users').val();
		index = numUsers;
	} else {
		edition = $('#edition').val();
		numUsers = $('#users').val();
		index = edition;
	}

	$('#design').empty();
	$('#design').append('<option value="">(None)</option>');
	var showDesignRow = false;
	for (prodId in priceCache[product][index]['design']) {
		showDesignRow = true;
		$('#design').append('<option value="'+prodId+'">'+priceCache[product][index]['design'][prodId]+'</option>');
	}

	$('#design').val('');
	if (showDesignRow) {
		$('.designRow').show();
	} else {
		$('.designRow').hide();
	}
}

function GetProductPrice()
{
	var product = $('#product').val();
	var edition = $('#edition').val();
	var users = $('#users').val();

	jQuery.ajax({
		url: '/pricing.php',
		type: 'post',
		dataType: 'json',
		data: {
			method: 'ajax',
			a: 'getPrice',
			product: product,
			edition: edition,
			users: users,
			AuthenticityToken: $('#PricingAuthenticityToken').val()
		},
		success: function(result) {
			var product = $('#product').val();

			if (typeof(priceCache[product]) == 'undefined') {
				priceCache[product] = {};
			}

			if (product == 'iem') {
				$('#users').attr('length', 0);
				$('#users').append('<option value="">-- Please Choose an Option --</option>');


				for (numUsers in result) {
					$('#users').append('<option value="'+numUsers+'">' + numUsers + ' user(s) [$' + result[numUsers].pricing.actual + ']</option>');
					priceCache[product][numUsers] = result[numUsers];
				}

			} else {
				$('#edition').attr('length', 0);
				$('#edition').append('<option value="">-- Please Choose an Option --</option>');
				for (edition in result) {
					$('#edition').append('<option value="'+edition+'">' + edition + ' [$' + result[edition].pricing.actual + ']</option>');

					priceCache[product][edition] = result[edition];
				}
			}
		}
	});
}

function AddToCart()
{
	var product = $('#product').val();
	var edition = $('#edition').val();
	var users = $('#users').val();
	var support = $('#support').val();
	var install = $('#install:checked').val();
	var design = $('#design').val();
	if (typeof(install) == 'undefined') {
		install = 0;
	}

	if (product == 'ikm') {
		var matches = edition.match(/(\w+)\s+(\d+)\s+\w+/);
		if (matches != null) {
			edition = matches[1];
			users = matches[2];
		}
	}

	jQuery.ajax({
		url: '/cart.php',
		type: 'post',
		dataType: 'json',
		data: {
			method: 'ajax',
			a: 'add',
			product: product,
			edition: edition,
			users: users,
			support: support,
			install: install,
			design: design,
			AuthenticityToken: $('#PricingAuthenticityToken').val()
		},
		success: function(result) {
			LoadCartContents(result);
			$('#cartTab').click();
		}
	});
	return false;
}

function LoadCartContents(result)
{
	if (typeof(result.error) != 'undefined') {
		$('#CartErrors').text(result.error).parents('.ErrorMessage:first').show('slow');
		return;
	}

	$('#CartErrors').parents('.ErrorMessage:first').hide();

	$('.CartContents tbody').html('');
	var cartEmpty = true;
	for (var itemId in result.contents) {
		var item = result.contents[itemId];
		var cartHtml = '<tr class="Product"><td class="Quantity">1</td><td><div>' + item.prodName + ' ' + item.cartAdditionalText + '</div> <div> <a href="#" class="RemoveLink" id="Remove_' + itemId +'">Remove</a>'

		if (!item.prodName.match(/renewal/i) && !item.prodName.match(/upgrade/i)) {
			cartHtml = cartHtml + ' <a href="#" class="DupeLink" id="Dupe_' + itemId +'">Duplicate</a> ';
		}

		cartHtml = cartHtml + ' </div></td><td class="Price" align="left" style="white-space: nowrap">$' + item.cartPrice + ' ' + item.cartCurrency + '</td></tr> ';

		$('.CartContents tbody').append(cartHtml);
		cartEmpty = false;
	}

	$('#CartTotal').text('$' + result.total.toFixed(2) + ' ' + result.currency);

	if (cartEmpty) {
		$("#emptyCart").show();
		$('#fullCart').hide();
	} else {
		$("#emptyCart").hide();
		$('#fullCart').show();
	}

}

function AjaxAddRenewalToCart(licenseId, renewalLength)
{
	jQuery.ajax({
		url: '/cart.php',
		type: 'post',
		dataType: 'json',
		data: {
			method: 'ajax',
			a: 'addRenewal',
			licenseId: licenseId,
			support: renewalLength,
			AuthenticityToken: $('#PricingAuthenticityToken').val()
		},
		success: function(result) {
			if (result != '') {
				LoadCartContents(result);
				$('#cartTab').click();
			} else {
				alert("Sorry there was a problem adding your product to the cart. Please try again or contact us if the problem persists.");
			}
		}
	});
}

function AjaxAddUpgradeToCart(licenseId, productId)
{
	jQuery.ajax({
		url: '/cart.php',
		type: 'post',
		dataType: 'json',
		data: {
			method: 'ajax',
			a: 'addUpgrade',
			licenseId: licenseId,
			productId: productId,
			AuthenticityToken: $('#PricingAuthenticityToken').val()
		},
		success: function(result) {
			if (result != '') {
				LoadCartContents(result);
				$('#cartTab').click();
			} else {
				alert("Sorry there was a problem adding your product to the cart. Please try again or contact us if the problem persists.");
			}
		}
	});
}