if(typeof jQuery != 'undefined') {
	jQuery.noConflict();
	jQuery(document).ready(function($) {

        // Preload some images
        var cache = [];
        $.preLoadImages = function() {
            var args_len = arguments.length;
            for (var i = args_len; i--;) {
                var cacheImage = document.createElement('img');
                cacheImage.src = arguments[i];
                cache.push(cacheImage);
            }
        }

        if($('form').hasClass('validateInline')) {

            var msgTick = '<span class="inlineMsg"><span class="inlineTick"></span></span>';
            var msgRequired = '<span class="inlineMsg"><span class="inlineCross">Required</span></span>';
            var msgEmail = '<span class="inlineMsg"><span class="inlineCross">Email address is not valid</span></span>';
            var msgEmailExists = '<span class="inlineMsg"><span class="inlineCross">This email is not valid. This may be because the email address entered is already in use.</span></span>';
            var msgPasswordMatch = '<span class="inlineMsg"><span class="inlineCross">The two passwords entered do not match</span></span>';
            var msgPasswordLength = '<span class="inlineMsg"><span class="inlineCross">Passwords must be between 6 and 24 characters in length</span></span>';
            var inputErrClass = 'frmErr err';

            // preload validation error images
            $.preLoadImages("/images/icons/cross.gif","/images/icons/tick.gif");

            // Bind events to payment option radio buttons
            if($('.paygate').length>0) {
                $.each($('.paygate'), function() {
                    $(this).click(function(){
                        $('#paygatediv').removeClass('frmErr');
                        var $radio = $(this).find('input');
                        if($radio.attr('disabled') != true) {
                            $radio.attr('checked', 'checked');
                        } else {
                            alert('This payment option is only available for Pounds Sterling.');
                        }
                    });
                });
            }

            // Gift aid checkbox
            if($('.check_desc').length>0) {
                $.each($('.check_desc'), function() {
                    $(this).click(function(){
                        var $check = $(this).siblings('input');
                        if($check.attr('checked') != true) {
                            $check.attr('checked', 'checked');
                        } else {
                            $check.attr('checked', '');
                        }
                    });
                });
            }

            // Setup some generic validation functions
            function validateRequired(el) {
                var $el = $(el);
                $el.val($.trim($el.val()));
                $('.inlineMsg', $el.parent('p')).remove();
                if($el.val().length == 0) {
                    $el.after(msgRequired);
                    $el.addClass(inputErrClass);
                } else {
                    $el.after(msgTick);
                    $el.removeClass(inputErrClass);
                }
            }

            function validateEmail(el) {
                var $el = $(el);
                $el.val($.trim($el.val()));
                $('.inlineMsg', $el.parent('p')).remove();
                if (/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/.test($el.attr('value'))){
                    $el.after(msgTick);
                    $el.removeClass(inputErrClass);
                } else {
                    $el.after(msgEmail);
                    $el.addClass(inputErrClass);
                }

                if($el.hasClass('emailExists') && $el.attr('rel') == $el.val()) {
                    $('.inlineMsg', $el.parent('p')).remove();
                    $el.after(msgEmailExists);
                    $el.addClass(inputErrClass);
                }
            }

            function validatePasswordMatch() {

                var $elA = $('.validatePasswordMatchA');
                var $elB = $('.validatePasswordMatchB');

                if($elA.length>0) {
                    $('.inlineMsg', $(".validatePasswordMatchA,.validatePasswordMatchB").parent('label')).remove();

                    if($elA.val().length > 0 && $elB.val().length>0) {
                        if($elA.val() == $elB.val()) {
                            if($elB.attr('value').length > 0) {
                                $elA.after(msgTick);
                                $elB.after(msgTick);
                                $elA.parent('label').removeClass(inputErrClass);
                                $elB.parent('label').removeClass(inputErrClass);
                            } else {
                                $elA.after(msgTick);
                                $elB.after(msgRequired);
                                $elA.parent('label').addClass(inputErrClass);
                                $elB.parent('label').addClass(inputErrClass);
                            }
                        } else {
                            $elA.after(msgTick);
                            $elB.after(msgPasswordMatch);
                            $elA.parent('label').removeClass(inputErrClass);
                            $elB.parent('label').addClass(inputErrClass);
                        }
                    } else {
                        if($elA.val().length == 0) {
                            $elA.after(msgRequired);
                        }
                        $elB.after(msgRequired);
                        $elA.parent('label').addClass(inputErrClass);
                        $elB.parent('label').addClass(inputErrClass);
                    }
                }

            }

            function validatePasswordLength() {
                var $el = $('.validatePasswordLength');
                if($el.length>0) {
                    if($el.val().length > 0) {
                        $('.inlineMsg', $el.parent('label')).remove();
                        if($el.val().length < 6 || $el.val().length>24) {
                            $el.after(msgPasswordLength);
                            $el.parent('label').addClass(inputErrClass);
                        } else {
                            $el.after(msgTick);
                            $el.parent('label').removeClass(inputErrClass);
                        }
                    }
                }
            }

            function validateRequiredSelect(el) {
                var $el = $(el);
                $('.inlineMsg', $el.parent('p')).remove();
                if($el.val() == '-1') {
                    $el.after(msgRequired);
                    $el.addClass(inputErrClass);
                } else {
                    $el.after(msgTick);
                    $el.removeClass(inputErrClass);
                }
            }

            function processValidation() {

                $els = $('.validateRequired');
                $.each($els, function(i) {
                    validateRequired($els[i]);
                });

                $els = $('.validateEmail');
                $.each($els, function(i) {
                    validateEmail($els[i]);
                });

                $els = $('.validateRequiredSelect');
                $.each($els, function(i) {
                    validateRequiredSelect($els[i]);
                });
                $.each('.validatePasswordMatchA,.validatePasswordMatchB', function() {
                    validatePasswordMatch(this);
                });

                $.each('.validatePasswordLength', function() {
                    validatePasswordLength();
                });

                // Sponsor form amount
                if($('#normalAmount').length>0) {
                    var $el = $('#normalAmount');
                    var $val = $el.val();

                    if($el.hasClass('sponsor')) {
                        var lowerBoundary = 18;
                    } else {
                        var lowerBoundary = 0;
                    }
                    
                    if($val == 0 || $val != parseFloat($val) || $val < lowerBoundary) {
                        $el.addClass('inlineCross frmErr');
                    } else {
                        $el.removeClass('inlineCross frmErr');
                    }

                }

                // payment option validation
                if($('.paygate').length>0) {
                    if($('#paygate_EDD').attr('checked') == ''
                        && $('#paygate_WP').attr('checked') == '') {
                        $('#paygatediv').addClass('inlineCross frmErr');
                    } else {
                        $('#paygatediv').removeClass('inlineCross frmErr');
                    }
                }
                
                if($('.inlineCross').length>0) {
                    $.scrollTo('.inlineCross:first', 1000, {offset: {top:-30, left:-500}} );
                }
            }

            // Required fields blur
            $('.validateRequired').blur(function() {
                validateRequired(this);
            });

            // Email field blur
            $('.validateEmail').blur(function() {
                validateEmail(this);
            });

            // Password matching blur
            $(".validatePasswordMatchA,.validatePasswordMatchB").blur(function() {
                validatePasswordMatch();
            });

            // Password length
            $('.validatePasswordLength').blur(function() {
                validatePasswordLength();
            });

            // Required select boxes
            $('.validateRequiredSelect').change(function() {
                validateRequiredSelect(this);
            });

            // Form submit event
            $('form.validateInline').submit(function(event) {

                processValidation();

                if($('.inlineCross').length>0) {
                    event.preventDefault();
                }

            });

            if($('form').hasClass('processValidation')) {
                processValidation();
            }


        }

	});

}
