function slideSwitch() {
    var $active = $('#slideshow-wrapper img.active');

    var $next =  $active.next().length ? $active.next()
        : $('#slideshow-wrapper img:first');

    $active.addClass('last-active');

    $next.css({opacity: 0.0})
        .addClass('active')
        .animate({opacity: 1.0}, 2500, function() {
            $active.removeClass('active last-active'); 
        });
}

function validateForm()
{
	var name = $("input#name");
	var email = $("input#email");
	var message = $("textarea#message");
	
	//validate Name
	if(name.val() == "")
	{
		name.addClass("error");
		name.focus();
		alert("Please enter your name");
		return false;
	}	
	
	//validate Email
	if(email.val() == "")
	{
		email.addClass("error");
		email.focus();
		alert("Please enter your email address");
		return false;
	}
	if(!validateEmail(email.val()))
	{
		email.addClass("error");
		email.focus();
		alert("Please enter a valid email address");
		return false;
	}
	
	//validate Message
	if(message.val() == "")
	{
		message.addClass("error");
		message.focus();
		alert("Please enter a message for us");
		return false;
	}
	
	return true;
}

function validateEmail(email){
   var filter = /^[a-zA-Z0-9]+[a-zA-Z0-9_.-]+[a-zA-Z0-9_-]+@[a-zA-Z0-9]+[a-zA-Z0-9.-]+[a-zA-Z0-9]+.[a-z]{2,4}$/;
    if(filter.test(email)){
        return true;
    }
    else{
        return false;
    }
}

function isNumber(n) {
  return !isNaN(parseFloat(n)) && isFinite(n);
}

function formatDecimal(val, n) {
  n = n || 2;
  var str = "" + Math.round ( parseFloat(val) * Math.pow(10, n) );
  while (str.length <= n) str = "0" + str;
  var pt = str.length - n;
  return str.slice(0,pt) + "." + str.slice(pt);
}

function updateTotals()
{
	var subTotal = 0;
	$("input.productTotal").each(function(){
		subTotal += parseFloat($(this).val())
	});

	$("input.subTotal").val(formatDecimal(subTotal,2));
	
	var total = subTotal + parseFloat($("#shippingCost").val());

	$("input.grandTotal").val(formatDecimal(total,2));
}

function validateDetails()
{
	var name = $("input#name");
	var email = $("input#email");
	var address = $("input#address");
	var city = $("input#city");
	var state = $("#state");
	var postcode = $("input#postcode");	
	
	if(name.val() == "")
	{
		name.addClass("error");
		alert("Please enter your name");
		name.focus();
		return false;
	}
	
	if(email.val() == "")
	{
		email.addClass("error");
		alert("Please enter your email address");
		email.focus();
		return false;
	}
	else if(!validateEmail(email.val()))
	{
		email.addClass("error");
		alert("Please enter a valid email address");
		email.focus();
		return false;	
	}
	
	if(address.val() == "")
	{
		address.addClass("error");
		alert("Please enter your address");
		address.focus()
		return false;
	}
	
	if(city.val() == "")
	{
		city.addClass("error");
		alert("Please enter your City");
		city.focus();
		return false;
	}
	
	if(state.val() == "" || state.val() == "State")
	{
		state.addClass("error");
		alert("Please enter your State");
		state.focus();
		return false;
	}
	
	if(postcode.val() == "")
	{
		postcode.addClass("error");
		alert("Please enter your postcode");
		postcode.focus();
		return false;
	}
	
	return true;
}

function validatePayment()
{
	var cc = $("select#creditcard");
	var ccNumber = $("input#cardNumber");
	var expiryMonth = $("select#expiryMonth");
	var expiryYear = $("select#expiryYear");
	
	if(cc.val() == "Please select..." || cc.val() == "Credit Card Type")
	{
		cc.addClass("error");
		alert("Please select your Credit Card");
		cc.focus();
		return false;
	}
	
	if(!validateCreditCardNumber(cc.val(),ccNumber.val()))
	{
		ccNumber.addClass("error");
		alert("Invalid Credit Card number entered");
		ccNumber.focus();
		return false;
	}
	
	if(expiryMonth.val() == "" )
	{
		expiryMonth.addClass("error");
		alert("Please enter your Credit Card's expiry Month");
		expiryMonth.focus();
		return false;
	}
	else if(expiryMonth.val() < 1 || expiryMonth.val() > 12)
	{
		expiryMonth.addClass("error");
		alert("Invalid Expiry Month entered");
		return false;
	}
	
	var currentYear = new Date().getFullYear();//.toString().substring(2,4);
	
	if(expiryYear.val() < currentYear)
	{
		expiryYear.addClass("error");
		alert("Invalid Expiry Year entered");
		return false;
	}
	
	return true;
}

function validateCreditCardNumber(cardType,cardNumber)
{
  var isValid = false;
  var ccCheckRegExp = /[^\d ]/;
  isValid = !ccCheckRegExp.test(cardNumber);

  if (isValid)
  {
    var cardNumbersOnly = cardNumber.replace(/ /g,"");
    var cardNumberLength = cardNumbersOnly.length;
    var lengthIsValid = false;
    var prefixIsValid = false;
    var prefixRegExp;

    switch(cardType)
    {
      case "MasterCard":
        lengthIsValid = (cardNumberLength == 16);
        prefixRegExp = /^5[1-5]/;
        break;

      case "VISA":
        lengthIsValid = (cardNumberLength == 16 || cardNumberLength == 13);
        prefixRegExp = /^4/;
        break;

      case "amex":
        lengthIsValid = (cardNumberLength == 15);
        prefixRegExp = /^3(4|7)/;
        break;

      default:
        prefixRegExp = /^$/;
        alert("Card type not found");
    }

	
    prefixIsValid = prefixRegExp.test(cardNumbersOnly);
    isValid = prefixIsValid && lengthIsValid;
  }
  return isValid;
}

function calculateShipping()
{
	var isValid = false;
	var countryCode = $("select#country").val();
	
	if(countryCode=="AU")
	{
		$("input.shippingCost").val("10.00");
		updateTotals();
		isValid = true;
	}
	else
	{
		if($("input#postcode").val() != "")
		{
			var shippingCost = 0;
			var numProducts = 0;
			var eta = 0;
			
			//show user we are calculating shipping
			$(".shippingCellContent").hide();
			$(".calculatingShipping").show();
			
			$('input.qty').each(function(i, e) {
			  if ($(e).val() > "0") numProducts++;
			});
			
			$.each($("input.qty"), function(index,value){
				var prod = $(this);
				if(prod.val() > 0)
				{
					$.get("getShippingCost.php",
						"w="+prod.attr("data-weight")+"&q="+prod.val()+"&d="+$("input#postcode").val()+"&c="+$("select#country").val(),
						function(data){
							if(data!=null)
							{
								if(data.result=="OK")
								{							
									shippingCost += parseFloat(data.charge);
									numProducts--;
									if(data.eta > eta)
									{
										eta = data.eta;
									}
									
									if(numProducts == 0)
									{
										$("input.shippingCost").val(formatDecimal(shippingCost));
										$(".shippingCellContent").show();
										$(".calculatingShipping").hide();
										if(eta < 2)
										{
											eta = 2;
										}
										$("input#eta").val(eta);
										updateTotals();
									}
								}
								else
								{
									$("input.shippingCost").val("10.00");
									console.log(data.result);
									$("tr#calculatePostageRow").slideUp(1000);
									$("span#nextBtn a").show();
									updateTotals();
								}
								
							}																	
						},
						"json"					
					);
				}
			});
			
		}
		else
		{
			alert("Please enter your postcode");
			$("input#postcode").addClass("error");	
		}
	}
	
	return isValid;
}

$(document).ready(function($) {
		setInterval( "slideSwitch()", 5500 );

       $('#accordion dd').hide();
       $('#accordion dt').click(function(){
			$(this).toggleClass("bold");
			$(this).next().slideToggle(250);
       });
	   
	   $("input, textarea").keyup(function(event){ 
			$(this).removeClass("error"); 
		});
		$("select").change(function(event){ 
			$(this).removeClass("error"); 
		});
	   
	   /* Contact Form sending */
	   $("#contact-form input#submit").click(function(){
		if(validateForm())
		{
			$("div.form form").hide();
			$("div.form").append("<div id='loading'>Sending...</div>");
			$.post("sendform.php",
				$("div.form form").serialize(),
					function(data){
						if(data==1)
						{
							$("div#loading").replaceWith("<div class='success'>Thank you "+$("input#name").val()+" for contacting us.<br/>We will respond to your query as soon as possible</div>");
						}
						else
						{
							$("div#loading").replaceWith("<div class='fail'>There has been an error trying to send your message.<br/>If the problem persists please email us at <a href='mailto:info@shinbio.com.au'>info@shinbio.com.au</a></div>");
						}
					}
					);
		}
	   });
	   
	   /* Order page slider */
	   if($("#order_wrapper").length>0){
		$("#order_wrapper").easySlider();
	   }
		
		/* Update quantity */
		$("input.qty").keypress(function(evt){
			var charCode = (evt.which) ? evt.which : event.keyCode
			if (charCode > 31 && (charCode < 48 || charCode > 57))
				return false;

			return true;
		});
		
		$("input.qty").change(function(){
			var qtyBox =  $(this); 
			if(qtyBox.val()=="")
			{
				qtyBox.val("0");
			}
			var prodCode = qtyBox.attr("data-prodCode");
			var productPrice = parseFloat($("#"+prodCode+"_price").val());
			var productQty = parseFloat(qtyBox.val());
			$("#"+prodCode+"_itemTotal").val(formatDecimal(productPrice*productQty,2));
			updateTotals();
		});
		
		/* Calculate shipping on country and postcode change */
		$(".shipping").change(function(){
			
			if($("#country").val() == "AU")
			{
				$("#state").replaceWith('<select class="short" id="state" name="state"><option>State</option><option>ACT</option><option>NSW</option><option>NT</option><option>QLD</option><option>SA</option><option>TAS</option><option>VIC</option><option>WA</option></select>');
				$("td#warrantyNotice span").fadeOut();
			}
			else
			{
				$("#state").replaceWith('<input class="short" type="text" name="state" id="state" placeholder="State" />');
				$("td#warrantyNotice span").fadeIn();
			}
			calculateShipping();
		});
		
		/* Submit order */
		$("#nextBtn input#submit").live("click", function(){
			if(validatePayment())
			{
				$("body").append('<div id="opaque">&nbsp;</div><div id="sending">Sending Your Order...</div>');
				$.post("sendorder.php",
					$("#order_wrapper form").serialize(),
					function(data,textStatus,jqXHR){
						if(data.status == true)
						{
							$("div#sending").fadeOut();
							$("div#opaque").fadeOut();
							$("#main div.padding").html(data.orderHtml);
						}
						else
						{
							console.log(data.error);
							alert("There was a problem sending your order");
						}
					},
					"json"
					);
			}
		});
		
		/* Submit order - mobile */
		$("#sendMobileOrder").live("click",function(){
			if(validatePayment())
			{
				$("body").append('<div id="opaque">&nbsp;</div><div id="sending">Sending Your Order...</div>');
				$.post("sendorder.php",
					$("#order_wrapper form").serialize(),
					function(data,textStatus,jqXHR){
						if(data.status == true)
						{
							$("div#sending").fadeOut();
							$("div#opaque").fadeOut();
							$("#main div.padding").html(data.orderHtml);
						}
						else
						{
							console.log(data.error);
							alert("There was a problem sending your order");
						}
					},
					"json"
					);
			}
		});
		
		if (screen.width <= 699) {
		  setTimeout(function() {
			var bubble = new google.bookmarkbubble.Bubble();
			var parameter = 'bmb=1';
			bubble.hasHashParameter = function () {
				return localStorage["bmb"];
			};
			bubble.setHashParameter = function () {
				if (!this.hasHashParameter()) {
					localStorage["bmb"] = 1
				}
			};
			bubble.iconUrl_ = "img/homescreen_icon.png";
			bubble.showIfAllowed();
		  }, 1000);
		}	
	  
	  
});
