/*
    utils.js - v1.0
    Utility JS file that handles general external JS loading, sIFR, etc.
    
    Dependencies: MooTools 1.2 Final
                  SiteCore Object
*/
sIFR.fitExactly = true;
var minionProSmBd = {
    src: '/media/swf/sifr-fonts/minion-pro-smbd.swf',
    ratios: [7, 1.58, 8, 1.49, 12, 1.5, 16, 1.46, 18, 1.44, 21, 1.45, 26, 1.43, 29, 1.41, 34, 1.42, 37, 1.4, 40, 1.41, 51, 1.4, 53, 1.39, 54, 1.4, 79, 1.39, 80, 1.38, 85, 1.39, 86, 1.38, 87, 1.39, 88, 1.38, 89, 1.39, 91, 1.38, 92, 1.39, 1.38]
};
//sifr-debug.js must be included for the following. Please refer to sIFR 3.0 documentation for more information on functionality.
//sIFR.debug.ratios({src: '/media/swf/sifr-fonts/minion-pro-smbd.swf', selector: 'h1.sifr-header'});

sIFR.activate(minionProSmBd);

sIFR.replace(minionProSmBd, {selector: '#banner h1.sifr-header',
    wmode: 'transparent',
    css: {
        '.sIFR-root': {
            'color': '#FFFFFF',
            'font-size': '24px',
            'leading': '-5'
        }
    }
});
sIFR.replace(minionProSmBd, {selector: '#content h1.sifr-header-dark',
    wmode: 'transparent',
    css: {
        '.sIFR-root': {
            'color': '#000000',
            'font-size': '24px',
            'leading': '-7'
        }
    },
    tuneHeight: -5
});
sIFR.replace(minionProSmBd, {selector: '#content h1.sifr-header-light',
    wmode: 'transparent',
    css: {
        '.sIFR-root': {
            'color': '#FFFFFF',
            'font-size': '24px',
            'leading': '-7'
        }
    },
    tuneHeight: -5
});
sIFR.replace(minionProSmBd, {selector: '#content h2.sifr-header',
    wmode: 'transparent',
    css: {
        '.sIFR-root': {
            'color': '#362F2D'
        }
    }
});
sIFR.replace(minionProSmBd, {selector: '#content h3.sifr-header',
    wmode: 'transparent',
    css: {
        '.sIFR-root': {
            'color': '#362F2D'
        }
}
});
sIFR.replace(minionProSmBd, {selector: '#content h1.sifr-header-home',
    wmode: 'transparent',
    css: {
        '.sIFR-root': {
            'color': '#FFFFFF',
            'font-size': '30px',
            'leading': '-5'
        }
}
});
sIFR.replace(minionProSmBd, {selector: '#content span.sifr-pullquote',
    wmode: 'transparent',
    css: {
        '.sIFR-root': {
            'color': '#926B1E',
            'font-size': '18px',
            'leading': '-1'
        }
}
});
if(document.getElementsByTagName('body')[0])
    $(document.getElementsByTagName('body')[0]).addClass('raejs-active');
else
    $(document.documentElement).addClass('raejs-active');

var raeCore;
function getSiteCore() {
    if(!raeCore) {
        raeCore = new RAECore($('content-container'), $('banner-container'), $('content'), $('lightbox'), $('lightbox-content'), $('loader'), 9);
    }
    return raeCore;
}

window.addEvent('domready', function() {
    getSiteCore();

    //Primary nav highlighting
    var tempLocation = window.location.href.split('/en/')[1];
    var navType = (tempLocation.indexOf('/') == -1) ? '.': '/';
    var currentSection = tempLocation.substr(0, tempLocation.indexOf(navType));
    switch(currentSection) {
        case 'index':
            $('home-nav-link').addClass('home-nav-link-active');
            break;
        case 'the-laureates':
            $('laureates-nav-link').addClass('laureates-nav-link-active');
            break;
        case 'about-the-awards':
            $('awards-nav-link').addClass('awards-nav-link-active');
            break;
        case 'gallery':
            $('gallery-nav-link').addClass('gallery-nav-link-active');
            break;
    }

    //Control new window functionality on external and download links
    $(document.body).addEvent('click', function(e){
        var target = $(e.target);
        if(target.get('tag') == 'a'){
            if(target.hasClass('new-window')){
                e.preventDefault();
                var rel = target.get('rel');
                switch (rel) {
                    case 'window-ext':
                        raeCore.openExternalLink(target);
                    break;
                    case 'window-blog':
                        new Request.HTML({
                            url: '/en/includes/nb-exit.jsp',
                            method: 'get',
                            data: 'destinationUrl='+target.get('href'),
                            onComplete:function(responseTree, responseElements, responseHTML, responseJavaScript) {
                                raeCore.showLightbox(responseTree);
                                
                                $('continue-link').addEvent('click', function(e) {
                                    raeCore.openExternalLink(this, null, null, false);
                                    e.preventDefault();
                                });
                                
                                $('stop-link').addEvent('click', function(e) {
                                    raeCore.hideLightbox();
                                    e.preventDefault();
                                });
                                
                            }.bind(this)
                        }).get();
                    break;
                    case 'window-laureate-itunes':
                        raeCore.addOmnitureEvent('event19');
                        raeCore.openExternalLink(target, 'events', 'event19');
                    break;
                    case 'window-download':
                        raeCore.openDownloadLink(target);
                    break;
                    case 'window-pressroom-download':
                        s.prop7 = target.href;
                        raeCore.openDownloadLink(target, 'prop7', 'None');
                    break;
                    case 'window-pressroom-pressrelease-download':
                        s.prop7 = target.href;
                        raeCore.addOmnitureEvent('event27');
                        raeCore.openDownloadLink(target, 'prop7,events', 'event27');
                    break;
                    case 'window-pressroom-presskit-download':
                        s.prop7 = target.href;
                        raeCore.addOmnitureEvent('event3');
                        raeCore.openDownloadLink(target, 'prop7,events', 'event3');
                    break;
                    case 'window-pressroom-image-download':
                        s.prop7 = target.href;
                        raeCore.addOmnitureEvent('event6');
                        raeCore.openDownloadLink(target, 'prop7,events', 'event6');
                    break;
                    case 'window-screensaver-download':
                        s.prop7 = target.href;
                        raeCore.addOmnitureEvent('event14');
                        raeCore.openDownloadLink(target, 'prop7,events', 'event14');
                    break;
                }
            }
            if(target.hasClass('custom-link')){
                e.preventDefault();
                var rel = target.get('rel');
                switch (rel) {
                    case 'custom-contact-email':
                        raeCore.addOmnitureEvent('event10');
                        raeCore.customClick(target, 'Contact Us E-mail Click', 'events', 'event10');
                        window.location = target;
                    break;
                    case 'custom-laureate-contact-email':
                        raeCore.addOmnitureEvent('event21');
                        raeCore.customClick(target, 'Laureate Contact E-mail Click', 'events', 'event21');
                        window.location = target;
                    break;
                }
            }
        }
    });
    
    if($('search')) {
        var searchField = $('search-query');
        var searchFieldDefault = $('search-default').get('html');
        var searchFieldSelector = ($(document.body).getProperty('class') != '' ? 'body.'+$(document.body).getProperty('class')+' ' : '') + '#search';
        
         searchField.store('fx', new Fx.Morph(searchField, {
            duration: 400,
            link: 'cancel'
        }));
        if(Browser.Platform.mac) {
            if(Browser.Engine.webkit) {
                searchField.setProperty('title', searchField.getProperty('title')+' [ctrl-alt-f]');
            } else if(Browser.Engine.gecko) {
                searchField.setProperty('title', searchField.getProperty('title')+' [ctrl-f]');
            }
        } else if(Browser.Platform.win) {
            if(Browser.Engine.gecko) {
                searchField.setProperty('title', searchField.getProperty('title')+' [alt-shift-f]');
            } else if(Browser.Engine.trident || Browser.Engine.webkit) {
                searchField.setProperty('title', searchField.getProperty('title')+' [alt-f]');
            }
        }

        window.addEvent('keydown', function(e) {
            if(Browser.Platform.mac) {
                if(Browser.Engine.webkit) {
                    if(e.key == 'f' && e.alt && e.control) {
                        searchField.fireEvent('mouseenter');
                        searchField.focus();
                    }
                } else if(Browser.Engine.gecko) {
                    if(e.key == 'f' && e.control) {
                        searchField.fireEvent('mouseenter');
                        searchField.focus();
                    }
                }
            } else if(Browser.Platform.win) {
                if (Browser.Engine.gecko) {
                    if(e.key == 'f' && e.alt && e.shift) {
                        searchField.fireEvent('mouseenter');
                        searchField.focus();
                    }
                } else if(Browser.Engine.trident || Browser.Engine.webkit) {
                    if(e.key == 'f' && e.alt) {
                        searchField.fireEvent('mouseenter');
                        searchField.focus();
                    }
                }
            }
        });
        
        searchField.value = searchFieldDefault;
        searchField.addEvents({
            'mouseenter':function() {
                this.retrieve('fx').start(searchFieldSelector+' .search-on');
            },
            'mouseleave':function() {
                if(!this.hasClass('field-focus'))
                    this.retrieve('fx').start(searchFieldSelector+' .search-off');
            },
            'focus':function() {
                this.addClass('field-focus');
                if(searchFieldDefault == this.value.trim()) this.value = "";
            },
            'blur':function() {
                this.removeClass('field-focus');
                this.fireEvent('mouseleave');
                if(this.value.trim() == "") this.value = searchFieldDefault;
            }
        });
    }

    //Adding RAE Screensaver Accept Button
    if($('screensaver-download')) {
        var acceptScreensaver = $('download-screensaver-check');
        var downloadScreensaverlink = $('download-screensaver-link');
        acceptScreensaver.addEvents({
            'click':function() {
            if (this.getProperty('checked') == true) 
            $('download-screensaver-link').setStyle('visibility', 'visible');    
            else 
            $('download-screensaver-link').setStyle('visibility', 'hidden');
            }
        })
    }
    
    if($('secondary-nav')) {
        var secondaryNav = $('secondary-nav');
        var secondaryNavItems = secondaryNav.getChildren();
        var currentLocation = RAE.secondaryNavSelection || raeCore.currentPathName;
        
        secondaryNavItems.each(function(secondaryNavItem) {
            var subNav = secondaryNavItem.getElement('ul');
            if(subNav != null) {
                var subNavItems = subNav.getChildren();
                var inSubNav = false;
                secondaryNavItem.getElement('a').set('href', subNavItems[0].getElement('a').href);
                secondaryNavItem.getElement('a').addEvents({
                    'click':function() {
                       //May need to fire hit to Omniture
                    }
                });
                subNavItems.each(function(subNavItem) {
                    if(subNavItem.getElement('a').href.contains(currentLocation)) {
                        subNavItem.addClass('current');
                        inSubNav = true;
                    }
                });
                if(inSubNav) {
                    secondaryNavItem.addClass('current');
                    subNav.setStyle('display', 'block');
                }
            } else {
                if(secondaryNavItem.getElement('a').href.contains(currentLocation))
                    secondaryNavItem.addClass('current');
            }
        });
    }

    $$('.print-link').each(function(printLink) {
        printLink.addEvent('click', function() {
            raeCore.addOmnitureEvent('event40');

            raeCore.customClick(true, 'Print Page', 'events', 'event40');
            window.print();
            return false;
        });
    });

    var mailLinks = $$('.mail-link');
    if(mailLinks.length > 0) {
        new Asset.javascript('/en/scripts/raesendtofriend.js', {
            onload:function() {
                var staf = new RAESendToFriend('/en/includes/send-to-friend.php', raeCore);
                $$('.mail-link').each(function(mailLink) {
                    mailLink.addEvent('click', function() {
                        raeCore.addOmnitureEvent('event11');
                        raeCore.customClick(mailLink, 'Share With a Friend - Initiate', 'events', 'event11');

                        staf.showForm();
                        return false;
                    });
                });
            }
        });
    }

    if($('nav-molecule')) {        
        $$('#nav-molecule ul a').each(function(navItem) {
            if(navItem.href.contains(raeCore.currentPathName)) navItem.addClass('current');
        });
    }
});

window.addEvent('load', function() {
    getSiteCore();

    if($('laureate-info')) {
        new Asset.javascript('/en/scripts/raeinfobar.js', {
            onload:function() {
                var raeInfoBar = new RAEInfoBar($('laureate-info'), RAE.infoPanelStates, raeCore);
            }
        });
    }
    if($('laureate-gallery') && $('laureate-gallery-info')) {
        new Asset.javascript('/en/scripts/raelaureategallery.js', {
            onload:function() {
                var raeLaueateGallery = new RAELaureateGallery($('laureate-gallery-info').get('html'), $('laureate-gallery-images'), $('laureate-gallery-nav'), $('laureate-gallery-controls'), $('browse-container'), $('browse-content'), $('total-num'), $('current-num'), $('zoom-icon'), raeCore);
                $('browse-close').addEvent('click', function() {
                    raeCore.addOmnitureEvent('event18');
                    raeCore.customClick(true, 'Laureate - Gallery Detail View Close', 'events', 'event18');

                    raeLaueateGallery.closeImageBrowser();
                    return false;
                });
                $('previous-link').addEvent('click', function() {
                    if(raeLaueateGallery.browseIdle)
                        raeLaueateGallery.updateImageBrowser('previous');
                    return false;
                });
                $('next-link').addEvent('click', function() {
                    if(raeLaueateGallery.browseIdle)
                        raeLaueateGallery.updateImageBrowser('next');
                    return false;
                });
            }
        });
    }    
    /* Usage: 
        <div class="flash-media class-for-dimensions">
            <span class="media-path">/path/to/video.flv</span>
            <span class="image-path">/path/to/image.jpg</span></div>
        </div>
    */
    if(Browser.Plugins.Flash.version  >= raeCore.getSupportedFlashVersion()) {
        $$('.flash-media').each(function(mediaContainer) {
            var containerSize = mediaContainer.getSize();
            var mediaPlayerSwf = '/media/swf/rae_video_player.swf';
            mediaPlayerSwf = mediaPlayerSwf+'?raernd='+$time();
            var mediaSwiff = new Swiff(mediaPlayerSwf, {
                container: mediaContainer,
                width: containerSize.x,
                height: containerSize.y,
                params: {
                    quality: 'high',
                    allowScriptAccess: 'always',
                    swLiveConnect: 'true',
                    scale: 'noscale',
                    salign:'tl',
                    allowFullScreen: 'true'
                },
                vars: {
                    videoSize: (containerSize.x > 620) ? 'large' : 'small',
                    videoFile: mediaContainer.getElement('.media-path').get('text'),
                    xmlPath: (mediaContainer.getElement('.xml-path') != null) ? mediaContainer.getElement('.xml-path').get('text') : '',
                    imageFile: mediaContainer.getElement('.image-path').get('text')
                }
            });
            mediaContainer.store('swiffObj', mediaSwiff);
        });
    } else {
        $$('.flash-media-install-message').each(function(installMessageCont) {
            installMessageCont.setStyle('display', 'block');
        });
    }

    var skinnableSelects = Browser.Platform.ipod ? null : $$('select.skinnable');
    
    if(Browser.Platform.ipod) {
        skinnableSelects.each(function(skinnableSelect) {
            skinnableSelect.setStyle('visibility', 'visible');
        });
    }
    
    if($defined(skinnableSelects)) {
        new Asset.javascript('/en/scripts/skinnedselectbox.js', {
            onload:function() {
                var skinnedSelectBox = new SkinnedSelectBox(skinnableSelects, $('content'));
            }
        });
    }
});

/* Media Tracking */
function trackMedia(mediaName, status, currentTime, totalTime) {
    switch(status) {
        case 'start':
        s.Media.open(mediaName, totalTime, "Flash Media Player");
        break;
        case 'play':
        s.Media.play(mediaName, 0);
        break;
        case 'finish':
        s.Media.stop(mediaName, currentTime);
        s.Media.close(mediaName);
        break;
        case 'stop':
        s.Media.stop(mediaName, currentTime);
        break;
    }
}

if(Browser.Engine.webkit) {
    //Webkit browser is strict on parse, use text/html
    Request.HTML.implement({
     processHTML: function(text){
         var match = text.match(/<body[^>]*>([\s\S]*?)<\/body>/i);
         text = (match) ? match[1] : text;
        
         var container = new Element('div');
        
         return $try(function(){
         var root = '<root>' + text + '</root>', doc;
         if (Browser.Engine.trident){
             doc = new ActiveXObject('Microsoft.XMLDOM');
             doc.async = false;
             doc.loadXML(root);
         } else {
             doc = new DOMParser().parseFromString(root, 'text/html');
         }
         root = doc.getElementsByTagName('root')[0];
         for (var i = 0, k = root.childNodes.length; i < k; i++){
             var child = Element.clone(root.childNodes[i], true, true);
             if (child) container.grab(child);
         }
         return container;
         }) || container.set('html', text);
     }
    });
}
