
jQuery(document).ready(function($){
	var longman = {};

	//lib
	longman.lib = {};

	longman.lib.addCommas = function(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;
}

	longman.lib.post = function (path, params, method) {
		method = method || "post";
		var form = document.createElement("form");
		form.setAttribute("method", method);
		form.setAttribute("action", path);

		for(var key in params) {
			var hiddenField = document.createElement("input");
			hiddenField.setAttribute("type", "hidden");
			hiddenField.setAttribute("name", key);
			hiddenField.setAttribute("value", params[key]);
			form.appendChild(hiddenField);
		}

		document.body.appendChild(form);
		form.submit();
	};

	longman.url = {};
	longman.url.base = $("base").attr("href");

	longman.cart = {};
	longman.cart.url = longman.url.base + "index.php?route=checkout/cart";
	longman.product = [];

	var product = {};
	product.option = {};
	product.option.entry = {};

	product.option.entry.database = {};
	product.option.entry.event = {};

	product.option.entry = [];

	//product.option.entry.type_space = ["apparel_female_adult_normal","apparel_female_adult_plus","apparel_female_child_normal","apparel_female_junior_normal"];

	function gather_data_from_html(){
		longman.redirect = $("input[name='redirect']").val();
		product.product_id = $("input[name='product_id']").val();
		product.quantity = $("input[name='quantity']").val();
		var size = {};
		size.key = "size";
		size.value = $("#size_select option:selected").val();
		size.option = sizechart.custom;
		product.option.entry.push(size);
		var color = {};
		color.key = "color";
		color.value = $('#referto_mirror').is(":checked");
		color.option = $('#colorchart .gridselected').data('f');
		product.option.entry.push(color);
	};

	$('#add_to_cart').click(function(){
		if ($("#size_select option").length > 2 &&  $("#size_select option:selected").val() == -1){
			alert("Please select the size!");
			return false;
		}
		gather_data_from_html();
		product.action = 'add_to_cart';
		longman.product.push(product);
		var submit={};
		submit.longman = JSON.stringify(longman);
		longman.lib.post(longman.cart.url, submit, 'post');
		return true;
	});
	longman.currency = {};
	longman.currency.config = {};
	longman.currency.config.default_config = {};
	longman.currency.config.default_config.source = {currency_code:currency_code, floating_point: 2, positional_notation:10};
	longman.currency.config.default_config.standard = {currency_code:'USD', floating_point: 10, positional_notation:10};
	longman.currency.config.default_config.display = {floating_point: 2, positional_notation:10};
	if($.cookie("currency") == null){
		longman.currency.config.default_config.display.currency_code = currency_code;
		$.cookie("currency", currency_code, { expires: 30, path: '/' });
	}
	else{
		longman.currency.config.default_config.display.currency_code = $.cookie("currency");
	}
	longman.currency.setting = {};
	longman.currency.setting.exchange_rate = currency_exchange_rate;
	longman.currency.setting.currency_symbol_prefix = {USD:'$', EUR:'€', GBP:'£'};
	longman.currency.setting.currency_symbol_surfix = {USD:'', EUR:'', GBP:''};
	longman.currency.event = {};
	longman.currency.event.onPageLoad = function(){
		$('.original_price,.special_price').each(function(i,j){
			if($(this).data('longman_currency_value'))return;
			var raw_value = $.trim($(j).html()).replace(/^[^\w]+|[^\w]+$/g,"").replace(/,/g,"");
			var value = raw_value / longman.currency.setting.exchange_rate[longman.currency.config.default_config.source.currency_code];
			$(this).data('longman_currency_value', value);
		});
		longman.currency.event.onCurrencyChange();
	};

	longman.currency.event.onCurrencyChange = function(){
		//window.location.hash = longman.currency.config.default_config.display.currency_code;
		$.cookie("currency", longman.currency.config.default_config.display.currency_code, { expires: 30, path: '/' });
		$('.currency_selector').val(longman.currency.config.default_config.display.currency_code);
		var display_code = longman.currency.config.default_config.display.currency_code;
		$('.original_price,.special_price').each(function(i,j){
			var value = $(this).data('longman_currency_value');
			var display_value = value * longman.currency.setting.exchange_rate[display_code];
			display_value = display_value.toFixed(longman.currency.config.default_config.display.floating_point)
			display_value = longman.lib.addCommas(display_value);
			var display = longman.currency.setting.currency_symbol_prefix[display_code] + display_value + longman.currency.setting.currency_symbol_surfix[display_code];
			$(this).html(display);
		});
	};

	$('.currency_selector').change(function(e){
		longman.currency.config.default_config.display.currency_code = $(this).val();
		longman.currency.event.onPageLoad();
		longman.currency.event.onCurrencyChange();
	});

	longman.currency.event.onPageLoad();

	longman.session = {};

	longman.checkout = {};

	//shipping address
	longman.checkout.reloadShippingAddress = function(){
		$.ajax({
			type: "GET",
			url: longman.url.base +  'index.php?route=checkout/address/shipping&ajax=1',
			contentType: 'application/json',
			dataType: 'json',
			async: false,
			complete: function(callback){
				callback = JSON.parse(callback.responseText);
				longman.checkout.onShippingAddressesOptionValuesChange(callback);
			}
		});
	}

	longman.checkout.onShippingAddressesOptionValuesChange = function(obj){
		longman.session = obj.session;
		longman.checkout.address = obj.address;
		$('.shipping_addresses').html('');
		$.each(longman.checkout.address.addresses,function(i,j){
			var checked_html = '';
			if(j.address_id == longman.session.shipping_address_id){checked_html = 'checked="checked"';}else{return;}
			var format =  '<p>' + j.address_info.firstname + ' ' + j.address_info.lastname + '</p><p>' + j.address_info.address_1 + '</p><p>' + j.address_info.address_2 + '</p><p>' + j.address_info.city + ', ' + j.address_info.zone + ', ' + j.address_info.postcode + '</p><p>' + j.address_info.country + '</p>';
			$('.shipping_addresses').append('<tr>\
				<td><label for="shipping_address_id['+j.address_id+']"><input id="shipping_address_id['+j.address_id+']" type="radio" name="shipping_address_id" value="'+j.address_id+'" class="hide" '+checked_html+' /> </label></td>\
				<td><label for="shipping_address_id['+j.address_id+']">'+format+'</label></td>\
			</tr>');
		});

		$('input[name=shipping_address_id]').change(function(){
			var address_id = $(this).val();
			$.ajax({
				type: "POST",
				url: longman.url.base +  'index.php?route=checkout/address/shipping&ajax=1',
				data: {"address_id":address_id},
				//contentType: 'application/json',
				//dataType: 'json',
				async: false,
				complete: function(callback){
					callback = JSON.parse(callback.responseText);
					longman.checkout.onShippingAddressesOptionValuesChange(callback);
					longman.checkout.onShippingMethodsOptionValuesChange(callback);
					//checkout.reloadShippingMethods();
				}
			});
		});
	}

	$('.shipping_address_create').click(function(e){
		if($('.shipping_address_create_form_submit').is(":visible")){
			$('.address_create_form').hide();
		}else{
			$('.address_create_form').appendTo($('.shipping_address_create_form_container'));
			$.each(longman.checkout.address.addresses,function(i,j){
				var checked_html = '';
				if(j.address_id == longman.session.shipping_address_id){checked_html = 'checked="checked"';}else{return;}
				$('input[name=firstname]').val(j.address_info.firstname);
				$('input[name=lastname]').val(j.address_info.lastname);
				$('input[name=company]').val(j.address_info.company);
				$('input[name=address_1]').val(j.address_info.address_1);
				$('input[name=address_2]').val(j.address_info.address_2);
				$('input[name=city]').val(j.address_info.city);
				$('input[name=postcode]').val(j.address_info.postcode);
				$('select[name=country_id]').val(j.address_info.country_id);
				$('select[name=zone_id]').load('index.php?route=account/address/zone&country_id='+j.address_info.country_id+'&zone_id='+j.address_info.zone_id);
			});
			$('.payment_address_create_form_submit').hide();
			$('.shipping_address_create_form_submit').show();
			$('.address_create_form').show();
		}
	});

	$('.payment_address_create').click(function(e){
		if($('.payment_address_create_form_submit').is(":visible")){
			$('.address_create_form').hide();
		}else{
			longman.checkout.link = false;
			$('.address_create_form').appendTo($('.payment_address_create_form_container'));
			$.each(longman.checkout.address.addresses,function(i,j){
				var checked_html = '';
				if(j.address_id == longman.session.payment_address_id){checked_html = 'checked="checked"';}else{return;}
				$('input[name=firstname]').val(j.address_info.firstname);
				$('input[name=lastname]').val(j.address_info.lastname);
				$('input[name=company]').val(j.address_info.company);
				$('input[name=address_1]').val(j.address_info.address_1);
				$('input[name=address_2]').val(j.address_info.address_2);
				$('input[name=city]').val(j.address_info.city);
				$('input[name=postcode]').val(j.address_info.postcode);
				$('select[name=country_id]').val(j.address_info.country_id);
				$('select[name=zone_id]').load('index.php?route=account/address/zone&country_id='+j.address_info.country_id+'&zone_id='+j.address_info.zone_id);
			});
			$('.shipping_address_create_form_submit').hide();
			$('.payment_address_create_form_submit').show();
			$('.address_create_form').show();
		}
	});

	$('.shipping_address_create_form_submit').click(function(e){
		var error = longman.checkout.address_validate();
		if(error.length == 0){
			var firstname = $('input[name=firstname]').val();
			var lastname = $('input[name=lastname]').val();
			var company = $('input[name=company]').val();
			var address_1 = $('input[name=address_1]').val();
			var address_2 = $('input[name=address_2]').val();
			var city = $('input[name=city]').val();
			var postcode = $('input[name=postcode]').val();
			var country_id = $('select[name=country_id]').val();
			var zone_id = $('select[name=zone_id]').val();
			$.ajax({
				type: "POST",
				url: longman.url.base +  'index.php?route=checkout/address/shipping&ajax=1',
				data: {"firstname":firstname,"lastname":lastname,"company":company,"address_1":address_1,"address_2":address_2,"city":city,"postcode":postcode,"country_id":country_id,"zone_id":zone_id},
				//contentType: 'application/json',
				//dataType: 'json',
				async: false,
				complete: function(callback){
					callback = JSON.parse(callback.responseText);
					longman.checkout.onShippingAddressesOptionValuesChange(callback);
					longman.checkout.onShippingMethodsOptionValuesChange(callback);
					if(longman.checkout.link){
						callback.session.payment_address_id = callback.session.shipping_address_id;
						longman.checkout.onPaymentAddressesOptionValuesChange(callback);
						$('input[name=payment_address_id]').change();
					}
					$('.address_create_form').hide();
				}
			});
		}else{
			$('.address_validate_error').html('');
			$.each(error,function(i,j){
				$('.address_validate_error').append('<p class="warning">'+j+'</p>');
			});
			return false;
		}
	});

	$('.payment_address_create_form_submit').click(function(e){
		var error = longman.checkout.address_validate();
		if(error.length == 0){
			var firstname = $('input[name=firstname]').val();
			var lastname = $('input[name=lastname]').val();
			var company = $('input[name=company]').val();
			var address_1 = $('input[name=address_1]').val();
			var address_2 = $('input[name=address_2]').val();
			var city = $('input[name=city]').val();
			var postcode = $('input[name=postcode]').val();
			var country_id = $('select[name=country_id]').val();
			var zone_id = $('select[name=zone_id]').val();
			$.ajax({
				type: "POST",
				url: longman.url.base +  'index.php?route=checkout/address/payment&ajax=1',
				data: {"firstname":firstname,"lastname":lastname,"company":company,"address_1":address_1,"address_2":address_2,"city":city,"postcode":postcode,"country_id":country_id,"zone_id":zone_id},
				//contentType: 'application/json',
				//dataType: 'json',
				async: false,
				complete: function(callback){
					callback = JSON.parse(callback.responseText);
					longman.checkout.onPaymentAddressesOptionValuesChange(callback);
					//longman.checkout.onPaymentMethodsOptionValuesChange(callback);
					$('.address_create_form').hide();
				}
			});
		}else{
			$('.address_validate_error').html('');
			$.each(error,function(i,j){
				$('.address_validate_error').append('<p class="warning">'+j+'</p>');
			});
			return false;
		}
	});
	$('.address_create_form_cancel').click(function(e){
		$('.address_create_form').hide();
	});

	//payment address
	longman.checkout.reloadPaymentAddress = function(){
		$.ajax({
			type: "GET",
			url: longman.url.base +  'index.php?route=checkout/address/payment&ajax=1',
			contentType: 'application/json',
			dataType: 'json',
			async: false,
			complete: function(callback){
				callback = JSON.parse(callback.responseText);
				longman.checkout.onPaymentAddressesOptionValuesChange(callback);
				if($('input[name=payment_address_id]').val() != $('input[name=shipping_address_id]').val()){
					longman.checkout.link = false;
				}
			}
		});
	}

	longman.checkout.onPaymentAddressesOptionValuesChange = function(obj){
		longman.session = obj.session;
		$('.payment_addresses').html('');
		$.each(obj.address.addresses,function(i,j){
		var checked_html = '';

		if(j.address_id == longman.session.payment_address_id){checked_html = 'checked="checked"';}else{return;}
			var format =  '<p>' + j.address_info.firstname + ' ' + j.address_info.lastname + '</p><p>' + j.address_info.address_1 + '</p><p>' + j.address_info.address_2 + '</p><p>' + j.address_info.city + ', ' + j.address_info.zone + ', ' + j.address_info.postcode + '</p><p>' + j.address_info.country + '</p>';
		$('.payment_addresses').append('<tr>\
			<td><label for="payment_address_id['+j.address_id+']"><input id="payment_address_id['+j.address_id+']" type="radio" name="payment_address_id" value="'+j.address_id+'" class="hide" '+checked_html+' /></label></td>\
			<td><label for="payment_address_id['+j.address_id+']">'+format+'</label></td>\
		</tr>');
		});

		$('input[name=payment_address_id]').change(function(){
			var payment_address_id = $('input[name=payment_address_id]:checked').val();
			$.ajax({
				type: "POST",
				url: longman.url.base +  'index.php?route=checkout/address/payment&ajax=1',
				data: {"address_id":payment_address_id},
				//contentType: 'application/json',
				//dataType: 'json',
				async: false,
				complete: function(callback){
					callback = JSON.parse(callback.responseText);
					longman.checkout.onPaymentAddressesOptionValuesChange(callback);
					longman.checkout.onPaymentMethodsOptionValuesChange(callback);
				}
			});
		});
	}

	//shipping methods
	longman.checkout.reloadShippingMethods = function(){
		$.ajax({
			type: "GET",
			url: longman.url.base +  'index.php?route=checkout/shipping&ajax=1',
			contentType: 'application/json',
			dataType: 'json',
			async: false,
			complete: function(callback){
				callback = JSON.parse(callback.responseText);
				longman.checkout.onShippingMethodsOptionValuesChange(callback);
			}
		});
	}

	longman.checkout.onShippingMethodsOptionValuesChange = function(obj){
		longman.session = obj.session;
		$('.shipping_methods').html('');
		$.each(longman.session.shipping_methods,function(i,j){
			$('.shipping_methods').append('<tr><td colspan="3" style="padding-bottom: 6px;">'+j.title+'</td></tr>');
			if(j.error){
				$('.shipping_methods').append('<td colspan="3"><div class="error">'+j.error+'</div></td>');
			}
			$.each(j.quote,function(m,quote){
				var checked_html = '';
				if(longman.session.shipping_method && quote.id == longman.session.shipping_method.id){checked_html = 'checked="checked"';}
				$('.shipping_methods').append('<tr>\
					<td><label for="'+quote.id+'">\
							<input type="radio" name="shipping_method" value="'+quote.id+'" id="'+quote.id+'" '+checked_html+' />\
						</label></td>\
					<td><label for="'+quote.id+'">'+quote.title+' <span style="color:grey">( '+quote.description+' )</span>'+'</label></td>\
					<td><label for="'+quote.id+'"><span class="special_price">'+quote.text+'</span></label></td>\
				</tr>');
			});
		});

		$('input[name=shipping_method]').change(function(){
			var shipping_method = $(this).val();
			$.ajax({
				type: "POST",
				url: longman.url.base +  'index.php?route=checkout/shipping&ajax=1',
				data: {"shipping_method":shipping_method},
				//contentType: 'application/json',
				//dataType: 'json',
				async: false,
				complete: function(callback){
					callback = JSON.parse(callback.responseText);
					longman.checkout.onShippingMethodsOptionValuesChange(callback);
					longman.checkout.onTotalsValuesChange(callback);
				}
			});
			//$('.shipping_method_tip').hide();
			//$('.' + $('input[name=shipping_method]:checked').attr("id").replace(/^matrix\./,"") + '_tip').show();
		});

		if(!$('input[name=shipping_method]:checked').val()){
			$('input[name=shipping_method]:eq(0)').attr("checked","checked");
			$('input[name=shipping_method]').change();
		}
	}

	//totals
	longman.checkout.onTotalsValuesChange = function(obj){
		$('.totals').html('');
		$.each(obj.totals,function(i,j){
			$('.totals').append('<tr>\
			<th>'+j.title+'</th>\
			<td><span class="special_price">'+j.text+'</span></td>\
			</tr>');
		});
		$('#session_container .total, .account_account_page .total').html('Total: <span class="special_price">' + obj.totals[obj.totals.length-1].text + '</span>');
	}

	//payment methods
	longman.checkout.reloadPaymentMethods = function(){
		$.ajax({
			type: "GET",
			url: longman.url.base +  'index.php?route=checkout/payment&ajax=1',
			contentType: 'application/json',
			dataType: 'json',
			async: false,
			complete: function(callback){
				callback = JSON.parse(callback.responseText);
				longman.checkout.onPaymentMethodsOptionValuesChange(callback);
			}
		});
	}

	longman.checkout.onPaymentMethodsOptionValuesChange = function(obj){
		longman.session = obj.session;
		$('.payment_methods').html('');
		$.each(longman.session.payment_methods,function(i,payment_method){
			var checked_html = '';
			if(longman.session.payment_method && payment_method.id == longman.session.payment_method.id){checked_html = 'checked="checked"';}
			if(payment_method.description){
				var description_html = ' <span style="color:grey">( '+payment_method.description+' )</span>';
			}else{
				var description_html = '';
			}

			$('.payment_methods').append('<tr>\
				<td style="width:20px;">\
					<input type="radio" name="payment_method" value="'+payment_method.id+'" id="'+payment_method.id+'" '+checked_html+' />\
				</td>\
				<td><label for="'+payment_method.id+'">'+payment_method.title+description_html+'</label></td>\
			</tr>\
			<tr>\
				<td colspan="2">\
					<div class="success payment_method_tip '+payment_method.id+'_tip">'+payment_method.details+'</div>\
				</td>\
			</tr>');
		});
		$('.payment_method_tip').hide();
		$('.' + $('input[name=payment_method]:checked').attr("id") + '_tip').show();

		if(!$('input[name=payment_method]:checked').val()){
			$('input[name=payment_method]:eq(0)').attr("checked","checked");
		}
	}

	longman.checkout.link = true;

	//validate
	longman.checkout.initValidate = function(){
		longman.checkout.address_validate = function(){
			var error = [];
			var fields = {
			'input[name=firstname]':{'error_text':'The First name is required.','regexp':'.{1,32}'},
			'input[name=lastname]':{'error_text':'The Last name is required.','regexp':'.{1,32}'},
			'input[name=address_1]':{'error_text':'The Address is required.','regexp':'.{3,64}'},
			'input[name=city]':{'error_text':'The City is required.','regexp':'.{3,32}'},
			'select[name=country_id]':{'error_text':'The Country is required.','regexp':'\\d+'},
			'select[name=zone_id]':{'error_text':'The Region / State is required.','regexp':'\\d+'}
			};
			
			$.each(fields,function(i,j){
				if(!$(i).val() || ! RegExp(j.regexp).exec($(i).val())){
					error.push(j.error_text);
				}
			});
			return error;
		}

		longman.checkout.validate = function(){
			var error = [];
			var fields = {
			'input[name=shipping_address_id]:checked':{'error_text':'Shipping Address is required.','regexp':'\\d+'},
			'input[name=payment_address_id]:checked':{'error_text':'Payment Address is required.','regexp':'\\d+'},
			'input[name=shipping_method]:checked':{'error_text':'Shipping Method is required.','regexp':'.+'},
			'input[name=payment_method]:checked':{'error_text':'Payment Method is required.','regexp':'.+'}
			};
 			$.each(fields,function(i,j){
				if(!$(i).val() || ! RegExp(j.regexp).exec($(i).val())){
					error.push(j.error_text);
				}
			});
			return error;
		}

		$('.page_submit').click(function(e){
			var error = longman.checkout.validate();
			if(error.length == 0){
				//$(this).css('opacity','.3');
				longman.checkout.submit.queue();
			}else{
				$('.validate_error').html('');
				$.each(error,function(i,j){
					$('.validate_error').append('<p class="warning">'+j+'</p>');
				});
				return false;
			}
		});
	}

	//submit
	longman.checkout.submit = {};
	longman.checkout.submit.queue = function(){
		longman.checkout.submit.payment();
		longman.checkout.submit.complete();
	}

	longman.checkout.submit.payment = function(){
		var comment = $('textarea[name=comment]').val();
		var payment_method = $('input[name=payment_method]:checked').val();
		$.ajax({
			type: "POST",
			url: longman.url.base +  'index.php?route=checkout/payment&ajax=1',
			data: {"comment":comment,"payment_method":payment_method,'agree':1},
			//contentType: 'application/json',
			//dataType: 'json',
			async: false,
			complete: function(callback){
				//callback = JSON.parse(callback.responseText);
			}
		});
	}

	longman.checkout.submit.complete = function(){
		location.href = longman.url.base +  'index.php?route=checkout/confirm';
	}

	if($(".chcekout_information_page").length > 0){
		longman.checkout.initValidate();
		longman.checkout.reloadShippingAddress();
		longman.checkout.reloadPaymentAddress();
		longman.checkout.reloadShippingMethods();
		longman.checkout.reloadPaymentMethods();
	}
});

