/// <reference path="jquery-vsdoc.js" />
function marmadukeInit() {
    function placeholders() { // 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);
            });
        });
    }
    /* Validation for forms*/
    function ValidateAndSubmit(evt) {
        var $group = $(evt.currentTarget).parents('fieldset'),
            isValid = true;
        $group.find(':input').each(function (i, item) {
            if (!$(item).valid())
                isValid = false;
        });
        if (!isValid)
            evt.preventDefault();
    }
    //adding a method for phone number validation
    jQuery.validator.addMethod("validPhoneNumber", function (value, element, param) {
        var $p = $(element).parent(),
            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,
            re = /^\d{1,2}\/\d{1,2}\/\d{4}$/;
        if( re.test(value)){
            var adata = value.split('/'),
                gg = parseInt(adata[0], 10),
                mm = parseInt(adata[1], 10),
                aaaa = parseInt(adata[2], 10),
                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")
    );
    //setting the options for form validation
    function validateForms() { 
        //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(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) {
                ValidateAndSubmit(evt);
            }
        });		
    }
    (function init() {
        validateForms();
        placeholders();
    }());
};

$(function () {
    marmadukeInit();

    $("body").addClass("js");

    $('#scroll-up').click(function (e) {
        e.preventDefault();
        var $content = $(this).parent().prev("#copy-viewport"),
            currentTop = $content.scrollTop(),
            maxheight = $content.find("#copy-scroll").height() - 540;

        if (currentTop == 0) {
            return false;
        } else {
            $content.scrollTop(currentTop - 590);
        }

    });

    $('#scroll-down').click(function (e) {
        e.preventDefault();
        var $content = $(this).parent().prev("#copy-viewport"),
            currentTop = $content.scrollTop(),
            maxheight = $content.find("#copy-scroll").height() - 540;

        console.log(currentTop);
        if (currentTop < -maxheight) {
            return false;
        } else {
            $content.scrollTop(currentTop + 590);
        }
    });


    $("#scroll-handle").bind("dragstart", function () {
        $("html").addClass("scroll-active");
    }).bind("dragend", function () {
        $("html").removeClass("scroll-active");
    }).bind("drag", function (e) {
        var $this = $(this),
            $scrollWrap = $this.parent(),
            height = $this.height(),
            maxHeight = 540 - height;

        // scrollbar movement
        e.offsetY -= $scrollWrap.offset().top;
        var offset = e.offsetY > maxHeight ? maxHeight : Math.max(0, e.offsetY);
        $this.css({ top: offset });

        // content movement
        var $content = $scrollWrap.parent().prev().find("#copy-scroll"),
            move = offset * (($content.outerHeight() - 590) / (height - 540));
        $scrollWrap.parent().prev("#copy-viewport").scrollTop(Math.floor(move * -1));
    });

});
