// JavaScript Document
$(document).ready(function(){
	var tick = ' <img src="images/tick.png" width="16" height="16" alt="Valid" /> ';
	var cross = ' <img src="images/cross.png" width="16" height="16" alt="Invalid" /> ';
	var check = ' <img src="images/ajax-loader.gif" width="16" height="16" alt="Checking validity" /> ';
	function isUnsignedInteger(s) {
	  return (s.toString().search(/^[0-9]+$/) == 0);
	}
	function clean_input(id, clear) {
		clear = clear || true;
		str = $.trim($(id).val());
		$(id).val(str);
		if (clear == true) $(id).next().filter('span').remove();
		return str;
	}
	function outputMsg(id, newDiv, result) {
		$(id).parent().removeClass('checking');
		$(id).after(newDiv);
		$(id).next().fadeIn("slow");
		if (result == false) {
			$(id).parent().removeClass('success');
			$(id).parent().addClass('error');
		} else {
			$(id).parent().removeClass('error');
			$(id).parent().addClass('success');
		}
	}
	function check_required(id) {
		str = clean_input(id);
		var result = true;
		var newDiv = $('<span></span>');
		if (str == '') {
			result = false;
			newDiv = $('<span>This is required.</span>');
		}
		outputMsg(id, newDiv, result);
		return result;
	}
	function check_min(id, minLength, required) {
		required = required || false;
		str = clean_input(id);
		var result = true;
		var newDiv = $('<span></span>');
		if (required==true || str.length > 0) {
			if (str.length < minLength || (str*1) < 1) {
				result = false;
				newDiv = $('<span>This field must be a minimum '+minLength+' characters.</span>');
			}
		}
		outputMsg(id, newDiv, result);
		return result;
	}
	function check_max(id, maxLength, required) {
		required = required || false;
		str = clean_input(id);
		var result = true;
		var newDiv = $('<span></span>');
		if (required==true || str.length > 0) {
			if  ( maxLength <= str.length) {
				result = false;
				newDiv = $('<span>This field must be a maximum '+maxLength+' characters.</span>');
			}
		}
		outputMsg(id, newDiv, result);
		return result;	
	}
	function isInt (i) {
		return (i % 1) == 0;
	}
	function check_phone(id, required) {
		required = required || false;
		var str = clean_input(id);
		var result = true;
		var newDiv = $('<span></span>');
		if (required==true || str.length > 0) {
			if  (str.length != 10 && isInt(str)) {
				result = false;
				newDiv = $('<span>This appears to be an in valid phone number.</span>');
			}
		}
		outputMsg(id, newDiv, result);
		return result;	
	}
	function fourdigits(number) {
		return (number < 1000) ? number + 1900 : number;
	}
	function displayDate(date_to_format) {
		var days = new Array('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday');
		var months = new Array('January','February','March','April','May','June','July','August','September','October','November','December');
		var date = ((date_to_format.getDate()<10) ? "0" : "")+ date_to_format.getDate();
		today =  days[date_to_format.getDay()] + ", " + date + " " + months[date_to_format.getMonth()] + " " + (fourdigits(date_to_format.getYear()));
		return today;
	}
	function check_date(id, dateLimit, required) {
		required = required || false;
		dateLimit = dateLimit || null;
		if (dateLimit == null) dateLimit = new Date();
		dateLimit.setDate(dateLimit.getDate()+7);
		dateLimit = new Date(dateLimit.getFullYear(),dateLimit.getMonth(),dateLimit.getDate());
		str = clean_input(id);
		var result = true;
		if (str == '') {
			source_date = new Date();
		} else {
			var date_array = str.split('/');
			var month = (date_array[1]*1) - 1;
			var day = date_array[0]*1;
			var year = date_array[2]*1;
			source_date = new Date(year,month,day);
			result = true;
		}
		if (year != source_date.getFullYear()) result = false;
		if (month != source_date.getMonth()) result = false;
		if (day != source_date.getDate()) result = false;
		if (source_date < dateLimit) {
			alert('Date needs to be 5 working days from today. Your date has been changed to reflect this.');
			source_date = new Date(dateLimit.getFullYear(),dateLimit.getMonth(),dateLimit.getDate());
			result = true;
		}
		tmp = source_date.getDate() + '/' + (source_date.getMonth()*1+1) + '/' + source_date.getFullYear();
		$(id).val(tmp);
		if (result == true) {
			newDiv = $('<span>The date selected is <em>'+displayDate(source_date)+'</em></span>');
		} else {
			newDiv = $('<span>Not a valid date - needs to be in the format dd/mm/yyyyy</span>');
			result = false;
		}
		outputMsg(id, newDiv, result);
		return result;
	}
	function validateEmail(email) {
	   var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	   if(reg.test(email) == false) {
		   return false;
	   } else {
		   return true;
	   }
	}
	function check_email(id, required, script, doesntExist) {
		required = required || true;
		script = script || null;
		doesntExist = doesntExist || false;
		var str = clean_input(id);
		var result = true;
		var newDiv = $('<span></span>');
		if (required==true || str != '') {
			if (validateEmail(str)==false) {
				var newDiv = $('<span>Invalid email address.</span>');
				result = false;
			} else if (script != '') {
				newDiv = $('<span>Checking validity.</span>');
				$(id).parent().addClass('checking');
				$(id).after(newDiv);
				$(id).next().fadeIn("slow");
				$.get(script, { check: "true", email: str }, function(data){
					if (data == 'false') {
						newDiv = $('<span>This appears to be an invalid email address.</span>');
						result = false;
					} else if (data == 'exists' && doesntExist==true) {
						newDiv = $('<span>This email exists. Choose another.</span>');
						result = false;
					} else {
						newDiv = $('<span></span>');
						result = true;
					}
				});
			}
		}
		$(id).next().filter('span').remove();
		outputMsg(id, newDiv, result);
		return result;
	}
	function check_confirm(id, string) {
		str = clean_input(id);
		var result = true;
		var newDiv = $('<span></span>');
		if (str != string) {
			result = false;
			newDiv = $('<span>Field not confirmed.</span>');
		}
		outputMsg(id, newDiv, result);
		return result;
	}
	function check_postcode(id, required, script) {
		required = required || false;
		script = script || null;
		str = clean_input(id);
		var result = true;
		var newDiv = $('<span></span>');
		if (required==true || str != '') {
			if (str.length != 4 || isUnsignedInteger(str)==false) {
				newDiv = $('<span>Not a valid post code. Must be 4 digits.</span>');
				result = false;
			} else if (script != '') {
				newDiv = $('<span>Checking validity.</span>');
				$(id).parent().addClass('checking');
				$(id).after(newDiv);
				$(id).next().fadeIn("slow");
				$.get(script, { check: "true", postCode: str }, function(data){
					if (data == 'false') {
						newDiv = $('<span>Not a valid Australian post code.</span>');
						result = false;
					} else {
						newDiv = $('<span>'+data+'</span>');
					}
				});
			}
		}
		$(id).next().filter('span').remove();
		outputMsg(id, newDiv, result);
		return result;
	}
	// =============================================================================================
	// =============================================================================================
	// =============================================================================================
	// AJAX
	$.ajaxSetup({global: false, async: false });
	// HEADINGS
	$("h2").each(function () { $(this).html( $(this).text().replace(/(^\w+)/,'<strong>$1</strong>') ); });
	$("h3").each(function () { $(this).html( $(this).text().replace(/(^\w+)/,'<strong>$1</strong>') ); });
	// NAVIGATION
	$('#navigation li')
		.removeClass('highlight')
		.find('a')
		.append('<span class="hover" />').each(function () {
			var $span = $('> span.hover', this).css('opacity', 0);
			$(this).hover(
					function () {$span.stop().fadeTo(500, 1);},
					function () {$span.stop().fadeTo(500, 0);}
			);
		}
	);
	// ACTIVATE PRETTY PHOTO
	$("a[rel^='prettyPhoto']").prettyPhoto();
	$('a img').each(function() {
		$(this).hover(
			function() {$(this).stop().animate({ opacity: 1.0 }, 500);},
			function() {$(this).stop().animate({ opacity: 0.5 }, 500);}
		);
	});
	// SEEK ATTENTION
	$('#announcement').seekAttention({ paddingTop: 10, paddingBottom: 10, paddingLeft: 10, paddingRight: 10 });
	// COMING EVENTS SCROLLER
	$('#widget').newsScroll({ speed: 2000, delay: 5000 });
	// TOGGLE FAQS
	$(".open_toggle").click( function() {
		if ($(".open_toggle").html() == 'Hide all answers') {
			$(".open_toggle").html('Reveal all answers');
			$(".toggle_container").slideUp("slow");
		} else {
			$(".open_toggle").html('Hide all answers');
			$(".toggle_container").slideDown("slow");
		}
	});
	$(".toggle_container").hide();
	$(".trigger").click(function(){
		$(this).next(".toggle_container").slideToggle("slow");
	});
	// SUBSCRIBER PANEL
	$("div.panel_button a").attr('href', '#'); // This removes link if javascript is available
	$("div.panel_button").click(function(){
		$("div#panel").animate({ height: "720px" }).animate({ height: "620px" }, "fast");
		$("div.panel_button").toggle();
		$("#content").fadeTo(0,0.2);	
	});
   $("div#hide_button").click(function(){
		$("div#panel").animate({ height: "0px" }, "fast");
		$("#content").fadeTo(0,1);
		$("#subscribe").clearForm();
		$("#title_ID").val('Mr');
		var $radios = $('input:radio[name=email_type]');
		if($radios.is(':checked') === false) $radios.filter('[value=1]').attr('checked', true);
		$("fieldset div").removeClass('error');
		$("fieldset div").removeClass('success');
		$("fieldset div span").remove();
   });
	// SUBSCRIBER FORM
   $("#subscribe").attr("autocomplete","off");
   $("span.success").remove();
   $("span.error").remove();
   $("span.check").remove();
   $("#email").alphanumeric({allow:"@.-"});
   $("#firstName").alpha({allow:",' "});
   $("#lastName").alpha({allow:",' "});
   $("#postCode").numeric();
   $("#email").blur(function() {
	   check_email(this, true, 'subscribe.php', true);
	   check_confirm($("#email_confirm"), $(this).val());
   });
   $("#email_confirm").blur(function() { check_confirm(this, $("#email").val()); });
   $("#firstName").blur(function() { check_required(this); });
   $("#lastName").blur(function() { check_required(this); });
   $("#postCode").blur(function() { check_postcode(this, true, 'subscribe.php'); });
   $("#resetSubscriber").click(function() {
	   $("#subscribe").clearForm();
	   $("#title_ID").val('Mr');
	   var $radios = $('input:radio[name=email_type]');
	   if($radios.is(':checked') === false) $radios.filter('[value=1]').attr('checked', true);
	   $("#subscribe fieldset div").removeClass('error');
	   $("#subscribe fieldset div").removeClass('success');
	   $("#subscribe fieldset div span").remove();
   });
   $("#submitUser").click(function() {
	   var errors = '';
	   if (check_email($("#email"), true, 'subscribe.php', true)==false) {
		   errors += "- Your email address is invlaid\n";
	   }
	   if (check_confirm($("#email_confirm"), $("#email").val()) == false) {
		   errors += "- You need to confirm your email address\n";
	   }
	   if (check_required($("#firstName")) == false) {
		   errors += "- You need to supply your first name\n";
	   }
	   if (check_required($("#lastName")) == false) {
		   errors += "- You need to supply your last name\n";
	   }
	   if (check_postcode($("#postCode"), true, 'subscribe.php') == false) {
		   errors += "- You need to supply a valid Australian post code\n";
	   }
	   terms = $("#terms").is(':checked');
	   if (terms == false) {
		   errors += "- You have not agreed to terms and conditions";
	   }
	   if (errors != '') {
		   errors = "The following errors have been discovered in your submission:\n" + errors;
		   alert(errors);
		   return false;
	   } else {
		   return true;	
	   }
   });
   // UNSUBSCRIBE
   $("#unsubscribe_email").alphanumeric({allow:"@.-"});
   $("#unsubscribe_email").blur(function() {
	   clean_input(this);
	   var a = $(this).val();
	   var b = $("#subscriber_ID").val();

	   newDiv = $('<span>Checking validity.</span>');
	   $(this).parent().addClass('checking');
	   $(this).after(newDiv);
	   $(this).next().fadeIn("slow");
	   $.get('subscribe.php', { check: "true", subscriber_email: a, subscriber_ID: b }, function(data){
		   if (data == 'false') {
			   newDiv = $('<span>This address does not match in our records. If you are sure this is correct please contact us to manually remove it.</span>');
			   result = false;
		   } else {
			   newDiv = $('<span>Email address has been found.</span>');
			   result = true;
		   }
	   });
	   $(this).next().filter('span').remove();
	   outputMsg(this, newDiv, result);
   });
   $("#resetUnsubscribe").click(function() {
	   $("#unsubscribe").clearForm();
	   $("#unsubscribe fieldset div").removeClass('error');
	   $("#unsubscribe fieldset div").removeClass('success');
	   $("#unsubscribe fieldset div span").remove();
   });
   // CONTACT FORM
   $("#contacts").attr("autocomplete","off");
   $("#contacts_name").alpha({allow:",' "});
   $("#contacts_email").alphanumeric({allow:"@.-"});
   $("#contacts_name").blur(function() { check_required(this); });
   $("#contacts_email").blur(function() {
	   check_email(this, true, 'subscribe.php', false);
	   check_confirm($("#contacts_confirm"), $(this).val());
   });
   $("#contacts_confirm").blur(function() { check_confirm(this, $("#contacts_email").val()); });
   $("#contacts_subject").blur(function() { check_required(this); });
   $("#contacts_message").blur(function() { check_required(this); });
   $("#signup").click(function() {
		if ($(this).is(':checked')) alert('Once you submit this form you will be taken to complete the signup process. This form will NOT sign you up to our subscription list. If your enquiry is about signing up to our list, please use the button at the top of this page.');						   
	});
   $("#submitContacts").click(function() {
	   var errors = '';
	   if (check_required($("#contacts_name")) == false) {
		   errors += "- You need to supply your name\n";
	   }
	   if (check_email($("#contacts_email"), true, 'subscribe.php', false)==false) {
		   errors += "- Your email address is invlaid\n";
	   }
	   if (check_confirm($("#contacts_confirm"), $("#contacts_email").val()) == false) {
		   errors += "- You need to confirm your email address\n";
	   }
	   if (check_required($("#contacts_subject")) == false) {
		   errors += "- You need to supply your last name\n";
	   }
	   if (check_required($("#contacts_message")) == false) {
		   errors += "- You need to supply your last name\n";
	   }
	   if (errors != '') {
		   errors = "The following errors have been discovered in your submission:\n" + errors;
		   alert(errors);
		   return false;
	   } else {
		   return true;	
	   }
   });
   $("#resetContacts").click(function() {
	   $("#contacts").clearForm();
	   $("#contacts fieldset div").removeClass('error');
	   $("#contacts fieldset div").removeClass('success');
	   $("#contacts fieldset div span").remove();
   });
   // CORPORATE FORM
   $("#corporate").attr("autocomplete","off");
   $("#corporate_name").alpha({allow:",' "});
   $("#corporate_phone").numeric();
   $("#corporate_fax").numeric();
   $("#corporate_email").alphanumeric({allow:".-@_"});
   $("#corporate_company").alpha({allow:",' "});
   $("#corporate_business").alpha({allow:",' "});
   $("#corporate_type").alpha({allow:",' "});
   $("#corporate_starts").numeric({allow:"/"});
   $("#corporate_length").numeric();
   $("#corporate_description").alphanumeric({allow:"',.- "});
   $("#corporate_meal").alphanumeric({allow:"',.- "});
   $("#corporate_beverage").alphanumeric({allow:"',.- "});
   $("#corporate_technical").alphanumeric({allow:"',.- "});
   $("#corporate_name").blur(function() { check_required(this); });
   $("#corporate_phone").blur(function() { check_phone(this, true); });
   $("#corporate_fax").blur(function() { check_phone(this); });
   $("#corporate_email").blur(function() { check_email(this, true, 'subscribe.php', false); });
   $("#corporate_type").blur(function() { check_required(this); });
   $("#corporate_starts").blur(function() { 
	   if ($(this).val()!='') check_date(this);
	});
   $("#corporate_length").blur(function() { check_min(this, 1, true); });
   $("#corporate_description").blur(function() { check_required(this); });
   $("#submitCorporate").click(function() {
	   var errors = '';
	   if (check_required($("#corporate_name")) == false) {
		   errors += "- You need to supply your name\n";
	   }
	   if (check_email($("#corporate_email"), true, 'subscribe.php', false)==false) {
		   errors += "- Your email address is invlaid\n";
	   }
	   if (check_required($("#corporate_phone")) == false) {
		   errors += "- You need to complete your phone number\n";
	   }
	   if (check_required($("#corporate_type")) == false) {
		   errors += "- You need to specify what type of function it is\n";
	   }
	   if ($("#corporate_starts").val!='') {
		   if (check_required($("#corporate_starts")) == false) {
			   errors += "- You need to supply a correct date if you have entered it\n";
		   }
	   }
	   if (errors != '') {
		   errors = "The following errors have been discovered in your submission:\n" + errors;
		   alert(errors);
		   return false;
	   } else {
		   return true;	
	   }
   });
   $("#resetCorporate").click(function() {
	   $("#corporate").clearForm();
	   $("#corporate_find").val('Internet Search');
	   $("#corporate fieldset div").removeClass('error');
	   $("#corporate fieldset div").removeClass('success');
	   $("#corporate fieldset div span").remove();
   });
});