var Orchard = Orchard || {};

Orchard.dropdownmenu = function() {

	var timeout    = 500;
	var closetimer = 0;
	var ddmenuitem = 0;

	function jsddm_open(){  
		jsddm_canceltimer();
   	jsddm_close();
   	ddmenuitem = $(this).find('.ddMenuItem').css('display', 'block');
   	ddmenuitem.parent().addClass('onHover');
	}

	function jsddm_close() {  
		if(ddmenuitem) ddmenuitem.css('display', 'none').parent().removeClass('onHover');
	}

	function jsddm_timer() {  
		closetimer = window.setTimeout(jsddm_close, timeout);
	}

	function jsddm_canceltimer() {  
		if(closetimer) {
			window.clearTimeout(closetimer);
      	closetimer = null;
		}
	}
	
	$('#jsddm > li').bind('mouseover', jsddm_open);
	$('#jsddm > li').bind('mouseout',  jsddm_timer);
	
	document.onclick = jsddm_close;
	
};

Orchard.loginmenu = function() {

	var ddmenuitem = 0;
	
	function setFormHeight() {
		var formHeight = $('#loginregister').height();
		$('#loginregister').height(formHeight);
	}

	function openLoginForm(){  
   	if(ddmenuitem) closeLoginForm();
   	ddmenuitem = $('#loginregister').show();
   	setFormHeight();
		return false;
	}

	function closeLoginForm() {
		if(ddmenuitem) $('#loginregister').hide();
	}
	
	function openRegisterForm() {
		var formHeight = $('#registerWrap').height();
		$('#loginWrap').fadeOut('200', function() {
			$('#loginregister').animate({ height : formHeight }, 500, 'swing', function () {
				$('#registerWrap').fadeIn();
			});
		});
		return false;
	}
	
	function goLoginForm() {
		var formHeight = 317;
		//alert(formHeight);
		$('#registerWrap').fadeOut('200', function() {
			$('#loginregister').animate({ height : formHeight }, 500, 'swing', function () {
				$('#loginWrap').fadeIn();
			});
		});
		return false;
	}
	
	$('.mediaLoginLink').bind('click', openLoginForm);	
	$('.page').bind('click',  closeLoginForm);
	$('.noLogin a').bind('click', openRegisterForm);
	$('.goToLogin').bind('click', goLoginForm);
	
	
	var loginErrorFlag = $('#hidLoginErrorFlag').val();
	var registerErrorFlag = $('#hidRegisterErrorFlag').val();
	var confirmFlag = $('#hidRegisterConfirmationFlag').val();
	
	if (loginErrorFlag == 'error') openLoginForm();
	
	else if (registerErrorFlag == 'error' || confirmFlag == 'registrationOk') {
		ddmenuitem = $('#loginregister').show().find('#loginWrap').hide().next('#registerWrap').show();
		setFormHeight();
	}
	
};

Orchard.tabs = function() {

	var $contentLayer = $('.parasitesContent');
	var $tabLink = $('.tabMenu > li');
	var activeClass = 'selected';
	
	function hideAll() {
		$('.overview').hide();
		$tabLink.removeClass(activeClass);
		$contentLayer.hide();
	}

	if($tabLink.length) {
		
		if(document.location.hash) { // Determine which tab to show from the hash in the page url
			hideAll();
			var theHash = document.location.hash;
			var theTab = theHash.replace('#', '');	
			$('.boxBody div.'+theTab+'').show();
			$('.tabMenu > li.'+theTab+'').addClass(activeClass);
		}
	
		$tabLink.click(function() {
			if (!$(this).hasClass(activeClass)) {
				hideAll();
				window.location.hash = $(this).attr('class');
				$(this).addClass(activeClass);
				$contentLayer.eq($tabLink.index(this)).show();
			}
		});
		
	}

};

Orchard.videoThumbs = function() {
		
		if ($('.video-thumb').length == 0) return;
		
        $("a.video-thumb").each(function(index) {
          $(this).data('videoUrl', $(this).attr('href'));
        });

		$("a.video-thumb").attr('href','#video-popup');
		
		var urlToShare = document.location.href.replace(document.location.search,'');
		
        $("a.video-thumb").fancybox({
             onStart: function(e,obj, i) {
               var title = $(e).attr('title'),
               url = $(e).data('videoUrl'),
					selectedVideoIndex = $("a.video-thumb").index($(e));
					url = 'http://www.youtube.com/e' + url.substring(url.lastIndexOf('/'), url.length);
                $("body").addClass("video-popup");
                var flashvars = {};
					var params = {};
					var attributes = {allowFullScreen:true};
                swfobject.embedSWF(url, "video", "503", "308", "9.0.0",flashvars, params, attributes);
                $("#video-wrap h2").text(title);
            },
            
            titleShow: true,
            autoDimensions: false,
            width: 590,
            height: 440,
            //modal: false,
            //padding: 40, 
            scrolling: "no",
            overlayShow: true
        });

        $("#see-all").click(function(e) {
            e.preventDefault();
            $.fancybox.close();
        });
			
		var showVideo = getUrlParam('showvideo');
		if (getUrlParam('showvideo') || getUrlParam('showVideo')) $('.video-thumb').eq(showVideo).click();
		
 };

Orchard.placeholders = function() {
    /*
     * Adapted from http://www.beyondstandards.com/archives/input-placeholders/
     */
    var supported = !!("placeholder" in document.createElement( "input" ));
    if (supported) return;
    $('input[placeholder]').each(function() {
        var placeholder = $(this).attr('placeholder');
        if ($(this).val() == '') $(this).addClass('placeholder').val(placeholder)
        $(this).focus(function() {
            if ($(this).val() == placeholder) $(this).removeClass('placeholder').val('');
            return false;
        }).blur(function() {
            if ($(this).val() == '') $(this).addClass('placeholder').val(placeholder);
        });
    });
    $('#aspnetForm').submit(function() {
        $('input[placeholder]').each(function() {
            var placeholder = $(this).attr('placeholder');
            if ($(this).val() == placeholder) $(this).val('');
        });
    });
};

Orchard.validation = {
    /*
     * Setting the options for form validation
     */
    init: function() {
        // Validation options
        $("#aspnetForm").validate({
            errorPlacement: function(error, element) {
                $(element).parents('li').prepend(error);
            },
            highlight: function(element, errorClass) {
                $(element).parents('li').addClass(errorClass);
            },
            unhighlight: function(element, errorClass) {
                $(element).parents('li').removeClass(errorClass);
            },
            onsubmit: false,
            onkeyup: false,
            focusInvalid: true,
            ignoreTitle: true
        });
        // Submitting the form
        $('.validateForm').click(Orchard.validation.ValidateAndSubmit);
        // Adding phone number validation
        if ($(".validPhoneNumber").length != 0) $(".validPhoneNumber").rules("add", { validPhoneNumber: true });
        // Dealing with the enter button
        $('fieldset :text').keydown(function (evt) {
            if (evt.keyCode == 13) {
                Orchard.validation.ValidateAndSubmit(evt);
            }
        });
        //add customer methods 
        this.addCustomerMethods();
    },
    /*
     * Validation for forms
     */
    ValidateAndSubmit: function(evt){
        var $group = $(evt.currentTarget).parents('fieldset');
        var isValid = true;
        $group.find(':input').each(function (i, item) {
            if($(item).val() === $(item).attr('placeholder')) $(item).val('');
            if (!$(item).valid())
                isValid = false;
            Orchard.placeholders();
        });
        if (!isValid) {
            evt.preventDefault();
        }
    },
    addCustomerMethods: function() {
        /*
         * Adding a method for phone number validation
         */
        jQuery.validator.addMethod("validPhoneNumber", function (value, element, param) {
            var $p = $(element).parent();
            var reg = /^\({0,1}((0|\+61)(2|4|3|7|8)){0,1}\){0,1}(\ |-){0,1}[0-9]{2}(\ |-){0,1}[0-9]{2}(\ |-){0,1}[0-9]{1}(\ |-){0,1}[0-9]{3}$/;
            if (value.match(reg) != null) {
                $p.removeClass('error');
                $p.find('label.error').remove();
                $(element).removeClass('error');
                return true;
            }
            $p.addClass('error');
            return false;
            },
            jQuery.validator.format("Please enter a valid phone number")       
        );
        /*
         * Adding a method for Australian date validation
         */
        jQuery.validator.addMethod("dateAU", function (value, element) {
            var check = false;
            var re = /^\d{1,2}\/\d{1,2}\/\d{4}$/;
            if( re.test(value)){
                var adata = value.split('/');
                var gg = parseInt(adata[0],10);
                var mm = parseInt(adata[1],10);
                var aaaa = parseInt(adata[2],10);
                var xdata = new Date(aaaa,mm-1,gg);
                if ( ( xdata.getFullYear() == aaaa ) && ( xdata.getMonth () == mm - 1 ) && ( xdata.getDate() == gg ) )
                    check = true;
                else
                    check = false;
            } else
                check = false;
            return this.optional(element) || check;
        }, 
        "Please enter a correct date in the format DD/MM/YYYY"
        );
        /*
         * Adding a method for postcode validation
         */
        jQuery.validator.addMethod("validPostcode", function (value, element, param) {
            var $p = $(element).parent();
            if(value.length == 0) return true;
            var reg = /^\d{4}$/;
            if (value.match(reg) != null) {
                $p.removeClass('error');
                $p.find('label.error').remove();
                $(element).removeClass('error');
                return true;
            }
            $p.addClass('error');
            return false;
        },
            jQuery.validator.format("Please enter a valid postcode 4 digits in length")
        );
        
        jQuery.validator.addMethod("validEmail", function(value, element) {  
    			return this.optional(element) || /^[a-zA-Z0-9._-]+@[a-zA-Z0-9-]+\.[a-zA-Z.]{2,6}$/i.test(value);  					
    		},
    			jQuery.validator.format("Email address is invalid")
    		);
    }
};
Orchard.init = function() {
    $('html').removeClass('no-js');
    Orchard.validation.init();
    Orchard.placeholders();
    Orchard.dropdownmenu();
    //Orchard.loginmenu();
    Orchard.tabs();
    Orchard.videoThumbs()
};

$(document).ready(function() {
    Orchard.init();
    
    $('.ddMenuItem a').click(function() {
		window.location = $(this).attr('href');
		Orchard.tabs();
	});
	
	if ($('#media').length) {
		$(".jumpTo a, .backToTop").click(function(e) {
    		e.preventDefault();
			var $destination = $(this).attr("href");
			$.scrollTo($destination, 700);
		});
	}
    
});
