(function($) {
    $(document).ready(function() {

        $('a.gallery-image').fancybox({
            transitionIn: 'elastic',
            transitionOut: 'elastic',
            easingIn: 'easeOutBounce',
            easingOut: 'easeInBack',
            zoomSpeedIn: 800,
            zoomSpeedOut: 500,
            overlayShow: false
        });

        $('a.gallery-video').fancybox({
            transitionIn: 'elastic',
            transitionOut: 'elastic',
            easingIn: 'easeOutBounce',
            easingOut: 'easeInBack',
            zoomSpeedIn: 800,
            zoomSpeedOut: 500,
            overlayShow: false,
            type: 'swf',
            swf: { 'wmode':'transparent', 'allowfullscreen':'true' }
        });

        $('a.virtual-tour').fancybox({
            zoomSpeedIn: 400,
            zoomSpeedOut: 100,
            overlayShow: false,
            frameWidth: 615,
            frameHeight: 555,
            hideOnContentClick: false
        });

        $('a.share').fancybox({
            hideOnContentClick: false,
            overlayShow: false,
            callbackOnShow: function() {
                $('#fancy_outer form').bind('submit', function() {
                    ajaxForm($(this));
                    return false;
                });
            }
        });

        $('a.privacy-policy').fancybox({
            hideOnContentClick: false,
            overlayShow: false
        });

        $('.slide-nav a').bind('mouseenter click', function() {
            var index = $('.slide-nav a').index($(this));
            $('.slide-list li').find('img').each(function() {
                var img = $(this);
                if (img.attr('original')) {
                    img.attr('src', img.attr('original'));
                    img.removeAttr('original');
                }
            });
        });


        /* Animated scrolling */
	$('html, body').scrollTop(0);

        $('a[href*=#].animate').click(function() {
            if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '')
 && location.hostname == this.hostname) {
                var $target = $(this.hash);
                $target = $target.length && $target
   || $('[name=' + this.hash.slice(1) + ']');
                if ($target.length) {
                    var targetOffset = $target.offset().top;
                    $('html, body')
  .animate({ scrollTop: targetOffset -15 }, 1000, function() {
if (!$(this).is('html'))
return;
      $target.find('*').andSelf().effect('highlight', {}, 2000)
    .css('position', 'relative')
    .animate({ left: '20px' }, { queue: false, duration: 500, complete: function() { $(this).animate({ left: '0px' }, { queue: false, duration: 500, 
easing: 'easeOutBounce' }); } });


  });
                    return false;
                }
            }
        });



        /* Ajax contact */
    $('form.ajaxify').bind('submit', function() {
        ajaxForm($(this));
        return false;
    });

    function ajaxForm(form) {
        var fileUpload = (form.hasClass('file')); 
        
        var data = {};
        var valid = true;
        form.find(':input').each(function() {
            var thisValid = true;
            
            if ($(this).hasClass('ajax-required') && $.trim($(this).val()).length == 0) {
                thisValid=false;
            } else if ($(this).hasClass('ajax-email') && !$(this).val().match('.+?@.+?\\..+?$')) {
                if ($(this).val().length > 0) {
                thisValid=false;
                }
            }
            
            if (!thisValid) {
                var label = $(this).prev('label');
                if (label.length == 0)
                    label = $(this).parent().find('label');
                //label.css('color', '#a00');
                
                if (!label.data('oldColor')) {
                    label.data('oldColor', label.css('color'));
                }
                
                label
                    .css('color','white')
                    .animate({color: '#a00'}, 1000);
                
                $(this).focus(function() {
                    label.css('color', label.data('oldColor'));
                });
                
                valid = false;
            }

            var value = $(this).is(':checkbox') ? ($(this).attr('checked') ? 'on' : '') : $(this).val();
            data[$(this).attr('name')] = value;
            // data[$(this).attr('name')] = $(this).val();
        });

        if (!valid) {
            return false;
        }

        var doEffect = function() {
        var container = form
            .closest('.form-slide-container');

        var effectContainer = $('<div/>')
            .css('overflow', 'hidden')
            .css('position', 'relative');


        var effectHolder = $('<div/>')
            .css('position', 'relative')
            .append(container.children()).appendTo(effectContainer);

        effectContainer.appendTo(container);

        var confirmContainer = $('<div/>')
            .addClass('form-confirmation')
            .css('position', 'absolute')
            .css('left', (-effectHolder.width()) + 'px')
            .css('width', '100%')
            .css('top', '0px')
            .css('bottom', '0px')
            .css('vertical-align', 'middle')
            .css('line-height', container.height() + 'px')
            .css('text-align', 'center')
            .text(form.attr('title') || 'Thanks for your submission.')
            .appendTo(effectContainer);

        confirmContainer.animate({ left: '0px' }, 1000);

        effectHolder.animate({ left: effectHolder.width() + 'px' }, 1000, function() {
            effectHolder
                .css('left', -effectHolder.width() + 'px');

            setTimeout(function() {
                form.find(':input:not([type=submit])').val('');
                if ($('#fancy_outer:visible').length > 0) {
                    $.fn.fancybox.close();
                }
                confirmContainer.animate({ left: effectHolder.width() + 'px' }, 1500);
                effectHolder.animate({ left: '0px' }, 1500, function() {
                    effectHolder.children().appendTo(container);
                    effectContainer.remove();
                    effectHolder.remove();
                });
            }, 1600)
        });
        };
        
        if (fileUpload) {
            $.ajaxFileUpload({
                url: form.attr('action') + '?' + form.serialize(),
                fileElementId: 'file',
                success: function() {
                    doEffect();
                }
            });
        } else {
            $.ajax({
                url: form.attr('action'),
                data: data,
                type: 'POST',
                success: function() {
                    doEffect();
                }
            });
        }
        return false;
    }

    });

})(jQuery);
