if(window.MRT===undefined){var MRT={}}MRT.fsm_state=function(d,f,g){var h,transitions={},entry_actions,exit_actions;function raise_error(a){g(['State:',d].concat(a))}function call_actions(a,b,c){if(b!==undefined){$.each(b,function(i,e){debug.info(a+' action: '+e);f[e].apply(null,c||[])})}}h={entry:function(a){if(entry_actions!==undefined){raise_error(['Entry actions ALREADY DEFINED'])}entry_actions=a.constructor===Array?a:[a];return h},exiting:function(a){if(entry_actions!==undefined){raise_error(['Exit actions ALREADY DEFINED'])}entry_actions=a.constructor===Array?a:[a];return h},transition:function(a,b){if(transitions[a]!==undefined){raise_error('Transition:',a,'ALREADY DEFINED')}transitions[a]=b;return h},actions:function(){return(entry_actions||[]).concat(exit_actions||[])},transition_states:function(){return $.map(transitions,function(v,k){return v})},enter:function(a){call_actions('Entry',entry_actions,a)},exit:function(a){call_actions('Exit',exit_actions,a)},state_from_trigger:function(a){return transitions[a]}};return h};MRT.fsm=function(d,e){var f,states={},state;function raise_error(a){throw['FSM:'].concat(a).join(' ');}function check_undefined_state(a){if(states[a]!==undefined){raise_error([d,'State:',a,'ALREADY DEFINED'])}}function get_actions(){return $.map(states,function(v,k){return v.actions()})}function get_transition_states(){return $.map(states,function(v,k){return v.transition_states()})}function check_methods_exist_for_actions(){var i,actions=get_actions(),length=actions.length,action;for(i=0;i<length;i++){action=actions[i];if(e[action]===undefined||e[action].constructor!==Function){raise_error([d,'Action method:',action,'NOT DEFINED'])}}}function check_states_exist_for_transitions(){var i,transition_states=get_transition_states(),length=transition_states.length,transition_state;for(i=0;i<length;i++){transition_state=transition_states[i];if(states[transition_state]===undefined){raise_error([d,'Transition state:',transition_state,'NOT DEFINED'])}}}f={define:function(a){check_undefined_state(a);states[a]=MRT.fsm_state(a,e,raise_error);if(state===undefined){state=states[a]}return states[a]},begin:function(){check_methods_exist_for_actions();check_states_exist_for_transitions();state.enter()},trigger:function(a,b){a=a.constructor===Object?a.data.trigger:a;var c=state.state_from_trigger(a);debug.info(d+' Trigger: '+a);if(c){debug.info(d+' State: '+c);state.exit(b);state=states[c];state.enter(b)}else{debug.warn(d+' Unexpected trigger: '+a)}}};return f};


var ISPY={};ISPY.load_background_image=function(a,b){var c=$('<img />');c.bind('load readystatechange',b);c.attr('src',a.css('background-image').replace(/url\(|\)|"|'/g,''))};ISPY.items=(function(){var d={},$panel,$grid,$li,items=[],backgrounds=[],loaded_count=0,alert_when_loaded=false;function trigger_loaded_handler(){$(d).triggerHandler('loaded')}function is_loaded(){return loaded_count>=items.length}function loaded_handler(){loaded_count++;if(is_loaded()&&alert_when_loaded){alert_when_loaded=false;trigger_loaded_handler()}}function preload_backgrounds(c){c=[$panel,$grid];$.each(c,function(a,b){ISPY.load_background_image(b,loaded_handler)})}function panel_revealed_handler(){$(d).triggerHandler('panel_revealed')}function grid_revealed_handler(){$(d).triggerHandler('grid_revealed')}function items_revealed_handler(){$(d).triggerHandler('items_revealed')}function deactivate(){$.each(items,function(a,b){b.deactivate()})}function reference_elements(){$panel=$('#box_items');$grid=$panel.find('ul');$li=$grid.find('li')}function correct_ie8_overflow_bleed(){if($.browser.msie&&$.browser.version==='8.0'){$li.css({marginBottom:2});$panel.find('a').css({height:139})}}function create_items(){var c;$li.each(function(a,b){c=a===$li.length-1?items_revealed_handler:undefined;items.push(ISPY.item(a,b,loaded_handler,c))})}$.extend(d,{initialise:function(){reference_elements();correct_ie8_overflow_bleed();preload_backgrounds();create_items()},reveal_panel:function(){$panel.fadeIn('slow',panel_revealed_handler)},reveal_grid:function(){$grid.fadeIn('slow',grid_revealed_handler)},reveal_items:function(){$.each(items,function(a,b){b.reveal()})},activate:function(){$.each(items,function(a,b){b.activate()})},load:function(){if(is_loaded()){trigger_loaded_handler()}else{alert_when_loaded=true}}});return d}());ISPY.item=function(c,d,f,g){var h,$img,$hover,$link,img,active,hovering;function reference_elements(){h=$(d);$img=h.find('img');$link=h.find('a');img=$img[0]}function is_touch_device(){try{document.createEvent('TouchEvent');return true}catch(e){return false}}function draw_hover_image(){$hover=$('<img />').addClass('hover').attr({src:$img.attr('src')}).appendTo($link)}function load_handler(){f();draw_hover_image()}function add_load_listener(){if(img.complete||img.readyState==='complete'){load_handler()}else{$img.bind('load readystatechange',load_handler)}}function click_handler(a){if(!active){a.preventDefault()}else{out_handler()}}function add_click_listener(){$link.click(click_handler)}function in_handler(){hovering=true;if(active){if($hover.css('display')==='none'){$hover.show().css({opacity:0})}var a=$hover.css('opacity');var b=400*(1-a);$hover.stop(true,false).animate({opacity:1},b)}}function out_handler(){hovering=false;if(active){var a=$hover.css('opacity');var b=400*a;$hover.stop(true,false).animate({opacity:0},b)}}function add_hover_listener(){if(!is_touch_device()){$link.hover(in_handler,out_handler)}}function add_listeners(){add_load_listener();add_click_listener();add_hover_listener()}function revealed_handler(){if(g!==undefined){g()}}(function initialise(){reference_elements();add_listeners()}());return{reveal:function(){$img.show().css({opacity:0}).delay(c*100).animate({opacity:1},500,revealed_handler)},activate:function(){active=true;$link.css({cursor:'pointer'});if(hovering){in_handler()}},deactivate:function(){$link.css({cursor:'default'});active=false}}};ISPY.splash=(function(){var c={},$splash,$lines,$link,$link_img,$images,loaded_count,link_active,timeout_id;function reference_elements(){$splash=$('#box_splash');$lines=$splash.find('> img');$link=$splash.find('a');$link_img=$link.find('img');$images=$lines.add($link_img)}function trigger_link_clicked(){if(link_active){link_active=false;$(c).triggerHandler('link_clicked')}}function timeout_handler(){window.clearInterval(timeout_id);trigger_link_clicked()}function click_handler(a){a.preventDefault();trigger_link_clicked()}function add_click_listener(){$link.click(click_handler)}function images_loaded_handler(){$(c).triggerHandler('loaded')}function image_loaded_handler(){if(++loaded_count===$images.length){images_loaded_handler()}}function add_load_listeners(){loaded_count=0;$images.each(function(a,b){if(b.complete||b.readyState==='complete'){image_loaded_handler()}else{$(b).bind('load readystatechange',image_loaded_handler)}})}function hide(){$images.css({opacity:0})}function strapline_revealed_handler(){$(c).triggerHandler('strapline_revealed')}function link_revealed_handler(){$(c).triggerHandler('link_revealed')}function concealed_hander(){$splash.remove();$(c).triggerHandler('concealed')}$.extend(c,{initialise:function(){reference_elements();add_click_listener();add_load_listeners();hide()},reveal_strapline:function(){$lines.eq(0).animate({opacity:1},'slow','swing');$lines.eq(1).delay(750).animate({opacity:1},'slow','swing');$lines.eq(2).delay(1500).animate({opacity:1},'slow','swing',strapline_revealed_handler)},reveal_link:function(){$link_img.delay(750).css({opacity:0}).show().animate({opacity:1},'slow',link_revealed_handler)},activate_link:function(){$link.css({cursor:'pointer'});timeout_id=window.setTimeout(timeout_handler,2000);link_active=true},conceal:function(){$splash.animate({opacity:0},'slow',concealed_hander)}});return c}());ISPY.background=(function(){var a={};function revealed_handler(){$(a).triggerHandler('revealed')}a.reveal=function(){$('#box_navigation').css({visibility:'visible',opacity:0}).animate({opacity:1},'slow',revealed_handler)};return a}());ISPY.main_navigation=(function(){var d,actions,$splash,$background,$items;function bind_event_to_fsm_trigger(a,b,c){a.bind(b,{trigger:c},d.trigger)}function bind_events_to_fsm_triggers(){$splash=$(ISPY.splash);$background=$(ISPY.background);$items=$(ISPY.items);$.each([[$splash,'loaded','splash_loaded'],[$background,'revealed','background_revealed'],[$splash,'strapline_revealed','strapline_revealed'],[$items,'loaded','loaded'],[$splash,'link_revealed','enter_link_revealed'],[$splash,'link_clicked','enter_link_clicked'],[$splash,'concealed','strapline_concealed'],[$items,'panel_revealed','panel_revealed'],[$items,'grid_revealed','grid_revealed'],[$items,'items_revealed','items_revealed']],function(i,a){bind_event_to_fsm_trigger(a[0],a[1],a[2])})}actions={initialise:function(){$('#box_items, #box_splash').addClass('js-enabled');bind_events_to_fsm_triggers();ISPY.items.initialise();d.trigger('initialised')},load_splash:function(){ISPY.splash.initialise()},reveal_background:function(){ISPY.background.reveal()},reveal_strapline:function(){ISPY.splash.reveal_strapline()},check_if_loaded:function(){ISPY.items.load()},reveal_enter_link:function(){ISPY.splash.reveal_link()},activate_link:function(){ISPY.splash.activate_link()},conceal_strapline:function(){ISPY.splash.conceal()},reveal_panel:function(){ISPY.items.reveal_panel()},reveal_grid:function(){ISPY.items.reveal_grid()},reveal_items:function(){ISPY.items.reveal_items()},activate_items:function(){ISPY.items.activate()}};function initialise_fsm(){d=MRT.fsm('Box Navigation',actions);d.define('initialising').entry('initialise').transition('initialised','splash_loading');d.define('splash_loading').entry('load_splash').transition('splash_loaded','background_revealing');d.define('background_revealing').entry('reveal_background').transition('background_revealed','strapline_revealing');d.define('strapline_revealing').entry('reveal_strapline').transition('strapline_revealed','loading');d.define('loading').entry('check_if_loaded').transition('loaded','enter_link_revealing');d.define('enter_link_revealing').entry('reveal_enter_link').transition('enter_link_revealed','enter_link_click_waiting');d.define('enter_link_click_waiting').entry('activate_link').transition('enter_link_clicked','strapline_concealing');d.define('strapline_concealing').entry('conceal_strapline').transition('strapline_concealed','panel_revealing');d.define('panel_revealing').entry('reveal_panel').transition('panel_revealed','grid_revealing');d.define('grid_revealing').entry('reveal_grid').transition('grid_revealed','items_revealing');d.define('items_revealing').entry('reveal_items').transition('items_revealed','item_selection_waiting');d.define('item_selection_waiting').entry('activate_items');d.begin()}return{initialise:function(){initialise_fsm()}}}());ISPY.services_navigation=(function(){var d,actions,$background,$items;function bind_event_to_fsm_trigger(a,b,c){a.bind(b,{trigger:c},d.trigger)}function bind_events_to_fsm_triggers(){$background=$(ISPY.background);$items=$(ISPY.items);$.each([[$background,'revealed','background_revealed'],[$items,'loaded','loaded'],[$items,'panel_revealed','panel_revealed'],[$items,'grid_revealed','grid_revealed'],[$items,'items_revealed','items_revealed']],function(i,a){bind_event_to_fsm_trigger(a[0],a[1],a[2])})}actions={initialise:function(){$('#box_items').addClass('js-enabled');bind_events_to_fsm_triggers();ISPY.items.initialise();d.trigger('initialised')},reveal_background:function(){ISPY.background.reveal()},check_if_loaded:function(){ISPY.items.load()},reveal_panel:function(){ISPY.items.reveal_panel()},reveal_grid:function(){ISPY.items.reveal_grid()},reveal_items:function(){ISPY.items.reveal_items()},activate_items:function(){ISPY.items.activate()}};function initialise_fsm(){d=MRT.fsm('Box Navigation',actions);d.define('initialising').entry('initialise').transition('initialised','background_revealing');d.define('background_revealing').entry('reveal_background').transition('background_revealed','loading');d.define('loading').entry('check_if_loaded').transition('loaded','panel_revealing');d.define('panel_revealing').entry('reveal_panel').transition('panel_revealed','grid_revealing');d.define('grid_revealing').entry('reveal_grid').transition('grid_revealed','items_revealing');d.define('items_revealing').entry('reveal_items').transition('items_revealed','item_selection_waiting');d.define('item_selection_waiting').entry('activate_items');d.begin()}return{initialise:function(){initialise_fsm()}}}());
