jQuery.noConflict();

String.prototype.endsWith = function(str)
{
    var lastIndex = this.lastIndexOf(str);
    return (lastIndex != -1) && (lastIndex + str.length == this.length);
}

function objectify(arr) {
    var obj = {};
    for(var i = 0; i < arr.length; i++) {
        obj[arr[i]] = arr[i];
    }
    return obj;
}

// Drop down menus
var menu = {
    timeout: 0,
    timeoutValue: 400,
    
    menuOffsetTop: 31,


    
    menus: ['about', 'support', 'library', 'events', 'rentalsleasing'],
    
    _support: [
        { href: 'javascript:(function() { jQuery(\'#live-chat-handle\').trigger(\'click\'); return; })();', innerHTMLen: 'LIVE SUPPORT', innerHTMLfr: 'SOUTENIR' },
        { href: 'calibration-services-%lang', innerHTMLen: 'CALIBRATION SERVICES', innerHTMLfr: 'SERVICE DE GARANTIE ET D\'&#201;TALONNAGE' },
        { href: 'technical-services-%lang', innerHTMLen: 'TECHNICAL SERVICES', innerHTMLfr: 'SERVICES TECHNIQUES' }
    ],
    
    _library: [
        { href: 'product-solution-guides-%lang', innerHTMLen: 'PRODUCT SOLUTION GUIDES', innerHTMLfr: 'GUIDES PRODUIT' },
        { href: 'newsletters-%lang', innerHTMLen: 'NEWSLETTERS', innerHTMLfr: 'BULLETIN &#201;LECTRONIQUE' },
        { href: 'application-notes-%lang', innerHTMLen: 'APPLICATION NOTES', innerHTMLfr: 'NOTE D\'APPLICATION'  }
    ],
    
    _events: [
        { href: 'trade-shows-%lang', innerHTMLen: 'TRADE SHOWS', innerHTMLfr: 'EXPOSITION' },
        { href: 'webinars-%lang', innerHTMLen: 'WEBINARS', innerHTMLfr: 'EV&#201;N&#201;MENTS' },
        { href: 'seminars-%lang', innerHTMLen: 'SEMINARS', innerHTMLfr: 'S&#201;MINAIRES' }
    ],
    
    _rentalsleasing: [
        { href: 'rentals-leasing-%lang', innerHTMLen: 'RENTALS &amp; LEASING', innerHTMLfr: 'LOCATION ET CR&#201;DIT-BAIL' },
        { href: 'used-equipment-%lang', innerHTMLen: 'USED EQUIPMENT', innerHTMLfr: 'MAT&#201;RIEL D\'OCCASION' }
    ],

    _about: [
        { href: 'company-%lang', innerHTMLen: 'COMPANY', innerHTMLfr: 'AU SUJET DE TESTFORCE' },
        { href: 'headlines-%lang', innerHTMLen: 'HEADLINES', innerHTMLfr: 'PRESSE' },
        { href: 'careers-%lang', innerHTMLen: 'CAREERS', innerHTMLfr: 'EMPLOIE' }
    ],
    
    init: function() {
        menu.build();
        menu.bind();
    },
    
    build: function() {
        var langMenu = LANG.replace('-us', ''); // consolidate en and en-us
        
        for (var mId in objectify(this.menus)) { // this is iterative an array
            menuId = '_' + mId; // _about
                                
            var $dd = jQuery('<div />').attr('class', 'menu-dd').attr('data-handle', menuId).css('z-index', 999);
            
            // hack
            if (menuId == '_support' && LANG == 'fr')
                $dd.css('width', '300px');
                    
            var d = menu[menuId];
                                
            for(var i = 0; i < d.length; i++) {
                var item = d[i];
                $dd.append(
                    jQuery('<a href="' + item.href.replace('%lang', langMenu) + '">' + item['innerHTML' + langMenu] + '</a>')
                );
            }
            
            //console.log($dd);      
                  
            jQuery(document.body).append($dd);
        }
    },
    
    bind: function() {
        jQuery('.menu-dd').each(function() {
            var $menu = jQuery(this);
            var handleClass = $menu.attr('data-handle');
            var $handle = jQuery('.' + handleClass);
            
            $handle.mouseover(function() {
                var $handle = jQuery(this);
                $menu.css('display', 'block').css('left', $handle.offset().left + 'px').css('top', ( $handle.offset().top + menu.menuOffsetTop ) + 'px');
                clearTimeout(menu.timeout);
                
                // hide all active menus and deactive hovers
                jQuery('.menu-dd').not($menu).css('display', 'none');
                jQuery('.cms-nav a').not($handle).css('background', 'none').children('img').remove();
            })
            .mouseout(function() {
                var self = this;
                menu.timeout = setTimeout(function() {
                    $menu.css('display', 'none');
                    jQuery(self).css('background', 'none').children('img').remove();
                }, menu.timeoutValue);
            });
            
            $menu.mouseover(function() {
                clearTimeout(menu.timeout);
            })
            .mouseout(function() {
                $handle.trigger('mouseout');
            });
        });
    }
}

jQuery(function() {
    menu.init();
    
    // left nav
    jQuery('#nav-left-root .head')
        .disableTextSelect()
        .click(function() {
            var isArrowDown = jQuery(this).children('div').hasClass('down');
            
            isArrowDown && jQuery(this).children('div').removeClass('down');
            (false == isArrowDown) && jQuery(this).children('div').addClass('down');
            
            var isFilterContainer = jQuery(this).next('.container').is('.filter');
            
            var visibleHeight = isFilterContainer ? 254 : 306;
           
            jQuery(this)
                .next(':visible')
                    .animate({
                        height: 0
                    }, 500, function() {
                        jQuery(this)
                            .css('display', 'none');
                    })
                    .end()
                .next(':hidden')
                    .css('display', 'block')
                    .animate({
                        height: visibleHeight + 'px'
                    }, 500);
        });
    
    // nav hover
    jQuery('.cms-nav a')
        .mouseover(function() {
            // background
            jQuery(this)
                .css('background', 'url(skin/frontend/default/tfskin/images/nav-hover-bg.png) repeat-x')
                .append('<img src="skin/frontend/default/tfskin/images/nav-hover-right.png" style="position: absolute; right: 0; top: 0;"/>');
        })
        .mouseout(function() {
            // for non-menu cases
            var linkClass = jQuery(this).attr('class');
            if (0 == jQuery('.menu-dd[data-handle=' + linkClass + ']').length) // doesn't has menu
                jQuery(this).css('background', 'none').find('img').remove();
        });
    
    // login form
    var focusVal;
    jQuery('form.login').find('input:text, input:password')
    .focus(function() {
        focusVal = jQuery(this).val();
        
        jQuery(this).val('');
    })
    .blur(function() {
        
        if ('' == jQuery(this).val()) {
            jQuery(this).val(focusVal);
            return;
        }
    });
});

function priceFormatUS(price) {
    var pieces = price.split('.');
    
    var cents = pieces[1];
    cents = cents.substr(0, 2);
    
    var dollars = pieces[0];
    
    if (dollars.length > 3) {
        var thousands = dollars.substr(0, dollars.length-3);
        var hundreds = dollars.substr(dollars.length-3);
        
        dollars = thousands + ',' + hundreds;
    }
    
    return dollars + '.' + cents;
}




// contact language
jQuery(function() {
    jQuery('._contact').attr('href', function() {
        return jQuery(this).attr('href') + '-' + LANG;    
    });
});