/**
 * @fileoverview frozMortgageCalculator plugin
 * @author Lawrence Natividad
 * @copyright Copyright ( c ) 2010 Frozynart Designs
 * @license Licensed under MIT ( http://www.frozynart.com/license/mit )
 * @version: 1.0 2010-03-05
 */
 
( function( $ ) {
    /**
     * @namespace frozMortgageCalculator Plugin Namespace
     * @requires jQuery 1.2.6 and above
     * @example jQuery( "#id-of-block-that-contains-form" ).frozMortgageCalculator
     * @return {jQuery Object}
     */
    jQuery.fn.frozMortgageCalculator = function( options ) {
        var opts                                    = jQuery.extend( {}, jQuery.fn.frozMortgageCalculator.defaults, options );
        jQuery.fn.frozMortgageCalculator.opts       = opts;
        var $this                                   = jQuery( this );

        var formPrincipal = jQuery(opts.principal, $this);  //principal
        var formDp = jQuery(opts.dp, $this);       //donwpayment
        var formInterest = jQuery(opts.interest, $this);    //interest rate per year
        var formTerm = jQuery(opts.term, $this);            //total number of years to pay
        var payMonth = jQuery(opts.payMonth, $this);
        var payYear = jQuery(opts.payYear, $this);
        var output = opts.output;
        
        var elArray = [formPrincipal, formDp, formInterest];
        var optionArray = [payMonth, payYear, formTerm]
        
        var calculate = function(p, d, i, n){       //formula:     M = (P - DP)[ i(1 + i)^n ] / [ (1 + i)^n - 1] 
            p = p - d;
            interest = 1 + i;
            num = Math.pow(interest, n);
            num = i * num;
            den = Math.pow(interest, n);
            den = den - 1;
            
            if ( i === 0){
                mult = 1 / n;   
            } else {
                mult = num/den;
            }
            
            m = p * mult;       
            return Number(m);
        }
        
        var setResult = function(amount){
            if ( (jQuery(payMonth).attr('checked') === true) && (jQuery(payYear).attr('checked') === true)){
                displayError();
            } else if ( jQuery(payMonth).attr('checked') === true ){
                displayResult(amount, opts.monthlyDisplay);
            } else if ( jQuery(payYear).attr('checked') === true ){
                displayResult((amount * 12), opts.yearlyDisplay);
            }
        }
        
        var placeComma = function(amount){
            var finalAmount = amount.toFixed(2);
            finalAmount = finalAmount.toString();
            var amountPart = finalAmount.split('.', 2);
            var amLength = amountPart[0].length;
            var quo = Math.floor(amLength / 3);
            var mod = amLength % 3;
            var integer = new Array();
            if ( amLength > 3 ){
                if ( mod > 0 ){
                    integer.push(amountPart[0].substr(0, mod));
                }
                if (quo > 1){
                    for ( i = 0; i < quo; i++ ){
                        if ( (i === 0) && ( mod > 0 ) ){
                            integer.push(amountPart[0].substr( (mod), 3 ));
                        } else {
                            integer.push(amountPart[0].substr( (mod + (i * 3)), 3 ));
                        }                        
                    }
                } else {
                    integer.push(amountPart[0].substr( (mod), 3) );
                }
            } else {
                integer.push(amountPart[0]);
            }
            finalInteger = integer.join();
            return finalInteger + '.' + amountPart[1];
        }
        
        var displayResult = function(amount, display){
            finalAmount = placeComma(amount);
            jQuery(output).html(display + opts.currencyDisplay + finalAmount);
            return finalAmount
        }
        
        var displayInterest = function(p, d, m, n){
            interest = Number((m * n) - (p - d));
            if ( interest < 0 ){
                interest = 0;
            }
            finalInterest = placeComma(interest);
            if (opts.interestBlock == null){
                jQuery(output).append('<br>' + opts.interestDisplay + opts.currencyDisplay + finalInterest);
            } else {
                jQuery(opts.interestBlock).html(opts.interestDisplay + opts.currencyDisplay + finalInterest);
            }
        }
        
        var displayError = function(msg){
            if (msg === null){
                jQuery(output, $this).html(opts.errorDisplay);
            } else {
                jQuery(output, $this).html(msg);
            }
            
        }
        
        var checkInput = function(){
            if( (isNaN(formPrincipal.val()) && (formPrincipal.val() !== '')) ||
                (isNaN(formDp.val()) && (formDp.val() !== '')) ||
                (isNaN(formInterest.val()) && (formInterest.val() !== '')) ||
                (isNaN(formTerm.val()) && (formTerm.val() !== '')) ){
                displayError('Please use numeric characters for all fields');
                return true;
            } else if ( parseFloat(formDp.val()) > parseFloat(formPrincipal.val()) ){
                displayError('Downpayment should not be more than principal amount');
                return true;
            } else {
                displayError(null);
                return null;
            }
        }
        
        var setupCalc = function(){
            var principal = parseFloat(formPrincipal.val());
            var dp = parseFloat(formDp.val());
            var interest = parseFloat((formInterest.val()/100)/12);
            var term = parseFloat(formTerm.val() * 12);
            if ( isNaN(dp) ){
                dp = 0;
            }
            result = calculate(principal, dp, interest, term);
            if ( !isNaN(result) ){
                setResult(result);
                if ( true === opts.displayTIP ){
                    displayInterest(principal, dp, result, term);
                }
            }
        }
        
        error = checkInput();
        if (error !== true){
            setupCalc();
        }
        
        for( element in elArray ){
            jQuery(elArray[element]).keyup( function(){
                error = checkInput();
                if (error !== true){
                    setupCalc();
                }
            });
        }
        
        for( element in optionArray ){
            jQuery(optionArray[element]).click( function(){
                if( formPrincipal.val() !== '' ){
                    error = checkInput();
                    if (error !== true){
                        setupCalc();
                    }
                }
            });
        }
        
        return $this;
    };

    /**
     * <pre> 
     * Settings
     *
     * Setting            Default            Description
     * ------------------------------------------------------------------------------------------
     * navHeadContent:    "header-content"   ID of block which contains slide contents
     * 
     * delayTime:         1000               Time it takes for the slide to return to its position
     *                                          ( if returnOnOut:true )
     * </pre>
     */
    jQuery.fn.frozMortgageCalculator.defaults =   {
        principal: '#froz-mortgage-principal',  //principal
        dp: '#froz-mortgage-downpayment',       //donwpayment
        interest: '#froz-mortgage-interest',    //interest rate per year
        term: '#froz-mortgage-term',            //total number of years to pay
        payMonth: "#froz-mortgage-month",       //option to display monthly payments
        payYear: "#froz-mortgage-year",         //option to display annual payments
        output: "#froz-mortgage-result",
        monthlyDisplay: 'Monthly payment: ',
        yearlyDisplay: 'Yearly payment: ',
        interestDisplay: 'Total interest paid: ',
        errorDisplay: 'Result will be displayed here',
        currencyDisplay: '$',
        displayTIP: false,
        interestBlock: null,
        resetOnClick: true
    };
} )(jQuery);
/**
 * @fileoverview frozCarousel plugin
 * @author Lawrence Natividad
 * @copyright Copyright ( c ) 2010 Frozynart Designs
 * @license Licensed under MIT ( http://www.frozynart.com/license/mit )
 * @version: 1.0 2010-07-04
 */
 
( function( $ ) {
    /**
     * <ul> passes must have ID
     * @namespace frozCarousel Plugin Namespace
     * @requires jQuery 1.2.6 and above / jQuery Easing / jquery Timer
     * @example jQuery( "#id-of-DIV-that-contains-UL-that-contains-LIs" ).frozCarousel();
     * @return {jQuery Object}
     */
    jQuery.fn.frozCarousel = function( options ) {
        var opts                            = jQuery.extend( {}, jQuery.fn.frozCarousel.defaults, options );
        jQuery.fn.frozCarousel.opts      = opts;
        var $this                           = jQuery( this );
        
        var setupList = function(list, head){
            list.wrap('<div class="' + opts.wrapper + '" id="' + head.attr('id') + '-list-wrapper"></div>');
            list.data('wrapper', list.parent());
            var liCount = list.children('li').length;
            
            list.data('maxCount', (liCount - opts.showAmount))
                .data('range', opts.showAmount)
                .data('currentCount', opts.start);
            
            var adjust = 0;
            if ( opts.vertical === true ){
                list.children('li').each( function(){
                    if ( jQuery(this).outerWidth() > adjust ){
                        adjust = jQuery(this).outerWidth();
                    }
                })
            } else {
                list.children('li').each( function(){
                    if ( jQuery(this).outerHeight() > adjust ){
                        adjust = jQuery(this).outerHeight();
                    }
                })
            }
            
            setupDimensions(list, list.children('li:first'), liCount, adjust);
            
            return head;
        }
        
        var setupDimensions = function(list, sample, count, adjust){
            var wrapper = list.data('wrapper');

            if ( opts.vertical === true ){
                list.css({
                    height: (sample.outerHeight(true) * count) + 'px',
                    width: adjust + 'px'
                })

                wrapper.css({
                    height: (sample.outerHeight(true) * opts.showAmount) + 'px',
                    width: adjust + 'px'
                })
            } else {
                list.css({
                    height: adjust + 'px',
                    width: (sample.outerWidth(true) * count) + 'px'
                })

                wrapper.css({
                    height: adjust + 'px',
                    width: (sample.outerWidth(true) * opts.showAmount) + 'px'
                })
            }
        }
        
        var setupControls = function(head){
            var controls = null;
        
            if ( opts.controls === 'top' ){
                head.addClass(opts.topControlClass);
                controls = createTopControls(head); 
            
                if ( controls !== null ){
                    head.prepend(controls);
                }   
                        
            } else if ( (opts.controls === 'side') || (opts.controls === 'wrap') ){
                if (opts.controls === 'side'){
                    head.addClass(opts.sideControlClass);
                } else {
                    head.addClass(opts.wrapControlClass);
                }
                
                controls = createSideControls(head)
                
                if ( controls !== null ){
                    head.prepend(controls[0]);
                    head.prepend(controls[1]);
                    head.append(controls[2]);
                }   
                
                controls = head.find('div.' + opts.controlDivClass);
                
            }
            
            if ( controls !== null ){
                setupBehavior(controls, head, opts.slideTime, opts.easing);
                
                if ( opts.autohideControls === true ){
                    controls.addClass(opts.hideControlClass);
                }
                
            }
            
            return head;
        }
        
        var setupBehavior = function(controls, head, slideTime, easing){
            var prev = controls.find('a.' + opts.prevClass)
            var counter = controls.find('div.' + opts.counterClass);
            var next = controls.find('a.' + opts.nextClass)
            var list = head.find('ul.' + opts.carouselList);
            
            if ( counter.length === 1){
                counter.data('default', opts.counter).data('rangeTerm', opts.rangeCounterTerm);
            }
            
            setStarter(list, list.data('currentCount'), counter);
            
            if ( prev.length === 1 ){
                prev.click( function(){
                    deActivateList(list)
                    slidePrev(list, counter, slideTime, easing);
                    return false;
                })
            }
            
            if ( next.length === 1 ){
                next.click( function(){
                    deActivateList(list)
                    slideNext(list, counter, slideTime, easing);
                    return false;
                })
            }
        }
        
        var activateList = function(list, current){
            list.children('li:eq(' + current + ')').addClass(opts.activeClass);
            if ( opts.loop === false ){
                disableButtons(list, current, list.data('maxCount'));
            }
        }
        
        var deActivateList = function(list){
            list.children('li').removeClass(opts.activeClass);
            if ( opts.loop === false ){
                enableButtons(list);
            }
        }
        
        var disableButtons = function(list, current, maxCount){
            var head = list.closest('div.' + opts.identifier);
            if ( current <= 0 ){
                head.find('a.' + opts.prevClass).addClass(opts.disabledControlClass)
            } else if ( current >= list.data('maxCount') ) {
                head.find('a.' + opts.nextClass).addClass(opts.disabledControlClass)
            }
        }
        
        var enableButtons = function(list){
            var controls = list.closest('div.' + opts.identifier).find('div.' + opts.controlDivClass + ' > a');
            controls.removeClass(opts.disabledControlClass);
        }
        
        var setStarter = function(list, current, counter){
            var liCount = list.children('li').length;
            
            if ( opts.vertical === true ){
                var increment = list.children('li:first').outerHeight(true);
                var distance = current * increment;
                list.stop(false, true).css({top: distance + 'px'});
            } else {
                var increment = list.children('li:first').outerWidth(true);
                var distance = current * increment;
                list.stop(false, true).css({left: distance + 'px'});
            }
            
            if ( counter.length === 1 ){
                updateCounter(liCount, list, counter);
            }
            
            activateList(list, current);
        }
        
        var slidePrev = function(list, counter, slideTime, easing){
            var liCount = list.children('li').length;
            var count = list.data('currentCount');
            var maxCount = list.data('maxCount');
            
            if ( (count - 1) >= 0 ){
                list.data('currentCount', (count - 1))
            
                if ( opts.vertical === true ){
                    var increment = list.children('li:first').outerHeight(true);
                    list.stop(false, true).animate({top: '+=' + increment + 'px'}, slideTime, easing);
                } else {
                    var increment = list.children('li:first').outerWidth(true);
                    list.stop(false, true).animate({left: '+=' + increment + 'px'}, slideTime, easing);
                }
            } else {
                if ( opts.loop === true ){
                    list.data('currentCount', list.data('maxCount'))
                    
                    if ( opts.vertical === true ){
                        var increment = list.children('li:first').outerHeight(true);
                        list.stop(false, true).animate({top: -((list.data('maxCount')) *increment) + 'px'}, slideTime,easing);
                    } else {
                        var increment = list.children('li:first').outerWidth(true);
                        list.stop(false, true).animate({left: -((list.data('maxCount')) *increment) + 'px'}, slideTime,easing);
                    }
                }
            }
            
            activateList(list, list.data('currentCount'));
            if ( counter.length === 1 ){
                updateCounter(liCount, list, counter);
            }
        }
        
        var slideNext = function(list, counter, slideTime, easing){
            var liCount = list.children('li').length;
            var count = list.data('currentCount');
            var maxCount = list.data('maxCount');
            
            if ( (count + 1) <= maxCount ){
                list.data('currentCount', (count + 1))
            
                if ( opts.vertical === true ){
                    var increment = list.children('li:first').outerHeight(true);
                    list.stop(false, true).animate({top: '-=' + increment + 'px'}, slideTime, easing);
                } else {
                    var increment = list.children('li:first').outerWidth(true);
                    list.stop(false, true).animate({left: '-=' + increment + 'px'}, slideTime, easing);
                }
            } else {
                if ( opts.loop === true ){
                    list.data('currentCount', 0)
                    
                    if ( opts.vertical === true ){
                        var increment = list.children('li:first').outerHeight(true);
                        list.stop(false, true).animate({top: '0px'}, slideTime, easing);
                    } else {
                        var increment = list.children('li:first').outerWidth(true);
                        list.stop(false, true).animate({left: '0px'}, slideTime, easing);
                    }
                }
            }
            
            activateList(list, list.data('currentCount'));
            if ( counter.length === 1 ){
                updateCounter(liCount, list, counter);
            }
        }
        
        var updateCounter = function(liCount, list, counter){
            if ( !(list.data('range') > 1) ){
                counter.text((list.data('currentCount') + 1) + counter.data('default') + liCount);
            } else {
                counter.text((list.data('currentCount') + 1) + counter.data('rangeTerm') + 
                                (list.data('currentCount') + list.data('range')) + 
                                counter.data('default') + liCount);
            }
        }
        
        var createTopControls = function(head){
            var controlDiv = createBeforeControl();
            if ( opts.prev !== null ){
                controlDiv.append(createPrevControl())
            }
            if ( opts.counter !== null ){
                controlDiv.append(createCounterControl())
            }
            if ( opts.next !== null ){
                controlDiv.append(createNextControl())
            }
            
            return controlDiv;
        }
        
        var createSideControls = function(head){
            var controlBeforeDiv = createBeforeControl();
            var controlMidDiv = createMidControl();
            var controlAfterDiv = createAfterControl();
            
            if ( opts.prev !== null ){
                controlBeforeDiv.append(createPrevControl())
            }
            if ( opts.counter !== null ){
                controlMidDiv.append(createCounterControl())
            }
            if ( opts.next !== null ){
                controlAfterDiv.append(createNextControl())
            }
            
            var controlDiv = new Array(controlBeforeDiv, controlMidDiv, controlAfterDiv);
            
            return controlDiv;
        }
        
        var createPrevControl = function(){
            return jQuery('<a href="#" class="' + opts.prevClass +'">' + opts.prev + '</a>')
        }
        
        var createCounterControl = function(){
            return jQuery('<div class="' + opts.counterClass +'">' + opts.counter + '</div>')
        }
        
        var createNextControl = function(){
            return jQuery('<a href="#" class="' + opts.nextClass +'">' + opts.next + '</a>')
        }
        
        var createBeforeControl = function(){
            return jQuery('<div class="' + opts.prependControlClass + ' ' + opts.controlDivClass + '"></div>');
        }
        
        var createMidControl = function(){
            return jQuery('<div class="' + opts.prependMidControlClass + ' ' + opts.controlDivClass + '"></div>');
        }
        
        var createAfterControl = function(){
            return jQuery('<div class="' + opts.appendControlClass + ' ' + opts.controlDivClass + '"></div>');
        }
        
        var setAutoSlide = function(head){
            mainTimer = jQuery.timer( head.data('autoSlide'), function( timer ) { 
                head.find('a.' + opts.nextClass).trigger('click');
            });
            
            head.data('carouselTimer', mainTimer);
            return head;
        }
        
        var setHoverHold = function(head){
            head.mouseenter( function(){
                head.data('carouselTimer').stop();
            }).mouseleave( function(){
                setAutoSlide(head);
            })
        }
        
        var setupAutohide = function(controls){
            var fadeTime = opts.controlFadeTime;
            var fadeOpacity = opts.controlFadeOpacity;
            var showOpacity = opts.controlShowOpacity;
            
            controls.fadeTo(0, opts.controlFadeOpacity)
                    .mouseenter( function(){
                        controls.stop(false, false).fadeTo(fadeTime, showOpacity);
                    }).mouseleave( function(){
                        controls.stop(false, false).fadeTo(fadeTime, fadeOpacity);
                    })
        }
        
        var openFancybox = function(target){
        
            var data = target.data('fancyboxData');
            var type = target.data('fancyboxType');
        
            if ( type === 'image' ){
                jQuery.fancybox({
                    content: data
	        	})
            }        
        }
        
        var setupLinks = function(links){
            links.each( function(){
                jQuery(this).data('fancyboxData', null)
            }).click( function(){
                if ( jQuery(this).data('fancyboxData') === null ){
                    var href = jQuery(this).attr('href');
                    if ( href.slice(href.lastIndexOf('.')).match('(.jpg)|(.gif)|(.png)$') !== null){
                        var image = new Image();
                        image.src = href;
                        jQuery(this).data('fancyboxData', image);
                        jQuery(this).data('fancyboxType', 'image');
                        openFancybox(jQuery(this));
                        return false;
                    }
                } else {
                    openFancybox(jQuery(this));
                    return false;
                }
            })
        }
        
        if ( $this.length > 0 ){
            $this.each( function(){
                var head = setupList(jQuery(this).find('ul.' + opts.carouselList), jQuery(this));  
                head.addClass(opts.identifier);
                head = setupControls(head);
                                
                if ( opts.autohideControls === true ){
                    setupAutohide(head.find('div.' + opts.hideControlClass))                    
                }
                
                if ( opts.autoSlide > 0 ){
                    head.data('autoSlide', opts.autoSlide)
                        .data('slideTime', opts.slideTime)
                        .data('easing', opts.easing);
                    head = setAutoSlide(head);
                    
                    if ( opts.hoverHold === true ){
                        setHoverHold(head);
                    }
                }
                
                var links = head.find('ul.' + opts.carouselList).find('a');
                
                if ( links.length > 0 ){
                    if ( opts.enableFancyBox === true ){
                        setupLinks(links);                
                    }
                }
                
            })
        }
        
        return $this;
    };

    /** 
     * Sends a message to the console
     * @private
     */
    var _debug = function( message ) {
        if ( true === jQuery.fn.frozCarousel.opts.debug ) {
            console.log( message );
        }
    };
    
    jQuery.fn.frozCarousel.defaults =   {
        identifier: 'froz-carousel-main',                        //unique id to be used for carousel objects
        carouselList: 'froz-carousel-list',
        wrapper: 'froz-carousel-wrapper',
        vertical: false,                                //if true, contents slide vertically
        showAmount: 1,                                  //amount of elements to be shown in slider display
        controls: 'top',                                // top, bottom, side(left and right) or wrap(top and bottom)
        activeClass: 'froz-carousel-active',                //class assigned to active image
        disabledControlClass: 'froz-carousel-disabled',                //class assigned to active image
        topControlClass: 'controls-top',
        sideControlClass: 'controls-side',
        wrapControlClass: 'controls-wrap',
        controlDivClass: 'froz-carousel-controls',      //class given to control elements
        prependControlClass: 'precontrol',
        prependMidControlClass: 'midcontrol',
        appendControlClass: 'postcontrol',
        prevClass: 'froz-carousel-prev',
        counterClass: 'froz-carousel-counter',
        nextClass: 'froz-carousel-next',
        prev: "Previous",                               //previous button display. can be replaced with html element
        counter: ' of ',                                   //image counter separator. if null, no counter is displayed
        next: 'Next',                                   //next button display. can be replaced with html element
        rangeCounterTerm: ' to ',
        start: 0,                                       //starter slide
        slideTime: 500,                                 //sliding duration
        easing: 'easeInOutExpo',                        //sliding easing animation
        autoSlide: 0,                                   //speed of auto slide. slider does not auto-slide if === 0
        hoverHold: true,                                //if true, auto-slide stops when mouse hovers over slider
        loop: true,                                     //determines if slide goes through other end if end of slide is reached
        autohideControls: false,
        hideControlClass: 'froz-carousel-auto-hide',
        controlShowOpacity: 1,
        controlFadeOpacity: 0.01,
        controlFadeTime: 300,
        enableFancyBox: true
        
//        btnActiveClass: 'froz-carousel-active-button',      //class assigned to active control button
//        widthAdjust: 0,                                 //custom width length added to slider element
//        heightAdjust: 0,                                //custom height length added to slider element
//        setCss: true,                                   //if true, positioning is automtically set for controls and main DIV
//        controlHide: 0,                                 //if > 0, sets duration of opacity lowering animation upon mouse hover
//        indivHide: 0,                                   //same as controlhide, except animations are separated per button
//        hideOpacity: 0.01,                              //opacity of hidden control elements
//        showOpacity: 1,                                 //opactiy of displayed control elements
//        controlOverlap: 0,                              //if > 0, determines amount of px that controls overlap slider
//                                                        //works only for control === side || control === wrap
                                                        
        
    };
} )(jQuery);
/**
 * @fileoverview frozCarouselGallery plugin
 * @author Lawrence Natividad
 * @copyright Copyright ( c ) 2010 Frozynart Designs
 * @license Licensed under MIT ( http://www.frozynart.com/license/mit )
 * @version: 1.0 2010-04-28
 */
 
( function( $ ) {
    /**
     * all parameters
     * <ul> passes must have ID
     * all content banners must have the same dimensions
     * When thumbnails are clicked, contents slide over accordingly
     * @namespace frozCarouselGallery Plugin Namespace
     * @requires jQuery 1.2.6 and above / jQuery Easing / jquery.color
     * @example jQuery( "#id-of-list-that-contains-contents" ).frozCarouselGallery
     * @return {jQuery Object}
     */
    jQuery.fn.frozCarouselGallery = function( options, carouselOpts ) {
        var opts                            = jQuery.extend( {}, jQuery.fn.frozCarouselGallery.defaults, options );
        jQuery.fn.frozCarouselGallery.opts  = opts;
        var $this                           = jQuery( this );
        
        var carouselOptions = jQuery.fn.frozCarousel.defaults;
        
        var setupBlock = function(head, carOpts){
            var list = head.find('div.' + opts.previewThumbs).find('ul:first');
            list.addClass(carOpts.carouselList);
            
            return head;
        }
        
        var extendOptions = function(newOpts, origOpts){
            
            origOpts.enableFancyBox = 'false';
            origOpts.controls = 'top';
            origOpts.loop = false;
            
            if ( typeof(newOpts) == 'object' ){
                var finalOpts = jQuery.extend( {}, origOpts, newOpts );
            } else {
                var finalOpts = origOpts;
            }
                        
            return finalOpts;
        }
        
        var changeDescription = function(headPrev){
            var descBlock = jQuery('.' + headPrev.data('opts').descriptionBlock, headPrev);
            var desc = headPrev.data('active').find('a:first').attr('title');
            
            descBlock.stop(true, true).animate({top: descBlock.data('defTop') + 'px'},
                              descBlock.data('slideTime'),
                              descBlock.data('easing'),
                              function(){
                                    jQuery(this).data('main').text(desc);
                                    var newTop = jQuery(this).outerHeight(true) - jQuery(this).data('offset');
                                    jQuery(this).animate({top: '-=' + newTop + 'px'},
                                                      jQuery(this).data('slideTime'),
                                                      jQuery(this).data('easing')
                                                     );
                              }
                             )
            
        }
        
        var changeImage = function(headPrev, initial){
            var img = jQuery('<img src="' + headPrev.data('active').find('a:first').attr('href') + '" />')
            var currentImage = headPrev.find('img');
            
            if ( initial === true ){
                headPrev.prepend(img);
            } else {
                headPrev.prepend(img.hide());
                img.load( function(){
                    currentImage.stop(false, true).fadeOut( headPrev.data('opts').fade, function(){
                        jQuery(this).remove();
                    } );
                    img.stop(false, true).fadeIn( headPrev.data('opts').fade );
                })
            
            }
            
            if ( headPrev.data('opts').descriptionBlock !== null ){
                changeDescription(headPrev);
            }
                    
            opts.onChange(headPrev.data('active'), img, headPrev);
            
            return headPrev;
        }
        
        var setupDescription = function(headPrev){
            var descBlock = jQuery('.' + headPrev.data('opts').descriptionBlock, headPrev);
            descBlock.append('<span class="' + opts.descriptionMainClass + '"></span>');
            descBlock.append('<span class="' + opts.descriptionBgClass + '"></span>');
            
            descBlock.data('defTop', headPrev.innerHeight())
                     .data('offset', opts.descriptionOffset)
                     .data('slideTime', opts.descriptionSlideTime)
                     .data('easing', opts.descriptionSlideEasing)
                     .data('main', descBlock.find('span.' + opts.descriptionMainClass))
                     .data('bg', descBlock.find('span.' + opts.descriptionBgClass));
            descBlock.css({top: descBlock.data('defTop') + 'px'})
            
            return headPrev;
        }
        
        var setupPreview = function(head, list){
            var headPrev = head.find('div.' + opts.previewBlock);
            headPrev.data('opts', opts).data('active', list.children('li').eq(opts.starter).addClass(opts.activeClass));
            headPrev = setupDescription(headPrev);
            headPrev = changeImage(headPrev, true);
            
            headPrev.data('disabled', null)
                
            if ( opts.starter == 0 ){
                headPrev.data('disabled', 'prev');
            } else if ( opts.starter == (list.children('li').length - 1) ) {
                headPrev.data('disabled', 'next');
            }
            
            return headPrev;            
        }
        
        var setupClick = function(headPrev, list, head){
            list.children('li').click( function(){
                if ( !jQuery(this).hasClass(headPrev.data('opts').activeClass) ){
                    list.children('li').removeClass(headPrev.data('opts').activeClass);
                    headPrev.data('active', jQuery(this));
                    changeImage(headPrev, false);
                    jQuery(this).addClass(headPrev.data('opts').activeClass)
                    
                    var controls = headPrev.data('controls');

                    if ( (controls.length > 0) && 
                         (head.data('opts').carousel !== false) && 
                         (typeof(head.data('carOpts').disabledControlClass) == 'string') ){
                        
                        var count = jQuery(this).prevAll().length;
                        var maxCount = jQuery(this).siblings().length;

                        if ( count <= 0 ){
                            controls.data('prev').addClass(head.data('opts').controlDisabled);
                        } else if ( count >= maxCount ){
                            controls.data('next').addClass(head.data('opts').controlDisabled);
                        } else {
                            controls.find('a').removeClass(head.data('opts').controlDisabled);
                        }
                        
                    }
                }

                return false;
            })
        }
        
        var setupControls = function(headPrev, head, carOpts){
            var controls = jQuery('<div class="' + opts.controls + '"></div>');
            controls.append('<a href="#" class="' + opts.controlPrev + '"></a>')
                    .append('<a href="#" class="' + opts.controlNext + '"></a>')
                    .data('prev', controls.find('a.' + opts.controlPrev))
                    .data('next', controls.find('a.' + opts.controlNext));
            
            if ( headPrev.data('disabled') === 'prev' ){
                controls.data('prev').addClass(opts.controlDisabled)
            } else if ( headPrev.data('disabled') === 'next' ){
                controls.data('next').addClass(opts.controlDisabled)
            }
                    
            return headPrev.append(controls).data('controls', controls);
        }
        
        var setupControlAction = function(controls, headPrev, head){
            controls.data('prev').click( function(){
                if ( headPrev.data('active').prevAll().length > 0 ){
                    headPrev.data('active').prev('li').click();
                    centerCarousel(head, headPrev.data('active').prevAll().length, headPrev.data('carouselLimit'));
                } else {
                    jQuery(this).addClass(head.data('opts').controlDisabled);
                }
                
                return false;
            });
            
            controls.data('next').click( function(){
                if ( headPrev.data('active').nextAll().length > 0 ){
                    headPrev.data('active').next('li').click();
                    centerCarousel(head, headPrev.data('active').prevAll().length, headPrev.data('carouselLimit'));
                } else {
                    jQuery(this).addClass(head.data('opts').controlDisabled);
                }
                
                return false;
            });
            
        }
        
        var centerCarousel = function(head, count, limit){
            if ( (head.data('opts').carousel !== false) && (typeof(head.data('carOpts').disabledControlClass) == 'string') ){
                var active = head.find('ul.' + head.data('carOpts').carouselList)
                                 .find('li.' + head.data('carOpts').activeClass)
                                 .prevAll().length;

                var maxCount = (parseInt(active) + parseInt(limit) - 1);
                var carControls = head.find('div.' + head.data('carOpts').controlDivClass);
                
                if ( count < active ){
                    var target = carControls.find('a.' + head.data('carOpts').prevClass);
                    if ( !target.hasClass(head.data('carOpts').disabledControlClass) ){
                        target.click();
                        centerCarousel(head, count, limit);
                    }
                } else if ( count > maxCount ) {
                    var target = carControls.find('a.' + head.data('carOpts').nextClass);
                    if ( !target.hasClass(head.data('carOpts').disabledControlClass) ){
                        target.click();
                        centerCarousel(head, count, limit);
                    }
                }

            }
        }
        
        var setupControlHide = function(controls){
            controls.data('fade', opts.controlFadeTime);
            controls.find('a').fadeTo(1, 0.01)
                    .hover( function(){
                        jQuery(this).stop(false, true).fadeTo(controls.data('fade'), 1);
                    }, function(){
                        jQuery(this).stop(false, true).fadeTo(controls.data('fade'), 0.01);
                    })
        }
        
        if ( $this.length > 0 ){
            $this.each( function(){
                var head = jQuery(this).data('opts', opts);
                
                carouselOptions = extendOptions(carouselOpts, carouselOptions);
                
                head.data('carOpts', carouselOptions);
                
                var headList = setupBlock(head, carouselOptions);
                var headPrev = setupPreview(head, headList.find('ul.' + carouselOptions.carouselList));
                
                if ( opts.enableCarousel !== false ){
                    headList.frozCarousel(carouselOptions);  
                }
                
                setupClick(headPrev, headList.find('ul.' + carouselOptions.carouselList), head);
                
                if ( typeof(opts.controls) == 'string' ){
                    headPrev = setupControls(headPrev);
                    headPrev.data('carouselLimit', carouselOptions.showAmount);
                    setupControlAction(headPrev.data('controls'), headPrev, head);
                    if ( opts.controlFadeTime !== null ){
                        setupControlHide(headPrev.data('controls'));
                    }
                }
            })
        }
        
        return $this;
    };

    /** 
     * Sends a message to the console
     * @private
     */
    var _debug = function( message ) {
        if ( true === jQuery.fn.frozCarouselGallery.opts.debug ) {
            console.log( message );
        }
    };
    
    jQuery.fn.frozCarouselGallery.defaults =   {
        previewThumbs: 'froz-carousel-gallery-thumbs',
        previewBlock: 'froz-carousel-gallery-preview',
        activeClass: 'froz-carousel-gallery-active',
        starter: 0,
        fade: 800,
        enableCarousel: true,
        
        descriptionBlock: null,
        descriptionMainClass: 'description-main',
        descriptionBgClass: 'description-bg',
        descriptionSlideTime: 400,
        descriptionSlideEasing: 'easeInOutExpo',
        descriptionOffset: 0,
        
        controls: 'froz-carousel-gallery-controls',
        controlPrev: 'gallery-prev',
        controlNext: 'gallery-next',
        controlDisabled: 'gallery-control-disabled',
        controlFadeTime: 300,       //null to disable hide
        
        onChange: function(activeLi, newImage, prevBlock){
            return false;
        }
    };
} )(jQuery);
jQuery(document).ready(function() {

    jQuery('.back-to-top').click(function(){
    	jQuery.scrollTo('#inner-content', 800);
    	return false;
    });
	
    var cardsvalidate = function()
    {

        /**
         * @var string
         * @access private
         */
        var _cardsformel               = '#froz-submit-form form';


        /**
         * @var string
         * @access private
         */
        var _cardscompletetarget   = '.froz-card-preview-new';


        /**
         * @var DOM Element
         * @access private
         */
        var _loader                  = null;


        /**
         * @access private
         * @return void
         */
        var _setupLoader = function()
        {
            _loader = jQuery('<div id="ajax-loader"><img src="' + GLOBAL_BASE_URL + '/img/preloaders/1.gif" alt="loading..." /></div>')
                         .css({position:"relative", top:"1em"})
                         .appendTo(_cardsformel).hide();
            jQuery().ajaxStart(function() {
                _onSubmit();
            }).ajaxStop(function() {
                _onComplete();
            }).ajaxError(function(a, b, e) {
                throw e;
            });
        };

        jQuery('.mortgage-calculator').frozMortgageCalculator({ displayTIP: true });
        
        /**
         * @access private
         * @return void
         */
        var _onSubmit = function()
        {
            _loader.show();
        };

        /**
         * @access private
         * @return void
         */
        var _onComplete = function()
        {
            _loader.hide();
        };

        return {

            
            /**
             * @access public
             * @return void
             */
            init:function() {

                _setupLoader();
                
                jQuery(_cardscompletetarget).css({display:'block'});
                
                jQuery(_cardsformel).ajaxForm({
                    dataType:  'json',
                    success: function(data) {
                        
                        if(data.success === true) {
                            jQuery(_cardsformel).hide('slow');
                            jQuery(_cardsformel).parent().append(data.message);
                            //jQuery.scrollTo(_cardscompletetarget, 800);
                            return false;
                        }
                    
                        var content          = data.content;
                        var content_c        = content.length;
                        var errorFormatStart = '<ul class="errors">';
                        var errorFormatEnd   = '</ul>';

                        jQuery(_cardsformel + ' ul.errors').remove();

                        if(content_c > 0) {
                            jQuery('.captcha-img').replaceWith(data.captchaImg);
                            jQuery('#cards_captcha').val('');
                        } else {
                            return true;
                        }
                        
                        for(var item in content) {

                            var errors            = content[item].value;
                            var errors_c          = errors.length;
                            var errorFormatted    = '';

                            errorFormatted        += errorFormatStart;

                            for(var e in errors) {
                                errorFormatted += '<li>' + errors[e] + '</li>';
                            }

                            errorFormatted        += errorFormatEnd;

                            var inputs   = jQuery(':input[name=' + content[item].element + ']');
                            var inputs_c = inputs.length;

                            if(inputs_c == 1) {
                                jQuery(inputs).after(errorFormatted);
                            } else if(inputs_c > 1) {
                                // Item can be radio or checkbox
                                inputs.parent().parent().append(errorFormatted);
                            } else {
                            }
            
                        }

                    }
                });
            
                
            }
        
        };


    }();

    cardsvalidate.init();

   
	

	jQuery('#subscribe-email').autofill({

					value: 'enter your email',

					defaultTextColor: '#999999',

					activeTextColor: '#666666'

	});
    
    jQuery('div.froz-carousel-enable').frozCarousel({
        showAmount: 3,
        controls: 'side',
        counter: null,
        loop: false
    })
    
    jQuery(window).load( function(){    
        jQuery('#carousel-gallery').frozCarouselGallery({
            descriptionBlock: 'gallery-description',
            onChange: function(activeLi, newImage, prevBlock){
                activeLi.stop(false, true).fadeTo(800, 1);
                activeLi.siblings().stop(false, true).fadeTo(800, 0.5);
            }
        }, {
            carouselList: 'froz-carousel-gallery-list',
            wrapper: 'froz-carousel-wrapper-2',
            showAmount: 4,
            counter: null,
            loop: false
        }).find('span.description-bg').fadeTo(1, 0.7);
    })
    
    jQuery("a[rel^='prettyPhoto']").prettyPhoto({
	animationSpeed: 'normal', /* fast/slow/normal */
	padding: 30, /* padding for each side of the picture */
	opacity: 0.1, /* Value betwee 0 and 1 */
	showTitle: true, /* true/false */
	allowresize: true, /* true/false */
	counter_separator_label: '/', /* The separator for the gallery counter 1 "of" 2 */
	theme: 'light_rounded', /* light_rounded / dark_rounded / light_square / dark_square / dark_blue_square */
	callback: function(){}
    
    });
    
    
    
 });



