/*
 * Redkite JavaScript core
 * Built by Melon Media (melon.com.au)
 */

// Our cookie handler
$(document).ready(function(){
	var i = '1';
	if ($('.view-viewGallery').length>0){
		$(this).find('.views-row').each(function(){
			if ($(this).find('.views-field-field-galimage-fid-1 .field-content').children().length>1){
				$(this).find('.views-field-field-galimage-fid-1 .field-item').each(function(){
					$(this).append($('<a></a>').attr( 'rel', $(this).parent().parent().parent().attr('class') ).attr( 'href', $(this).find('img').attr('src')).append($(this).find('img')));
				});
			} else {
				$(this).find('.views-field-field-galimage-fid-1 .field-content').each(function(){
					$(this).append($('<a></a>').attr( 'rel', $(this).parent().parent().parent().attr('class') ).attr( 'href', $(this).find('img').attr('src')).append($(this).find('img')));
				})
			}
			$(this).find('.views-field-field-galimage-fid .field-item img').each(function(){
				$(this).attr('rel',$(this).parent().attr('class')).appendTo($(this).parent().parent());
			});
			$(this).find('.views-field-field-galimage-fid .field-item').remove();
			$(this).find('a').colorbox();
			$(this).find('.views-field-field-galimage-fid .field-content').attr('id','id'+i).addClass('imageflow');
			var basic_1 = new ImageFlow();
			basic_1.init({ 
				ImageFlowID: 'id'+i,
				reflections:false,
				imagePath: 'sites/all/themes/redkite/gallery/',
				onClick: function(){
					var findStr = $(this).attr('rel');
					$(this).parent().parent().parent().parent().find('.views-field-field-galimage-fid-1').find('.field-item').each(function(){

						if ($(this).attr('class')==findStr) $(this).find('a').trigger('click');
					});
				},
				imageCursor:'pointer',
			});
			i = parseInt(i) + 1;
		});
	}	
});
var Cookie = {
	set: function(key, value, ttl, path, domain, secure, ignoreDomain) {
		var convertTTLtoGMT = function(ttl) {
			if (parseInt(ttl) == 'NaN' ) return '';
			else {
				now = new Date();
				now.setTime(now.getTime() + (parseInt(ttl) * 60 * 60 * 1000));
				return now.toGMTString();			
			}
		};
		var cookie = [key+'='+escape(value), 'path='+((!path   || path=='') ? '/' : path)];
		if (!ignoreDomain)         cookie.push('domain='+  ((!domain)?  window.location.hostname : domain));
		if (ttl)         cookie.push(convertTTLtoGMT(ttl));
		if (secure)      cookie.push('secure');
		return document.cookie = cookie.join('; ');
	},
	get: function(key) {
		var cookieData = document.cookie.match((new RegExp(key +'=[a-zA-Z0-9.()=|%/]+($|;)','g')));
		if(!cookieData || !cookieData[0]) return null;
		else return unescape(cookieData[0].substring(key.length+1, cookieData[0].length).replace(';','')) || null;
	},
	seralizeArray: function(data) {
		return data.join("|");
	}
};

var redkite = {
	// Set donation value w/o reloading page
	setDonateValue: function(value) {
		$('#edit-Amount').val(value);
		// Reset animation
		$('#edit-Amount-wrapper').stop();
		$('#edit-Amount-wrapper').css({'background-color' : '#ffffff'});
		// Run effect
		$('#edit-Amount-wrapper').effect("highlight", {}, 1500);
		return false;
	},
		
	// Positions background clouds on the page and animates them
	positionClouds: function() {
		var rand = function(min, max) {
			return min+Math.floor(Math.random()*(max-min+1));
		};
		$('#cloud1').height($(document).height());
		$('#cloud2').height($(document).height());
		$('#cloud3').height($(document).height());

		var minX = -650;
		var maxX = $(document).width()+100;
		if(maxX > 1268) {
			var origin = (maxX-100-1268)/2;
			minX = origin-650;
			maxX = origin+1268+100;
		}
		var msecPerPx = 80;

		var cloudPos = Cookie.get('cloudPos');
		if(cloudPos) {
			cloudPos = cloudPos.replace("m", "-");
			cloudPos = cloudPos.split("|");
		}
		else {
			// Start position
			cloudPos = [
				"50px 100px",
				"1000px 300px",
				"300px 500px"
			];
		}

		var animateCloud = function(id, yPos, bgCSS) {
			$('#'+id).css("backgroundPosition", bgCSS);
			
			// Work out how far it has to go until it loops & use to calc duration
			var data = bgCSS.split("px");
			var duration = Math.floor((maxX-data[0])*msecPerPx)*rand(1,1.5);
			
			// For some reason calling options in json form creates infinite recursion... use params instead
			$('#'+id).animate({backgroundPosition: maxX+"px "+yPos+"px"}, duration, "linear", function() {
				animateCloud(id, yPos, minX+"px "+yPos+"px");
			});
		};
		animateCloud('cloud1', 100, cloudPos[0]);
		animateCloud('cloud2', 300, cloudPos[1]);
		animateCloud('cloud3', 500, cloudPos[2]);
		$('#cloud1').show();
		$('#cloud2').show();
		$('#cloud3').show();
		
		$(window).unload(function() {
			var clouds = 
				$('#cloud1').css("backgroundPosition")+"|"+
				$('#cloud2').css("backgroundPosition")+"|"+
				$('#cloud3').css("backgroundPosition");
			clouds = clouds.replace("-", "m");
			Cookie.set('cloudPos', clouds, 12, '/', false, false, true);
			return;
		});
	},
	// Adds default value & style to search box that changes when it's being used
	pretifySearch: function() {
		var mainSearch = $('#mainSearch');
		if(mainSearch) {
			mainSearch.focus(function(){
				if(mainSearch.val() == "Search") {
					mainSearch.val("");
					mainSearch.css({
						"color": "#333333",
						"fontSize": "13px",
						"height": "17px",
						"paddingTop": "6px"
					});
				}
			});
			var blur = function(){
				if(mainSearch.val() == "" || mainSearch.val() == "Search") {
					mainSearch.css({
						"color": "#848484",
						"fontSize": "11px",
						"height": "16px",
						"paddingTop": "7px"
					});
					mainSearch.val("Search");
				}
			};
			mainSearch.blur(blur);
			blur();
		}
	},
	handleControls: function() {
		var controlFontDecrease = $('#controlFontDecrease');
		if(controlFontDecrease) {
			controlFontDecrease.click(function(){
				$('#content div, #content a').each(function() {
					var size = parseInt($(this).css("fontSize"));
					var newSize = size-3;
					if(newSize < 10) newSize = 10;
					if(newSize < size) {
						$(this).css("fontSize", newSize+"px");
					}
				});
				//animate({"fontSize": "-=3px"});
				return false;
			});
		}
		var controlFontIncrease = $('#controlFontIncrease');
		if(controlFontIncrease) {
			controlFontIncrease.click(function(){
				$('#content div, #content a').each(function() {
					$(this).animate({"fontSize": "+=3px"});
				});
				return false;
			});
		}
		var controlPrint = $('#controlPrint');
		if(controlPrint) {
			controlPrint.click(function(){
				window.print();
				return false;
			});
		}
	},
	addUnderlines: function() {
		var underlines = 0;
		$('#header_bottom_right ul li a, a.underline').each(function() {
			++underlines;
			var active = $(this).hasClass("live") || ($(this).parent().hasClass("active-trail") && !$(this).parent().hasClass("first"));
			var id = "underlines"+underlines;
			var self = this;
			var width = $(self).width();
			$(self).append("<div class='underlines'><img id='"+id+"' src='"+themePath+"/images/underline"+(active ? "_over" : "")+".gif' height='4' width='"+width+"' /></div>");
			if(!active) {
				var underlineOut = function() {
					$("#"+id).attr("src", themePath+"/images/underline.gif");
				};
				var underlineOver = function() {
					$("#"+id).attr("src", themePath+"/images/underline_over.gif");
				};
				$(this).mouseout(underlineOut);
				$(this).mouseover(underlineOver);
			}
		});
	},
	handleSpecialElements: function() {
		if($("#edit-field-template-image-value").length) {
			$("#edit-field-template-image-value").change(function(){
				var selectedImage = $(this).val();
				if(!redkite.templateSelectPreview) {
					$("#edit-field-template-image-value-wrapper").append("<div id='templateSelectPreview'>&nbsp;</div>");
					redkite.templateSelectPreview = $("#templateSelectPreview");
				}
				if(!selectedImage) {
					redkite.templateSelectPreview.hide();
					redkite.templateSelectPreview.html('&nbsp;');
				}
				else {
					redkite.templateSelectPreview.html('<img src="'+Drupal.settings.basePath+Drupal.settings.themePath+'/images/ajax-loader.gif" style="vertical-align:top;" border="0" /> Loading preview...');
					redkite.templateSelectPreview.show();		
					$.get(Drupal.settings.basePath+'json/template_image/'+encodeURIComponent(selectedImage)+'/200/200', null, function(data) {
						var result = Drupal.parseJson(data);
						redkite.templateSelectPreview.html('<img src="'+Drupal.settings.basePath+result['path']+'" border="0" />');				
					});
				}
			});
			$("#edit-field-template-image-value").trigger('change');
		}
		var oldMenuHtml = false;
		if($("#left_menu_expander").length) {
			$("#left_menu_expander").click(function(){	
				$("#left_menu_footer").fadeOut("normal", function() {
					$("#left_menu_footer_collapse").fadeIn();
				});
				$.get(Drupal.settings.basePath+'json/full_menu', null, function(data) {
					var result = Drupal.parseJson(data);
					var menu_block = $("#block-menu-secondary-links div.content");
					oldMenuHtml = menu_block.html();
					menu_block.html(result['menu']);
					menu_block.show("slide", { direction: "up" }, 1000);
				});
				return false;
			});
		}
		if($("#left_menu_collapse").length) {
			$("#left_menu_collapse").click(function(){	
				if(oldMenuHtml) {
					$("#left_menu_footer_collapse").fadeOut("normal", function() {
						$("#left_menu_footer").fadeIn();
					});
					var menu_block = $("#block-menu-secondary-links div.content");
					menu_block.html(oldMenuHtml);
					menu_block.show("slide", { direction: "down" }, 1000);
				}
				return false;
			});
		}
	},
	validate: function() {
		// Add phone number validation
		$.validator.addMethod('phone', function(value) {
			if(value == '') return true;
			var rePhone = new RegExp("^(\\+){0,1}(\\d|\\s|\\(|\\)){10,20}$");
			var digitsOnly = value.replace(/\D/g, "");
			var numbers = digitsOnly.length;
			return (10 <= numbers && numbers <= 20 && value.match(rePhone)); }, 'Please enter a valid phone number including area code.');
		
		// Store if we're already processing the form.
		var formSubmitted = false;
		
		if($("#hold-your-own-event-form").length) {
			$("#hold-your-own-event-form").validate({
				rules: {
					salutation: "required",
					first_name: "required",
					last_name: "required",
					company: "required",
					street: "required",
					city: "required",
					state: "required",
					zip: {
						required: true,
						minlength: 4
					},
					email: {
						required: true,
						email: true
					},
					phone: {
						required: true,
						phone: true
					},
					mobile: {
						phone: true
					},
					description: {
						required: true
					}
				},
				messages: {
					email: "Please enter a valid email address."
				},
				submitHandler: function(form) {
					// form is valid
					if(formSubmitted) {
						alert('Your details have already been submitted. Please wait.')
					}
					else {
						formSubmitted = true;
						form.submit();
					}
				}
			});	
		}

		if($("#volunteer-form").length) {
			$("#volunteer-form").validate({
				rules: {
					salutation: "required",
					first_name: "required",
					last_name: "required",
					street: "required",
					city: "required",
					state: "required",
					zip: {
						required: true,
						minlength: 4
					},
					email: {
						required: true,
						email: true
					},
					phone: {
						required: true,
						phone: true
					},
					mobile: {
						phone: true
					},
					"00NT00000010VhF": { //Emergency Contact Phone
						phone: true
					}
				},
				messages: {
					email: "Please enter a valid email address."
				},
				submitHandler: function(form) {
					// form is valid
					if(formSubmitted) {
						alert('Your details have already been submitted. Please wait.')
					}
					else {
						formSubmitted = true;
						form.submit();
					}
				}
			});	
		}
		
		if($("#subscribe-form").length) {
			$("#subscribe-form").validate({
				rules: {
					salutation: "required",
					first_name: "required",
					last_name: "required",
					street: "required",
					city: "required",
					state: "required",
					zip: {
						required: true,
						minlength: 4
					},
					email: {
						required: true,
						email: true
					},
					phone: {
						required: true,
						phone: true
					},
					mobile: {
						phone: true
					}
				},
				messages: {
					email: "Please enter a valid email address."
				},
				submitHandler: function(form) {
					// form is valid
					if(formSubmitted) {
						alert('Your details have already been submitted. Please wait.')
					}
					else {
						formSubmitted = true;
						form.submit();
					}
				}
			});	
		}
		
		if($("#redkite-story-form").length) {
			$("#redkite-story-form").validate({
				rules: {
					salutation: "required",
					first_name: "required",
					last_name: "required",
					email: {
						required: true,
						email: true
					},
					phone: {
						required: true,
						phone: true
					},
					lead_source: "required",
					story_subject: "required",
					story_title: "required",
					story: "required",

					zip: {
						minlength: 4
					},
					other_phone: {
						phone: true
					},
					mobile: {
						phone: true
					}
				},
				messages: {
					email: "Please enter a valid email address."
				},
				submitHandler: function(form) {
					// form is valid
					if(formSubmitted) {
						alert('Your details have already been submitted. Please wait.')
					}
					else {
						formSubmitted = true;
						form.submit();
					}
				}
			});	
		}
		
		if($("#contact-form").length) {
			$("#contact-form").validate({
				rules: {
					salutation: "required",
					first_name: "required",
					last_name: "required",
					email: {
						required: true,
						email: true
					},
					phone: {
						required: true,
						phone: true
					},
					mobile: {
						phone: true
					},
					street: "required",
					city: "required",
					state: "required",
					zip: {
						required: true,
						minlength: 4
					},
					message: "required"
				},
				messages: {
					email: "Please enter a valid email address."
				},
				submitHandler: function(form) {
					// form is valid
					if(formSubmitted) {
						alert('Your details have already been submitted. Please wait.')
					}
					else {
						formSubmitted = true;
						form.submit();
					}
				}
			});	
		}
		
		if($("#email-support-form").length) {
			$("#email-support-form").validate({
				rules: {
					salutation: "required",
					first_name: "required",
					last_name: "required",
					phone: {
						phone: true
					},
					mobile: {
						phone: true
					},
					childname: "required",
					"00NT00000018O4Y": "required",
					email: {
						required: true,
						email: true
					},
					description: "required"
				},
				messages: {
					email: "Please enter a valid email address."
				},
				submitHandler: function(form) {
					// form is valid
					if(formSubmitted) {
						alert('Your details have already been submitted. Please wait.')
					}
					else {
						formSubmitted = true;
						form.submit();
					}
				}
			});	
		}
		
		if($("#community-fundraising-application-form").length) {
			$("#community-fundraising-application-form").validate({
				rules: {
					salutation: "required",
					first_name: "required",
					last_name: "required",
					street: "required",
					city: "required",
					state: "required",
					zip: {
						required: true,
						minlength: 4
					},
					phone: {
						required: true,
						phone: true
					},
					mobile: {
						phone: true
					},
					email: {
						required: true,
						email: true
					},
					description: "required"
				},
				messages: {
					email: "Please enter a valid email address."
				},
				submitHandler: function(form) {
					// form is valid
					if(formSubmitted) {
						alert('Your details have already been submitted. Please wait.')
					}
					else {
						formSubmitted = true;
						form.submit();
					}
				}
			});	
		}

		if($("#uc-cart-checkout-form").length) {
			$("#uc-cart-checkout-form").validate({
				rules: {
					"panes[uc_redkite_delivery][delivery_postal_code]": {
						required: true,
						minlength: 4
					},
					"panes[uc_redkite_delivery][delivery_phone]": {
						required: true,
						phone: true
					},
					"panes[uc_redkite_delivery][delivery_OtherPhoneNumber]": {
						phone: true
					},
					"panes[uc_redkite_delivery][delivery_Email]": {
						required: true,
						email: true
					},
					"cc_owner": {
						required: true
					},
					"cc_number": {
						creditcard: true,
						required: true
					},
					"cc_exp_month": {
						required: true
					},
					"cc_exp_year": {
						required: true
					},
					"cc_cvv": {
						minlength: 3,
						required: true
					}
				},
				messages: {
					"panes[uc_redkite_delivery][delivery_Email]": "Please enter a valid email address.",
					"panes[uc_redkite_delivery][TermsAndConditions]": "Please agree to the terms and conditions."
				},
				submitHandler: function(form) {
					// form is valid
					if(formSubmitted) {
						alert('Your details have already been submitted. Please wait.')
					}
					else {
						formSubmitted = true;
						// Not needed as this step is fast
						//$('#edit-submit').hide();
						//$('#submit-processing').fadeIn(600);
						form.submit();
					}
				}
			});	
		}
		if ($('#block-views-viewGallery-block_1').length>0){
			$(this).find('.views-row').each(function(){
				if ($(this).find('.views-field-field-galimage-fid-1 .field-content').children().length>1){
					$(this).find('.views-field-field-galimage-fid-1 .field-item').each(function(){
						$(this).append($('<a></a>').attr( 'rel', $(this).attr('class') ).attr( 'href', $(this).find('img').attr('src')).append($(this).find('img')));
					});
				} else {
					$(this).find('.views-field-field-galimage-fid-1 .field-content').each(function(){
						$(this).append($('<a></a>').attr( 'rel', $(this).attr('class') ).attr( 'href', $(this).find('img').attr('src')).append($(this).find('img')));
					})
				}
				$(this).find('a').lightBox();
				$(this).click(function(){
					$(this).find('.views-field-field-galimage-fid a:first').trigger('click');
				});
			});
		}	
		
		if($("#redkite-donate-form").length) { // Run registration page code

			// This code validates the donation page form submission
			$("#redkite-donate-form").validate({
				rules: {
					Title: "required",
					FirstName: "required",
					LastName: "required",
					Street: "required",
					Suburb: "required",
					State: "required",
					Country: "required",
					PostalCode: {
						required: true,
						minlength: 4
					},
					PhoneNumber: {
						required: true,
						phone: true
					},
					OtherPhoneNumber: {
						phone: true
					},
					Email: {
						required: true,
						email: true
					},
					TermsAndConditions: "required",
					Amount: {
						number: true,
						required: true
					},
					CardName: {
						required: true
					},
					CreditCardNumber: {
						creditcard: true,
						required: true
					},
					ExpiryMonth: {
						required: true
					},
					ExpiryYear: {
						required: true
					},
					CVC: {
						minlength: 3,
						required: true
					}
				},
				messages: {
					Email: "Please enter a valid email address.",
					TermsAndConditions: "Please agree to the terms and conditions."
				},
				submitHandler: function(form) {
					// form is valid
					if(formSubmitted) {
						alert('Your details have already been submitted. Please wait.')
					}
					else {
						formSubmitted = true;
						$('#edit-submit').hide();
						$('#submit-processing').fadeIn(600);
						form.submit();
					}
				}
			});
		}
	},
	searchCalendar: function(dest) {
		var calendar_search = $('#calendar_search').val();
		window.location=dest+calendar_search+' type%3Aevent';
		return false;
	},
	animateHomepage: function() {
		if($("#featureImage").length && $("#featureText").length) {
			var featureImages = $("#featureImage img").get();
			var featureTexts = $("#featureText div.item").get();
			var i = 0;
			var rotateDisplay = function() {
				var lastI = i;
				++i;
				if(i > 2) i = 0;
				$(featureImages[lastI]).hide("slide", { direction: "up" }, 600, function() {
					$(featureImages[i]).show("slide", { direction: "down" }, 800);
				});
				//$(featureImages[lastI]).fadeOut(500, function() {
				//	$(featureImages[i]).fadeIn(800);
				//});
				$(featureTexts[lastI]).fadeOut(500, function() {
					$(featureTexts[i]).fadeIn(800);
				});
			};
			// Make first change faster to compensate for lack of transition
			window.setTimeout(function() {
				rotateDisplay();
				window.setInterval(rotateDisplay, 5000);
			}, 3600);
		}
	}
};
$(document).ready(function(){
	redkite.runAllFeatures = window.XMLHttpRequest; // Detect IE6
	
	redkite.pretifySearch();
	redkite.addUnderlines();
	if(redkite.runAllFeatures) redkite.positionClouds();
	redkite.handleControls();
	if(redkite.runAllFeatures) redkite.handleSpecialElements();
	if(redkite.runAllFeatures) redkite.animateHomepage();
	if(redkite.runAllFeatures) redkite.validate();
});