$(function(){
    $.cncInit();
    $.cncSlides('.slides', '.slide');
    $.cncSlides('.slides-small', '.slide');
    $.cncVideo('player');
    $.cncPortfolio('.portfolio', '#overlay-portfolio');
});

$.extend({
    cncInit: function() {
        $('input.date').datepicker({
            changeMonth: true,
            changeYear: true,
            showOtherMonths: true,
            selectOtherMonths: true,
            dateFormat: 'mm-dd-yy'
        });
        var dateRange = $('input.date-range').datepicker({
            changeMonth: true,
            changeYear: true,
            showOtherMonths: true,
            selectOtherMonths: true,
            dateFormat: 'mm-dd-yy',
			onSelect: function(selectedDate) {
				var option = this.id == 'start' ? "minDate" : "maxDate",
                instance = $(this).data("datepicker"),
                date = $.datepicker.parseDate(
                    instance.settings.dateFormat ||$.datepicker._defaults.dateFormat,
                    selectedDate,
                    instance.settings
                );
				dateRange.not(this).datepicker( "option", option, date );
			}
        });
        $('.alert-message .close').click(function(e) {
            $(this).parent().slideUp();
            e.preventDefault();
        });
    },
    triggerMessage: function (wrapper, message, type) {
        $.clearMessage(wrapper);
        $(wrapper).before('<div class="alert-message ' + type + '">' + message + '</div>');
    },
    clearMessage: function (wrapper) {
        $(wrapper).siblings('.alert-message').remove();
    },
    cncConfim: function() {
        return confirm('Are you sure you want to proceed?');
    },
    cncSlides: function(base, selector) {
        if ($(base).length > 0) {
            $(base).data('flag', 0);
            setInterval("cascadeFadeInOut('" + base + "', '" + selector + "')", 5000);
        }
    },
    cncVideo: function(selector) {
        if ($('#' + selector).length > 0) {
            var player = $f("player", baseUrl + '/assets/swf/flowplayer-3.2.7.swf', {
                clip:  {
                    autoPlay: false,
                    autoBuffering: true
                }
            });
            if ($('#' + selector).hasClass('autoplay')) {
                player.play();
            }
        }
    },
    cncPortfolio: function(base, selector) {
        if ($(base).length > 0) {
            $.each($(base + ' a'), function(i, e) {
                $(this).overlay({
                    top: 100,
                    target: selector,
                    mask: {
                        color: '#000',
                        loadSpeed: 200,
                        opacity: 0.4
                    },
                    onLoad: function() {
                        $(selector + ' .scrollable').data('scrollable').seekTo(i, 0);
                    }
                });
            });
            $(selector + ' .scrollable').scrollable({
                disabledClass: 'hide',
                circular: false,
                keyboard: true,
                mousewheel: true
            }).autoscroll({
                autoplay: true,
                interval: 5000
            });
            $(selector + ' .scrollable img.tooltip').tooltip({
                position: 'bottom center',
                opacity: 0.8,
                effect: 'fade',
                relative: true
            });
            $(selector + ' .scrollable').data('scrollable').onSeek(function() {
                var i = 0;
                var newHeight = 0;
                var scrollIndex = this.getIndex();
                this.getItems().each(function() {
                    if(i == scrollIndex) {
                        newHeight = $(this).height();
                        return false;
                    }
                    i++;
                });
                this.getRoot().add(this.getItemWrap()).animate({
                    height : newHeight
                });
            });
        }
    },
    cncUpload: function(source, dest) {
        if ($(source).length > 0) {
            var sizeLimit = 4194304;
            var fileExt = '*.jpg;*.jpeg;*.gif;*.png';
            var fileDesc = 'Images (.JPG, .JPEG, .GIF, .PNG)';

            $(source).uploadify({
                'uploader' : baseUrl + '/assets/swf/uploadify.swf',
                'script' : baseUrl + '/uploadify',
                'scriptData' : {
                    'session' : $('#session').val()
                },
                'cancelImg' : baseUrl + '/assets/icons/cancel.png',
                'buttonText' : 'BROWSE FILES',
                'fileDataName' : 'Filedata',
                'fileExt' : fileExt,
                'fileDesc' : fileDesc,
                'multi' : true,
                'queueSizeLimit' : 4,
                'sizeLimit' : sizeLimit,
                'auto' : true,
                'onError'     : function (event,ID,fileObj,errorObj) {
                    alert(errorObj.type + ' Error: ' + errorObj.info);
                },
                'onSelectOnce': function(event,data) {
                    $(source + 'Uploader').after('<span class="waiting right">Please wait...</span>')
                },
                'onComplete': function(event, ID, fileObj, response, data) {
                    var obj = $.parseJSON(response);
                    if ((obj !== undefined) && (obj != '')) {
                        $(dest).append(obj);
                    }
                },
                'onAllComplete' : function(event,data) {
                    $(source + 'Uploader').next('.waiting').remove();
                    $.cncSortable(dest);
                }
            });

        }
    },
    cncSortableAttach: function(source, dest) {
        if ($(source).val() != '') {
            $(dest).append('<div class="item clearfix"><a class="ui-icon ui-icon-close" onclick="$.cncSortableDelete(this)"></a><img alt="" src="' + baseUrl + '/p/slides/' + $(source).val() + '"><input type="hidden" name="upload[]" value="' + $(source).val() + '"></div>');
            $(source).val('');
            $.cncSortable(dest);
        }
    },
    cncSortable: function(source) {
        if (($(source).length > 0) && ($(source).children('.item').length > 0)) {
            $(source).sortable({
                opacity: 0.6,
                cursor: 'move',
                axis: 'y',
                helper: 'clone'
            });
        }
    },
    cncSortableDelete: function(source) {
        $(source).parents('.item').remove();
        return false;
    },
    cncFormSubmit: function(source) {
        var form = $(source).parents('.form').find('form'),
            name = $(form).find('#name'),
            phone = $(form).find('#phone'),
            email = $(form).find('#email'),
            text = $(form).find('#text');

        if ($.trim(name.val()) == '') {
            alert('Please enter your name');
            name.focus();
            return false;
        }
        if ($.trim(phone.val()) == '') {
            alert('Please enter your phone number');
            phone.focus();
            return false;
        }
        if ($.trim(email.val()) == '') {
            alert('Please enter your email address');
            email.focus();
            return false;
        }
        if ($.trim(text.val()) == '') {
            alert('Please describe your project');
            text.focus();
            return false;
        }
        form.submit();
    }
});

// See: http://jonraasch.com/blog/a-simple-jquery-slideshow
function cascadeFadeInOut(base, selector) {
    var numChildren = $(base).children(selector).length;
    var selected = $(base).children(selector).eq(parseInt($(base).data('flag')) % numChildren);
    $(base).data('flag', parseInt($(base).data('flag')) + 1);

    var $active = selected.children('img.active');
    if ( $active.length == 0 ) $active = selected.children('img:last');
    var $next =  $active.next().length ? $active.next() : selected.children('img:first');
    $active.addClass('last-active');
    $next.css({
        opacity: 0.0
    })
    .addClass('active')
    .animate({
        opacity: 1.0
    }, 1000, function() {
        $active.removeClass('active last-active');
    });
}

