// 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() + '/' + (dateLimit.getMonth()*1+1) + '/' + dateLimit.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); });
   $("#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() { 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 (check_required($("#corporate_starts")) == 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;	
	   }
   });
   $("#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();
   });
});