(function($)
{
	$(function() {

		// Fancybox modal window
		$('a[rel=modal], a.modal').fancybox({
			overlayOpacity: 0.8,
			overlayColor: '#000',
			hideOnContentClick: false
		});
	   
	   	// ---------------------------------------------------------
		// Name: Default Input Text
		// Description: Used for search boxes and other input boxes
		// 				with a default value that should vanish when
		//              a user clicks within the box
		// Useage:      Give any text input a class of 'default-input-text'
		// 		        and make sure it has an ID.
		// ---------------------------------------------------------
		
		// Used to store default text input valyes
		var default_input_terms = new Array();
		
		// hides default input text from a input box
		$('.default-input-text').focus(function() {
			
			// Store the default text if it hasnt already been stored
			if(typeof default_input_terms[this.id] == 'undefined') {
				default_input_terms[this.id] = $(this).val();
			}
			
			// If the current value is the default value, hide it
			if($(this).val() == default_input_terms[this.id]) {
				$(this).val('').removeClass('default-input-text').addClass('non-default-input-text');
			}
			
			// when the event is blured, put the default message back if they havent written anything
			$(this).blur( function () {
				default_term = default_input_terms[this.id];
				if($(this).val() == '') $(this).removeClass('non-default-input-text').addClass('default-input-text').val(default_term);
			} );

		});
		
	});
})(jQuery);

$(document).ready(function() {
     
	$(".seat").click(function(){
		var seatrow = $(this).attr('row'); 
		var seatnum = $(this).attr('seatnum');
		var obj = $(this);
		obj.attr('opt', 1);
		if(count_opt() > 8){
			$('#dialog_error_text').html("Sorry! <br>You cannot select more than 8 tickets per order.<br>Transaction limit $200");
			$("#popup_error").modal();
			obj.attr('opt', '');
			return;
		}
		obj.hide();
			if(obj.hasClass('green') | obj.hasClass('blue')){
				$.post("/booking/free_seat", { seatrow : $(this).attr('row'), seatnum: $(this).attr('seatnum')},
  				function(data){
    				if(data == 'freed'){
						obj.removeClass('green');
						obj.removeClass('blue');
						obj.attr('opt', '');
					} else if(data == 'taken'){
						obj.removeClass('green');
						changeClasses(obj, 'seat', 'seat_book');
						obj.unbind('click');
						$('#dialog_error_text').html("This seat is not available");
						$("#popup_error").modal();
	        			return false;
					}
  				});			
			
			} else {
				$.post("/booking/hold_seat", { seatrow : $(this).attr('row'), seatnum: $(this).attr('seatnum')},
  				function(data){
    				if(data == 'done'){
						obj.addClass('green');
					} else if(data == 'taken'){
						changeClasses(obj, 'seat', 'seat_book');
						obj.unbind('click');
						$('#dialog_error_text').html("This seat is not available");
						$("#popup_error").modal();
	        			return false;
					}
  				});
			}
		obj.delay(600).fadeIn(400);
   });
	
	$("#order_seats").click(function(){
		var seats = [];
		var seats_to_submit = [];
		var counter = 0;
		$(".seat").each(function(){
			if($(this).hasClass('green')){
				counter++;
				seats[counter] = "Row " + $(this).attr('row') + ' / Seat ' + $(this).attr('seatnum') + "\n";
				seats_to_submit.push('{"row":"' + $(this).attr('row') + '","seat":"' + $(this).attr('seatnum') + '"}');
	    }					 
		});
		if(counter == 0){
			$('#dialog_error_text').html("You did not select any seat");
			$("#popup_error").modal();
	        return false;
		}
		$('#dialog_text').html("You selected:<br>" + seats.join('<br>') + "<br><br><b>Proceed to checkout?</b><br><br>");
		$("#popup_confirm").modal({onShow: function (dialog) {

		$("#confirm_input", dialog.data).click(function () {
		  $.post('/booking/book',
				  JSON.stringify(seats_to_submit),
				  function(data) {
					  if(data == 'success'){
						  document.location.href = "https://kids-theatre.com/checkout";
					  } else if(data == 'session'){
						  $('#dialog_error_text').html("Your session expired!<br>You have to complete order within 20 min");
						  $("#popup_error").modal({onClose: function (){
								document.location.href = "/tickets";										 
						  }});
					  } else {
						  $('#dialog_error_text').html("Processing error occured!<br>Please try again later");
						  $("#popup_error").modal({onClose: function (){
								document.location.href = "/tickets";										 
						  }});
					  }         		
				  }
			  );
  
		  return false;
		});
	}});
		
    });
	
	$(".remove").click(function(){
		$.post("/booking/remove", { cart_id : $(this).attr('id'), seatrow : $(this).attr('row'), seatnum: $(this).attr('seat') },
  				function(data){
    				if(data == 'success'){
						document.location.href = "/checkout";
					} else if(data == 'failed'){
						$('#dialog_error_text').html("Failed to remover");
						$("#popup_error").modal();
						return false;
					}
  				});		
	});
	
	$('#performance').change(function(){
		$('#performance_form').submit();
	});
	
	$('.pay_button').click(function(){
		
		$('label').each(function(){
			$(this).text('');					 
		});
		var card_number = $('#CardNumber').val();
		var exp_month = $('#CardExpMonth').val();
		var exp_year = $('#CardExpYear').val();
		var name_on_card = $('#NameOnCard').val();
		var email = $('#Email').val();
		var phone_number = $('#PhoneNumber').val();
		var total = $('#SubTotal').val();
		
		var dataArray = new Array();
		var errMsg = new Array();
		
		dataArray['card_number'] = card_number;
		dataArray['exp_month'] = exp_month;
		dataArray['exp_year'] = exp_year;
		dataArray['name_on_card'] = name_on_card;
		dataArray['email'] = email;
		dataArray['phone_number'] = phone_number;
		dataArray['total'] = total;
		
		if(!validate(dataArray, errMsg)){
			for(i in errMsg){
				$('#error_' + i).text(errMsg[i]);
			}
			return false;	
		} 
		var tickets = $('#TicketData').val();
		
		var jqxhr = $.post('/booking/check_cart',
         		tickets,
				function(data) {
					if(data == 'banned'){
						$('#dialog_error_text').html("Your number of failed orders exceeded the allowed level.<br>Call for technical support at: 647-400-2248");
						$("#popup_error").modal({onClose: function (){
							document.location.href = "/tickets";										 
						}});
						return false;
					} else if(data == 'failed'){
						$('#dialog_error_text').html("Your session expired!<br>You have to complete order within 20 min");
						$("#popup_error").modal({onClose: function (){
							document.location.href = "/tickets";										 
						}});
						//return false;
					} else {
						submit_order();
						return false;
					}
         		}
       	)
		.success(function(data) { 
				if(data == 'success'){
					//submit_order();
					return false;
				} 
		})
    	.error(function() { return false; });
        return false;
	});
	
	$('#CardNumber').focus(function() {
		$('#error_card_number').html('');
	});
	$('#CardExpMonth').focus(function() {
		$('#error_expiry_date').html('');
	});
	$('#CardExpYear').focus(function() {
		$('#error_expiry_date').html('');
	});
	$('#NameOnCard').focus(function() {
		$('#error_name_on_card').html('');
	});
	$('#Email').focus(function() {
		$('#error_email').html('');
	});
	$('#PhoneNumber').focus(function() {
		$('#error_phone_number').html('');
	});

//$("#popup").modal();

	
 });
 
 function changeClasses(obj, old_class, new_class){
	 obj.removeClass(old_class).addClass(new_class);
 }
 
 function count_opt(){
	var counter = 0;
	$(".seat").each(function(){
		if($(this).attr('opt') == 1){
			counter++;
	    }					 
	});
	return counter;
 }
 
 function validate(dataArray, errMsg){
	var validated = true;
	for(i in dataArray){
	switch(i)
	{
		case 'card_number':
		if(!isValidCreditCard(dataArray['card_number'])){
  			validated = false;		
			errMsg['card_number'] = "Credit Card number is invalid";
		}
		break;
		case 'exp_month':
		case 'exp_year':
		if(dataArray['exp_month'] == '' || dataArray['exp_year'] == ''){
  			validated = false;		
			errMsg['expiry_date'] = "Expiry date is incorrect";
		}
		break;
		case 'name_on_card':
		if(dataArray['name_on_card'].length < 3){
  			validated = false;		
			errMsg['name_on_card'] = "Name should not be less than 3 characters";
		}
		break;
		case 'email':
		if(dataArray['email'] != '' && !validateEmail(dataArray['email'])){
  			validated = false;		
			errMsg['email'] = "E-mail is invalid";
		}
		break;
		case 'phone_number':
		if(dataArray['phone_number'] != '' && !validatePhoneNumber(dataArray['phone_number'])){
  			validated = false;		
			errMsg['phone_number'] = "Phone number is invalid";
		}
		break;
		case 'total':
		if(parseInt(dataArray['total']) > 200){
  			validated = false;		
			errMsg['total'] = "Sorry! Transaction is limited to $200";
		}
		break;
	}
	
	}
	return validated;
 }
 
 function isValidCreditCard(ccnum) {
      var valid = true;
      // Visa: length 16, prefix 4, dashes optional.
      var re = /^4\d{3}-?\d{4}-?\d{4}-?\d{4}$/;
	  if (!re.test(ccnum)) valid = false;
      // Mastercard: length 16, prefix 51-55, dashes optional.
      var re = /^5[1-5]\d{2}-?\d{4}-?\d{4}-?\d{4}$/;
	  valid = (valid || re.test(ccnum));
      
	  if(!valid) return false;
   		// Remove all dashes for the checksum checks to eliminate negative numbers
   		ccnum = ccnum.split("-").join("");
   		// Checksum ("Mod 10")
   		// Add even digits in even length strings or odd digits in odd length strings.
		var checksum = 0;
   		for (var i=(2-(ccnum.length % 2)); i<=ccnum.length; i+=2) {
      		checksum += parseInt(ccnum.charAt(i-1));
   		}
   		// Analyze odd digits in even length strings or even digits in odd length strings.
   		for (var i=(ccnum.length % 2) + 1; i<ccnum.length; i+=2) {
      		var digit = parseInt(ccnum.charAt(i-1)) * 2;
      		if (digit < 10) { 
				checksum += digit; 
			} else { 
				checksum += (digit-9); 
			}
   		}
   	if ((checksum % 10) == 0) 
	return true; 
	else return false;
}

function validateEmail(email) { 
    var re = /^\w+@[a-zA-Z_]+?\.[a-zA-Z]{2,3}$/;

    return re.test(email);
}

function validatePhoneNumber(number){
	var re = /^\D*1?(?:\D*\d\D*){10}$/;
	return re.test(number);
}

	function submit_order(){
		
		var name_on_card = $('#NameOnCard').val();
		var email = $('#Email').val();
		var phone_number = $('#PhoneNumber').val();
		var total = $('#SubTotal').val();
		var tickets = $('#TicketData').val();

		order_data = "total=" + total + "&tickets=" + tickets + "&name_on_card=" + name_on_card + "&email=" + email + "&phone_number=" + phone_number;
		$.post("/payment/order",
		order_data,
  		function(data){
    		if(data){
				$('#OrderID').val(data);
				$('#CustomerRefNo').val(data);
				//return false;
				$('#checkout_form').submit();
			}
  		});	
		return false;
	}
