﻿
var FiatCoUk = FiatCoUk || {};


(function($) {
    FiatCoUk.FontManager = (function() {
        var self = {},
            fontMatrix = {
                navigation: {
                    primaryFont: {
                        selectors: '#fiatNav .primaryNavLink, #fiatNav .modelOverlay .modelActions > li a, #fiatNav .modelOverlay  .modelEditions a, #fiatNav .modelOverlay  .modelEditions span.title, #modelNav li span, #tertiaryNav a span',
                        options: {
                            hover: true,
                            fontFamily: 'Frutiger LT Com 67 Bold Cn'
                            //textShadow: '0px 0px #999'
                        }
                    },
                    secondaryNavFont: {
                        selectors: '#fiatNav .ancillaryLinks a, #fiatNav .subNav .secondaryNavLink, #fiatNav .sectionTitle',
                        options: {
                            hover: true,
                            fontFamily: 'ITC Lubalin Graph'
                        }
                    },
                    modelName: {
                        selectors: '#fiatNav .subNav .modelView, #fiatNav .subNav .modelView .modelName',
                        options: {
                            hover: true,
                            fontFamily: 'ITC Lubalin Graph'
                        }
                    },
                    modelFromPrice: {
                        selectors: '#fiatNav .subNav .modelView .modelFromPrice',
                        options: {
                            fontFamily: 'ITC Lubalin Graph'
                        }
                    }
                },
                footer: {
                    mainHeading: {
                        selectors: '#fiatFooter h2',
                        options: {
                            hover: true,
                            fontFamily: 'ITC Lubalin Graph'
                        }
                    },
                    newsHeading: {
                        selectors: '#fiatFooter h3, #fiatFooter h4',
                        options: {
                            hover: true,
                            fontFamily: 'ITC Lubalin Graph'
                        }
                    },
                    button: {
                        selectors: '#fiatFooter .buttonCta',
                        options: {
                            hover: true,
                            fontFamily: 'ITC Lubalin Graph'
                        }
                    },
                    pageTerminator: {
                        selectors: '#fiatPageTerminator ul a, #fiatPageTerminator span',
                        options: {
                            hover: true,
                            fontFamily: 'Frutiger LT Com 67 Bold Cn'
                        }
                    }
                },
                main: {
                    exsIfr: {
                        selectors: '#mainContent h1:not(".nocufon"), #mainContent h2:not(".nocufon"), #mainContent h3:not(".nocufon"), #mainContent h4:not(".nocufon")',
                        options: {
                            hover: true,
                            fontFamily: 'Frutiger LT Com 67 Bold Cn'
                        }
                    },
                    airTechnologies: {
                        selectors: '#mainContent #airTechnologies h1, #mainContent #airTechnologies h2, #mainContent #airTechnologies h3',
                        options: {
                            hover: true,
                            fontFamily: 'ITC Lubalin Graph'
                        }
                    },
                    ssop: {
                        selectors: '#mainContent #ssop h1, #mainContent #ssop h2, #mainContent #ssop h3, #mainContent #ssop p#introductionCopy',
                        options: {
                            hover: true,
                            fontFamily: 'ITC Lubalin Graph'
                        }
                    },
                    offersLanding: {
                        selectors: '#mainContent #offersLanding h1, #mainContent #offersLanding h2, #mainContent #offersLanding h3, #mainContent #offersLanding p#introductionCopy',
                        options: {
                            hover: true,
                            fontFamily: 'ITC Lubalin Graph'
                        }
                    },
                    dialog: {
                        headings: {
                            selectors: '.ui-dialog h2,.ui-dialog h3, .ui-dialog-titlebar-close',
                            options: {
                                hover: true,
                                fontFamily: 'ITC Lubalin Graph'
                            }
                        }
                    },
                    dealerLocator: {
                        headers: {
                            selectors: '#mainContent #dealaerLocatorMaster h1, #mainContent #dealaerLocatorMaster h2, #mainContent #dealaerLocatorMaster h3,',
                            options: {
                                hover: true,
                                fontFamily: 'ITC Lubalin Graph'
                            }
                        },
                        dealerPanel: {
                        selectors: '.dealerPanel .PrefDealer, .dealerPanel .DealerName',
                            options: {
                                hover: true,
                                fontFamily: 'ITC Lubalin Graph'
                            }
                        },
                        buttons: {
                            selectors: 'a.button, a.buttonSmall, a.buttonCta, a.buttonSmallCta, a.buttonColor, a.buttonSmallColor',
                            options: {
                                hover: true,
                                fontfamily: 'ITC Lubalin Graph'
                            }
                        }
                    }
                }
            };

        Cufon.set('ignoreClass', 'nocufon');

        function Cufonise(action, groupName, obj) {
            var action = action || 'replace',
                obj = obj || fontMatrix,
                found = false;

            if (action.toLowerCase() === 'refresh' && typeof groupName === 'undefined') {
                Cufon.refresh();
                return;
            }

            for (var propName in obj) {
                if (obj.hasOwnProperty(propName)) {
                    if (typeof obj[propName] === 'object') {
                        if (propName === groupName || !groupName) {
                            //it's the group I'm looking for
                            fontAction(action, obj[propName]);
                        } else {
                            //it's another group
                            Cufonise(action, groupName, obj[propName]);
                        }
                    }
                }
            }

            function fontAction(action, obj) {
                for (var propName in obj) {
                    if (obj.hasOwnProperty(propName)) {
                        if (typeof obj[propName] === 'object' && propName !== 'options') {
                            fontAction(action, obj[propName]);
                        } else if (propName === 'selectors') {
                            if (action === 'replace') {
                                Cufon.replace(obj['selectors'], obj['options']);
                            } else {
                                Cufon.refresh(obj['selectors']);
                            }
                        }
                    }
                }
            }
        }

        Cufonise();
        self.refresh = function(fontItem) {
            Cufonise('refresh', fontItem);
        };

        return self;

    } ());

    FiatCoUk.NavManager = (function() {
        var self = {},
            initiated = false;
        //add selector cache variables here
        //eg. $selector

        //add internal functions here
        function open(el) {
            $('.subNavPanel').hide(); //if others are open close them
            if ($(el).hasClass('showroom')) { //Pause flash for Showroom mega nav
                if ($swf && $swf.pauseVideo) {
                    $swf.pauseVideo();
                }
            }
            if (el.find('.subNavPanel').length > 0) {
                var thirdPartyUrl = $('#iframeProxy').attr('src') || false;
                if (thirdPartyUrl && thirdPartyUrl.indexOf('#') !== -1) {
                    thirdPartyUrl = thirdPartyUrl.substring(0, thirdPartyUrl.indexOf('#'));
                }
                $('#iframeProxy').attr('src', thirdPartyUrl + '#open');
                if (isIE6()) {
                    el.find('.subNavPanel').show().end().addClass('open');
                } else {
                    el.find('.subNavPanel').slideDown(250).end().addClass('open');
                }

            } else {
                el.addClass('noDropDown');
            }
        };
        function close(el) {
            if ($(el).hasClass('showroom')) {
                if ($swf && $swf.resumeVideo) {
                    $swf.resumeVideo();
                }
            }
            var thirdPartyUrl = $('#iframeProxy').attr('src') || false;
            if (thirdPartyUrl && thirdPartyUrl.indexOf('#') !== -1) {
                thirdPartyUrl = thirdPartyUrl.substring(0, thirdPartyUrl.indexOf('#'));
            }
            $('#iframeProxy').attr('src', thirdPartyUrl + '#close');
            el.removeClass('open');
            if (jQuery.support.leadingWhitespace) { //IE6-8 do not fade nicely so they don't get the fade
                $(el).find('.subNavPanel').fadeOut('fast');
            } else {
                $(el).find('.subNavPanel').hide();
            }
        };
        function isIE6() {
            if ($.browser.msie && parseInt($.browser.version) < 7) { return true; }
            return false;
        };

        self.init = function() {
            if (!initiated) {
                initiated = true;
                //selector cache			
                $lvl1NavItem = $('#fiatNav .primaryNavLink').closest('li');
                $modelHover = $('#fiatNav .model');
                $specialEditions = $('#fiatNav .modelEditions a');
                $modelNavSE = $('#modelNav .special-editions');
                $footerNav = $('#fiatPageTerminator li');
                $swf = $('#fiat-main-flash')[0];


                //explicitly set the width of the navItems for IE6
                if (jQuery.support.cssFloat == false) {
                    jQuery('.primaryNavAnchor').each(function() {
                        jQuery(this).width(jQuery(this).width());
                    });
                    jQuery('.level1, .level1 > a').each(function() {
                        jQuery(this).width(jQuery(this).width());
                    });
                }

                /*
                // NAV OPEN ON LOAD FOR DEVELOPMENT
                $('#fiatNav .showroom').find('.subNavPanel').show().end().addClass('open');
                $('#model500 .modelOverlay').css('display', 'block');
                $('#model500').addClass('hover');
                */
                if (isIE6()) {
                    $lvl1NavItem.hover(function() {
                        open($(this));
                    },
					function() {
					    close($(this));
					});
                } else {
                    /* 
                    The Showroom tab gets a slight delay in closing to help
                    // users with less precise mouse movement.
                    */
                    var hoverIntentConfig = {
                        over: function() { open($(this)); },
                        timeout: 0, // keep this timeout below 250ms
                        out: function() { close($(this)); }
                    };
                    $lvl1NavItem.hoverIntent(hoverIntentConfig);
                }


                if (isIE6()) {
                    $modelHover.hover(function() {
                        $(this).addClass('hover');
                    },
					function() {
					    $(this).removeClass('hover');
					});

                    $modelNavSE.hover(function() {
                        $(this).addClass('special-editions-hover');
                    },
					function() {
					    $(this).removeClass('special-editions-hover');
					});
					
					$footerNav.hover(function() {
                        $(this).addClass('hover');
                    },
					function() {
					    $(this).removeClass('hover');
					});
                }


                $specialEditions.hover(function() {
                    modelNameOriginal = $(this).closest('.model').find('.modelName:first').text();
                    modelPriceOriginal = $(this).closest('.model').find('.modelFromPrice:first').text();
                    modelNameHover = $(this).children('.modelName').text();
                    modelNameHoverClass = 'se-' + modelNameHover.replace(/\s+/g, '').toLowerCase();
                    modelNameHoverClass = modelNameHoverClass.replace('ò', 'o');
                    modelPriceHover = $(this).children('.modelFromPrice').text();
                    $(this).closest('.model').find('.modelName:first').text(modelNameHover);
                    $(this).closest('.model').find('.modelFromPrice:first').text(modelPriceHover);
                    $(this).closest('.model').find('a').filter(':first').addClass(modelNameHoverClass);
                    FiatCoUk.FontManager.refresh('modelName');
                    FiatCoUk.FontManager.refresh('modelFromPrice');
                }, function() {
                    $(this).closest('.model').find('.modelName:first').text(modelNameOriginal);
                    $(this).closest('.model').find('.modelFromPrice:first').text(modelPriceOriginal);
                    $(this).closest('.model').find('a').filter(':first').removeClass(modelNameHoverClass);
                    FiatCoUk.FontManager.refresh('modelName');
                    FiatCoUk.FontManager.refresh('modelFromPrice');
                });

                //$('#modelNav a').bind('click', self.handleDeepLink);


            }
        };
        self.showHideModelMenu = function() {
            var deeplink;
            deeplink = window.location.hash;
            if (deeplink == '#showroom' || deeplink == '#showroom/home' || deeplink == '#showroom/configurator/configurator_home') {
                $('#modelsNavContainer').show();
                $('#modelNavContainer').hide();
            } else {
                $('#modelsNavContainer').hide();
                $('#modelNavContainer').show();
            }
        };
        //add externally available methods here.
        self.handleDeepLink = function(e) {
            var href,
					deepLink;
            $href = $(this).attr('href');
            deepLink = $href.substr($href.indexOf('#'));
            if (deepLink.length > 1) {
                e.preventDefault();
                $swf.handleDeepLink(deepLink);
            }
        };
        return self;
    } ());

    FiatCoUk.AnalyticsManager = (function() {
        self.trackGlobalLink = function(hierarchy, linkName, obj) {
            linkName = self.formatString(linkName);
            s.tl(obj, 'o', hierarchy + linkName);
        };
        self.formatString = function(orginalString) {
            var formattedString = '';
            formattedString = orginalString.replace(/\s+/g, '_').toLowerCase();
            return formattedString;
        };
        self.init = function() {
            $('#fiatNav .level1 > a[data-linkText]').live('click', function(e) {
                var linkName = $(this).attr('data-linkText');
                var hierarchy = 'nav > ';
                self.trackGlobalLink(hierarchy, linkName, $(this)[0]);
            })
            $('#fiatNav .navTout > a[data-linkText]').live('click', function(e) {
                var linkName = $(this).attr('data-linkText');
                var hierarchy = 'nav > tout > ';
                self.trackGlobalLink(hierarchy, linkName, $(this)[0]);
            })
            $('#fiatNav .modelActions a[data-linkText]').live('click', function(e) {
                var model = $(this).closest('.model').find('a:first').attr('data-linkText');
                model = self.formatString(model);
                var linkName = $(this).attr('data-linkText');
                var hierarchy = 'home > ' + model + ' > ';
                self.trackGlobalLink(hierarchy, linkName, $(this)[0]);
            })
            $('#fiatNav .model > a[data-linkText], #modelNav a[data-linkText]').live('click', function(e) {
                var linkName = $(this).attr('data-linkText');
                var hierarchy = 'home > ';
                self.trackGlobalLink(hierarchy, linkName, $(this)[0]);
            })
            $('#fiatFooter a[data-linkText]').live('click', function(e) {
                console.log('AnalyticsManager');
                var linkName = $(this).attr('data-linkText');
                var hierarchy = 'home > ';
                self.trackGlobalLink(hierarchy, linkName, $(this[0]));
            })
            $('#followFiat a[data-linkText]').live('click', function(e) {
                var linkName = $(this).attr('data-linkText');
                var hierarchy = 'follow > ';
                self.trackGlobalLink(hierarchy, linkName, $(this)[0]);
            })
            $('#ssop a[data-model-name]').live('click', function(e) {
                var modelName = $(this).attr('data-model-name');
                modelName = self.formatString(modelName);
                var linkName = $(this).text();
                var carType = $('input[name="carType"]').val();
                var hierarchy = 'search_landing > '+ carType +' > ' + modelName +' > ';
                self.trackGlobalLink(hierarchy, linkName, $(this)[0]);
            })
            $('#offersLanding a[data-model-name]').live('click', function(e) {
                var modelName = $(this).attr('data-model-name');
                modelName = self.formatString(modelName);
                var hierarchy = 'showroom > offers > ' + modelName +' > ';
                self.trackGlobalLink(hierarchy, 'view_offers', $(this)[0]);
            })
            $('#punto-gbt a[data-linkText]').live('click', function(e) {
                var linkName = $(this).attr('data-linkText');
                var hierarchy = 'showroom > punto_gbt > ';
                self.trackGlobalLink(hierarchy, linkName, $(this)[0]);
            })
        };
        return self;
    } ());
} (jQuery));

jQuery(document).ready(function() {
    FiatCoUk.NavManager.init();
	FiatCoUk.AnalyticsManager.init();

}); 
