var status = 0;

$(document).ready(function() {
  if (status == 0) {
    var hashp = window.location.hash;
    if (hashp != '') {
      historyChange(hashp.slice(1),hashp.slice(1));
    } else {
      dhtmlHistory.add("home","home");
      contentManager.init();
    }
  }
});

var historyChange = function (newLocation, historyData) {
  status = 1;

  var tab = newLocation.split('=');
  var paramName = tab[0];
  var paramValue = tab[1];

  switch (paramName) {
  case 'home' :
    contentManager.init(function () {
      contentManager.openHome();
    });
    break;
  case 'media':
    contentManager.init(function () {
      contentManager.openMedia(paramValue);
    });
    break;
  case 'product':
    contentManager.init(function () {
      contentManager.openProduct(paramValue);
    });
    break;
  case 'allproducts':
    contentManager.init(function () {
      contentManager.openAllProducts();
    });
    break;
  case 'legria':
    contentManager.init(function () {
      contentManager.openLegria();
    });
    break;
  default:
    contentManager.init();
    break;
  }
};

var progress = new function () {
  var cpt = 0;
  var interv = 0;
  var maxval = 0;
  var valueContainer = null;
  var callbackFunction = null;

  var report = function (value, callback) {

    if (valueContainer === null) {
      valueContainer = $('#progression');
    }

    if (typeof callback !== undefined) {
      callbackFunction = callback;
    }

    if (cpt >= 100) {
      setTimeout(function () {
        $('#loading_layer').fadeOut('slow', callbackFunction);
      }, 800);
      return;
    }

    maxval = value;

    if (!interv) {
      interv = setInterval(function () {
        cpt += 2;
        if (cpt >= maxval) {
          clearInterval(interv);
          interv = 0;

          if (cpt == 100) {
            //all data are loaded, we can now show the page
            $('#control_bar').fadeIn();
            $('#loading_layer').fadeOut(callbackFunction);
            valueContainer.hide();
            a_external();
          }
        }
        valueContainer.text('(' + cpt + ')%');
      }, 20);
    }
  };

  return {
    report: report
  };
};

window.onload = function () {
  $('#menu_nav_home').click(function (event) {
    dhtmlHistory.add("home", "home");
    contentManager.openHome();
    contentManager.closeMenu();
    $('.selected').addClass('non_selected');
    $('.selected').removeClass('selected');
    $(this).removeClass('non_selected');
    $(this).addClass('selected');
    $(this).blur();
  });

  $('#menu_nav_legria').click(function (event) {
    dhtmlHistory.add("legria", "legria");
    contentManager.openLegria();
    contentManager.closeMenu();
    $(this).blur();
  });

  $('#menu_nav_products').click(function (event) {
    dhtmlHistory.add("allproducts", "allproducts");
    contentManager.openAllProducts();
    contentManager.closeMenu();
    $(this).blur();
  });

  $('#see_all_camcorders').click(function (event) {
    dhtmlHistory.add("allproducts", "allproducts");
    contentManager.openAllProducts();
    contentManager.closeMenu();
    $(this).blur();
  });

  $('#fullhd_link').click(function (event) {
    dhtmlHistory.add("home", "home");
    contentManager.openHome();
    $('.selected').addClass('non_selected');
    $('.selected').removeClass('selected');
    $('#menu_nav_home').removeClass('non_selected');
    $('#menu_nav_home').addClass('selected');
    $(this).blur();
  });
};

function a_external() {
  $("a[rel='external']").click(function (event) {
    event.preventDefault();
    window.open(this);
  });
};

function has_flash() {
  if (!swfobject.hasFlashPlayerVersion("9.0.115")) {
    $('#flash_movie').html('<a id="get_flash" href="http://www.adobe.com/go/getflashplayer" rel="external" title="Get Adobe Flash player"></a>');
  }
};

contentManager = function () {
  var config = {
    defaultVideoPlayer: '',
    defaultExpressInstall: ''
  };

  // sIFR templates
  var templates = {
    bigHeader : { selector: 'h1', css: '.sIFR-root { color: #3399ff; leading:3; }', wmode: 'transparent', selectable: true  },
    /*specHeader : { selector: 'h5', css: '.sIFR-root { color: #3399ff; font-size:15px; }', wmode: 'transparent', selectable: true },*/
    mediumHeaderBlue : { selector: '.hblue', css: '.sIFR-root { color: #3399ff; font-size:17px; }', wmode: 'transparent' },
    mediumHeaderBlack : { selector: '.prod_title', css: '.sIFR-root { color: #000000; font-size:17px;  }', wmode: 'transparent' },
    legriaHeaderBlack : { selector: '.legria', css: '.sIFR-root { color: #000000; font-size:17px;  }', wmode: 'transparent' },
    smallHeader : { selector: '.small_header', css: '.sIFR-root { color: #000000; font-size:13px  }', wmode: 'transparent' },
    bigHeaderProduct : { selector: '#big_header_product', css: '.sIFR-root { color: #3399ff; font-size:36px  }', wmode: 'transparent' },
    smallHeaderLink : { selector: '.small_header2', css: '.sIFR-root { color: #000000; font-size:13px; cursor:pointer;  }', wmode: 'transparent' },
    mediumHeaderBlueLink : { selector: '.hblue2', css: '.sIFR-root { color: #3399ff; font-size:17px; cursor:pointer; }', wmode: 'transparent' }
  };

  var activeMedia = 0;
  var menuHeight;
  var isDataLoaded = false;
  var callback = null;
  var banners = {};
  var copies = {};
  var medias = {};
  var locations = {};
  var categories = {};
  var products = {};
  var pages = {};
  var linksURL = {};
  var accessories = {};
  var backgroundImages = {};
  var images = {};
  var productsSpecifications = {};
  var productsLinks = {};
  var keyFeatures = {};
  var externalLinks= {};
  var countryLinks = {};
  var isTechInDom = false;
  var isKeyFeatureInDom = false;
  var currentProductId = 0;
  var firstMediaID = null;
  var isFocused = false;


  function init(defaultCallback) {
    //console.debug("MSP: INIT");

    /* if no callback defined we load homepage as default */
    callback = (defaultCallback === undefined ? openHome:defaultCallback);

    /* if not the first load we execute callback without loading data (already loaded) */
    if (isDataLoaded) {
      callback();
    } else {
      loadContentCopies();
    }
  }

  function updateSifr() {
    Cufon.replace('h1');
    Cufon.replace('h2');
    Cufon.replace('h3');
    Cufon.replace('#media_subheading_1');
    Cufon.replace('#home_subheading_3');
    Cufon.replace('#big_header_product');
  }

  /**
   *  CONTROLLERS : load request and exectute apropriate action
   */
  function loadContentCopies() {
    $.ajax({
      type: "GET",
      url: "tour_data.xml",
      dataType: "xml",
      success: function (xml) {
        progress.report(20, null);

        $(xml).find('resource').each(function () {
          var id_text = $(this).attr('key');
          var name_text = $(this).text();
          if (name_text.indexOf('\n') != -1) {
            name_text = name_text.replace(/\n/g, '<br />');
          }
          copies[id_text] = name_text;
        });

        progress.report(40, null);
        loadContentLocation();
      }
    });
  }

  function loadContentLocation() {
    $.ajax({
      type: "GET",
      url: "tour_locations.xml",
      dataType: "xml",
      success: function (xml) {
        $(xml).find('resource').each(function () {
          var key = $(this).attr('name');
          var value = $(this).attr('value');

          locations[key] = value;
        });

        config.defaultExpressInstall = '' + locations.expressInstall;
        config.defaultVideoPlayer = '' + locations.customPlayer;
        progress.report(60, null);
        loadContentMedias();
      }
    });
  }

  function switchCountry(elem) {
    var cc = elem[elem.selectedIndex].value;
    window.location.href = countryLinks[cc];
  }

  function loadContentMedias() {
    $.ajax({
      type: "GET",
      url: "tour_structure.xml",
      dataType: "xml",
      success: function (xml) {
        progress.report(80, null);

        /* load and store the medias */
        $(xml).find('media_gallery').find('media').each(function () {
          storeMedia(this);
        });

        /* load and store the categories */
        $(xml).find('categories').find('category').each(function () {
          storeCategory(this);
        });

        /* load and store the products */
        $(xml).find('products').find('product').each(function () {
          storeProducts(this);
        });

        /* load and store the banners */
        $(xml).find('banners').find('banner').each(function () {
          storeBanners(this);
        });

        /* load and store the page infos */
        $(xml).find('page_banners').find('page').each(function () {
          storePages(this);
        });

        /* load and store the page infos */
        $(xml).find('global').find('link').each(function () {
          var id_text = $(this).attr('id');
          var name_text = $(this).text();
          linksURL[id_text] = name_text;
        });

        /* load and store the links infos */
        $(xml).find('country_links').find('country_link').each(function () {
          var id_country = $(this).attr('id');
          var url = $(this).text();
          countryLinks[id_country] = url;
        });

        /* load css images */
        $(xml).find('global').find('image').each(function () {
          //console.log(locations[$(this).text()]);
          if ($(this).attr('type') == 'image') {
            images[$(this).attr('sel')] = locations[$(this).text()];
          } else {
            backgroundImages[$(this).attr('sel')] = locations[$(this).text()];
          }
        });

        callback();

        /* load and store the accessories*/
        $(xml).find('accessories').find('accessory').each(function () {
          storeAccessories(this);
        });

        isDataLoaded = true;
      }
    });
  }

  function addBlankThumb(containerID) {
    var li = document.createElement('li');
    li.className = 'thumbnail_container';
    var container = document.getElementById(containerID);
    container.appendChild(li);
  }

  /* adding medias in page using dom methods : nice code but sloooooow */
  function addThumbInDom(theMedia, i, containerID) {
    //console.debug("MSP: addThumbInDom containerID: "+containerID);
    //console.debug("MSP: containerID: "+containerID);
    var li_class = 'thumbnail_container';
    var dropdown_class = 'dropdown';

    switch (i % 3) {
    case 0:
      li_class += ' first';
      dropdown_class += ' first';
      break;
    case 1:
      li_class += ' second';
      dropdown_class += ' second';
      break;
    case 2:
      li_class += ' third';
      dropdown_class += ' third';
      break;
    }

    var li = document.createElement('li');
    li.id = theMedia.id;
    li.className = li_class;

    var label = document.createElement('h2');
    label.className = 'thumb_desc';
    label.innerHTML = theMedia.title;

    var camera = document.createElement('div');
    camera.className = 'camera';

    var p_list = document.createElement('div');
    p_list.className = 'select_wrapper';


    var desc = document.createElement('p');
    desc.className = 'media_desc';

    var listHTML = '<div class="dropdown_wrapper">';
    var listHTMLHeader = '<div class="dropdown_header">' + copies.available_on + '</div>'
    listHTML += listHTMLHeader;
    listHTML += '<div class="'+dropdown_class+'"><table style="width: 100%;"><tbody>';
    //console.debug("MSP: theMedia.products: "+theMedia.products);
    for (var k = 0; k < theMedia.products.length; k++) {
      var new_star = "";
      if (products[theMedia.products[k]].isNew) {
        new_star = '<span class="new"> (NEW)</span>';
      }
      listHTML += '<tr><td onclick=\"contentManager.triggerProduct(\'' + products[theMedia.products[k]].id + '\');\">' + products[theMedia.products[k]].name + new_star + '</td></tr>';
    }
    listHTML += '</tbody></table></div>';

    desc.innerHTML = theMedia.desc;
    p_list.innerHTML = listHTML ;

    var link = document.createElement('a');
    link.className = 'thumbnail';
    link.setAttribute('href', 'javascript:contentManager.triggerMedia("' + theMedia.id + '");');


    var imgHTML = '<img class="media_img" height="113" width="200" alt="' + theMedia.title + '" src="' + theMedia.tmbSrc + '" />';
    link.innerHTML = imgHTML;
    var container = document.getElementById(containerID);
    container.appendChild(li);
    li.appendChild(link);

    var content = document.createElement('div');
    content.className = "media_content";
    content.appendChild(label);
    content.appendChild(desc);

    li.appendChild(content);
    li.appendChild(p_list);
    li.appendChild(camera);

    $(".dropdown_header").bind("mouseenter", function () {

      var src = locations["available-on-bg-up"];
      $(this).css("backgroundImage",'url(' + src +')');

      var li_container = $(this).parent().parent().parent();

      var dropdown_wrapper = $(this).parent();
      var li_class = 'thumbnail_container';


      var html = dropdown_wrapper.children('.dropdown').html();

      if (li_container.parent().attr('id') == 'advantage') {
        $('.infos_box').css({'top': '435px'});
      } else {
        $('.infos_box').css({'top': '170px'});
      }

      if (li_container.hasClass('first')) {
        $('#info_box1').html(html);
        $('#info_box1').children('.media_desc:hidden').show();
        $('#info_wrapper1').show();
        $('#info_wrapper2').hide();
        $('#info_wrapper3').hide();
      } else if (li_container.hasClass('second')) {
        $('#info_box2').html(html);
        $('#info_box2').children('.media_desc:hidden').show();
        $('#info_wrapper1').hide();
        $('#info_wrapper2').show();
        $('#info_wrapper3').hide();
      } else if (li_container.hasClass('third')) {
        $('#info_box3').html(html);
        $('#info_box3').children('.media_desc:hidden').show();
        $('#info_wrapper1').hide();
        $('#info_wrapper2').hide();
        $('#info_wrapper3').show();
      }

    });

    $(link).bind("mouseenter", function () {
      var li_container = $(this).parent();
      $('.infos_box').hide().end();

      $(this).children('.media_img').css({opacity: 0.8});

      if (jQuery.browser.version == '6.0') {
        li_container.children('.select_wrapper').hide();
      }

      var html = li_container.children('.media_content').children('.media_desc').html();

      li_container.children('.camera').addClass('camera_blue');

      if (li_container.parent().attr('id') == 'advantage') {
        $('.infos_box').css({'top': '375px'});
      } else {
        $('.infos_box').css({'top': '115px'});
      }

      var menu_top_margin = "30px";

      if (li_container.hasClass('first')) {
        $('#info_box1').html(html);
        $('.info_content').css('marginTop',menu_top_margin);
        $('#info_box1').children('.media_desc:hidden').show();
        $('#info_wrapper1').show();
      } else if (li_container.hasClass('second')) {
        $('#info_box2').html(html);
        $('.info_content').css('marginTop',menu_top_margin);
        $('#info_box2').children('.media_desc:hidden').show();
        $('#info_wrapper2').show();
      } else if (li_container.hasClass('third')) {
        $('#info_box3').html(html);
        $('.info_content').css('marginTop',menu_top_margin);
        $('#info_box3').children('.media_desc:hidden').show();
        $('#info_wrapper3').show();
      }

    });

    var thisThumb = "#"+li.id + " .thumbnail";
    $(thisThumb).bind("mouseleave", function () {
      $('.infos_box:visible').hide().end();
      $('.camera_blue').removeClass('camera_blue');
      $('.media_img').css({opacity: 1});
      if (jQuery.browser.version == '6.0') {
        $('.select_wrapper').show();
      }
      $('.info_content').css('marginTop',0);
    });
  }

  function activateLeave(val) {
    if (val) {
      $('.infos_box').bind("mouseleave", closeDesc);
      closeDesc();
    } else {
      $('.infos_box').unbind("mouseleave", closeDesc);
    }
  }

  function closeDesc() {
      //$('.infos_box').hide();
  }

  function addPage(containerId, pageCpt) {
    var pageId = containerId + '_' + pageCpt;
    //var bar = (pageCpt == 1?'':'|');
    var className = (pageCpt == 1 ? 'page active':'page');
    $('#pages_' + containerId).append('<span class="' + className + '" id="' + pageId + '">' + pageCpt + '</span>');
    return '#' + pageId;
  }

  function addMediasInPage(containerId, thisProduct) {
    var media_pages = [];
    var i = 0;
    var l = 0;
    var pageCpt = 1;

    if (typeof(thisProduct) == 'object') {
      for (i = 0; i < thisProduct.medias.length; i++) {
        var thisMediaItem = thisProduct.medias[i];
        //console.debug("MSP: thisMediaItem: "+thisMediaItem);
        if (containerId == medias[thisMediaItem].container || containerId == 'thumbs') {
          addThumbInDom(medias[thisMediaItem], l, containerId);
          if (l % 3 === 0) {
            media_pages.push(addPage(containerId, pageCpt));
            pageCpt++;
          }
          l++;
        }
      }
    } else {
      for (i in medias) {
        if (containerId == medias[i].container || containerId == 'thumbs') {
          addThumbInDom(medias[i], l, containerId);
          if (l % 3 === 0) {
            media_pages.push(addPage(containerId, pageCpt));
            pageCpt++;
          }
          l++;
        }
      }
    }

    var blanks = 3 - l % 3;
    if (blanks != 3) {
      for (var m = 0; m < blanks; m++) {
        addBlankThumb(containerId);
      }
    }
    
    $("#info_box1, #info_box2, #info_box3").bind("mouseleave", function () {
      var src = locations["available-on-bg-up"];
      $(".dropdown_header").css("backgroundImage",'url(' + src +')');
      if (jQuery.browser.version == '6.0') {
        $('.select_wrapper').show();
      }

      $('.infos_box:visible').hide().end();
    });


    return media_pages;
  }

  function addAccessoriesInPage(accArray) {
    if (accArray.length === 0) {
      $('#panel_accessories').addClass('disabled');
      $('#panel_accessories').css({'cursor': 'default'});
      return;
    }

    var accHTML = '';

    for (var i = 0; i < accArray.length; i++) {
      var theAcc = accessories[accArray[i]];
      accHTML += '<div class="accessory">' +
      '<img class="accessory_image" src="' + theAcc.thumb + '"></img>' +
      '<div class="accessory_desc">' +
      '<h6>' + theAcc.name + '</h6>' +
      '<p>' + theAcc.desc + '</p>' +
      '</div>' +
      '</div>';

      if (i % 2 == 1) {
        accHTML += '<div class="line"></div>';
      }
    }

    $('#accessories').html(accHTML);
  }

  function bindCategoryEvents() {
    $(".category_item").addClass('open');
    $(".category_item").click(function () {
      $(this).toggleClass('open');
      $(this).next().slideToggle("normal");
      return false;
    });
  }

  function loadImagesAssets() {
    var i = null;
    for (i in backgroundImages) {
      if (i !== null) {
        $(i).css({'backgroundImage': 'url(' + backgroundImages[i] + ')'});
      }
    }
    for (i in images) {
      if (i !== null) {
        $(i).attr('src', '' + images[i]);
      }
    }
    fixIePngs();
  }

  function loadCopyHtml() {
    for (var i in copies) {
      if (i !== '') {
        var jquery_id = '#' + i;
        //console.log("MSP: copies["+i+"]: "+copies[i]);
        $(jquery_id).html(copies[i]);
      }
    }
  }

  function loadLinksHtml() {
    for (var i in linksURL) {
      if (i !== '') {
        var jquery_id = '#' + i;
        $(jquery_id).attr('href', linksURL[i]);
      }
    }
  }

  function openHome() {
    //console.debug("MSP: HOME");
    pageTracker._trackPageview("/home");
    $('#loading_layer').show();
    $.get("index_ajax.html", function (data) {
      $('#dynamic_container').html(data);
      has_flash();
      loadCopyHtml();
      loadLinksHtml();
      var media_pages = addMediasInPage('thumbs', '');

      $(".slider").jCarouselLite({
        easing: "easeinout",
        speed: 900,
        scroll: 3,
        circular: false,
        visible: 3,
        start: 0,
        btnGo: media_pages,
        btnNext: "#page_arrow"
      });

      addProductsInDom();
      updateSifr();
      bindCategoryEvents();
      addBannersInDom('home');
      loadImagesAssets();

      progress.report(100, function () {
        contentManager.triggerMedia(firstMediaID);
      });

      document.title = 'Canon HD ' + copies.logo_tagline + '/' + copies.menu_nav_home;
      $('#fullhd_link').attr('title', 'HD ' + copies.logo_tagline);
      $.scrollTo(0, 700);
    });
  }

  function openLegria() {
    pageTracker._trackPageview("/technology_in_action");
    $('.selected').addClass('non_selected');
    $('.selected').removeClass('selected');
    $('#menu_nav_legria').removeClass('non_selected');
    $('#menu_nav_legria').addClass('selected');
    $('#menu_nav_legria').blur();
    $('#loading_layer').show();

    $.get("benefits.html", function (data) {
      $('#dynamic_container').html(data);
      has_flash();
      loadCopyHtml();
      loadLinksHtml();
      addBannersInDom('benefits');
      var media_feature = addMediasInPage('feature', '');

      $(".slider").jCarouselLite({
        easing: "easeinout",
        speed: 900,
        scroll: 3,
        circular: false,
        visible: 3,
        start: 0,
        btnGo: media_feature,
        btnNext: "#page_arrow"
      });

      var media_advantage = addMediasInPage('advantage', '');

      $(".slider2").jCarouselLite({
        easing: "easeinout",
        speed: 900,
        scroll: 3,
        circular: false,
        visible: 3,
        start: 0,
        btnGo: media_advantage,
        btnNext: "#page_arrow2"
      });

      addProductsInDom();
      updateSifr();

      loadImagesAssets();
      progress.report(100, function () {
        contentManager.triggerMedia(firstMediaID);
      });

      document.title = 'Canon HD ' + copies.logo_tagline + '/' + copies.menu_nav_legria;
      $('#fullhd_link').attr('title', 'HD ' + copies.logo_tagline);
      //$('html,body').animate({scrollTop: 0}, 700);
      $.scrollTo(0, 700);
    });
  }

  function openAllProducts() {
    //console.debug("MSP: ALL PRODS");
    pageTracker._trackPageview("/all_products/");
    $('.selected').addClass('non_selected');
    $('.selected').removeClass('selected');
    $('#menu_nav_products').removeClass('non_selected');
    $('#menu_nav_products').addClass('selected');
    $('#loading_layer').show();

    $.get("product_all.html", function (data) {
      $('#dynamic_container').html(data);
      loadCopyHtml();
      loadLinksHtml();

      addProductsInDom('overall');
      updateSifr();
      bindCategoryEvents();
      activateBuyLink();
      addBannersInDom('product_all');
      loadImagesAssets();
      progress.report(100, null);
      document.title =  'Canon HD ' + copies.logo_tagline + '/' + copies.menu_nav_products;
      $('#fullhd_link').attr('title', 'HD ' + copies.logo_tagline);
      // $('html,body').animate({scrollTop: 0}, 700);
      $.scrollTo(0, 700);
    });
  }

  function openProduct(id) {
    var theProduct = products[id];
    var productName;

    pageTracker._trackPageview("/product/" + id);

    $('.selected').addClass('non_selected');
    $('.selected').removeClass('selected');
    $('#menu_nav_products').removeClass('non_selected');
    $('#menu_nav_products').addClass('selected');
    $('#menu_nav_products').blur();

    $('#loading_layer').show();

    $.get("product_specific.html", function (data) {
      isTechInDom = false;
      isKeyFeatureInDom = false;
      $('#dynamic_container').html(data);
      has_flash();

      if (theProduct.name.indexOf('LEGRIA') != -1 || theProduct.name.indexOf('Legria') != -1) {
        productName = (theProduct.name).replace(/legria/i, '');
        $('#legria_logo').show();
      } else {
        productName = theProduct.name;
      }

      $('#product_header').text(theProduct.menuDesc);
      $('.prod_title').text(productName);
      $('#big_header_product').text(productName);
      $('#product_short_description').html(theProduct.shortDesc);
      $('#whytohead1').text(theProduct.whyToHead1);
      $('#whytohead2').text(theProduct.whyToHead2);
      $('#whytohead3').text(theProduct.whyToHead3);
      $('#whytohead4').text(theProduct.whyToHead4);
      $('#whytocopy1').html(theProduct.whyToCopy1);
      $('#whytocopy2').html(theProduct.whyToCopy2);
      $('#whytocopy3').html(theProduct.whyToCopy3);
      $('#whytocopy4').html(theProduct.whyToCopy4);

      loadCopyHtml();
      loadLinksHtml();
      var mailSubject = copies.canon_hd_products + ' : ' + theProduct.name;
      var mailContent = escape(window.location.href);
      $('#email_button').attr('href', 'mailto:?subject=' + mailSubject + '&body=' + mailContent);

      var media_pages = addMediasInPage('thumbs', products[id]);

      $(".slider").jCarouselLite({
        easing: "easeinout",
        speed: 900,
        scroll: 3,
        circular: false,
        visible: 3,
        start: 0,
        btnGo: media_pages,
        btnNext: "#page_arrow"
      });

      activateBuyLink();
      addBannersInDom('product_specific');
      addProductsInDom();
      updateSifr();
      addAccessoriesInPage(theProduct.accessories);
      loadImagesAssets();
      bindProductPanelEvents();
      open_flash(theProduct.slideshow, '', {}, true);
      document.title = 'Canon HD ' + copies.logo_tagline + '/' + copies.menu_nav_products + '/' + theProduct.name;
      $('#fullhd_link').attr('title', 'HD ' + copies.logo_tagline);

      progress.report(100, null);
      //$('html,body').animate({scrollTop: 0}, 700);
      $.scrollTo(0, 700);
    });

    currentProductId = id;
  }

  function loadProductSpecif(theProduct) {
    //console.log("MSP: loadProductSpecif");
    //console.log($(this));

    //productsSpecifications = {}; // MSP DEV ONLY REMOVE
    if (!productsSpecifications[theProduct.id]) {
      var productSpecifications = {};
      var _keyFeature = "";
      var _externalLinks = [];

      $.ajax({
        type: "GET",
        url: theProduct.specif,
        dataType: "xml",
        success: function (xml) {
          /* load and store the spec */
          $(xml).find('technicalspecs').find('header').each(function () {
            var subSpecif = {};
            $(this).find('standard').each(function () {
              subSpecif[$(this).attr('title')] = $(this).text();
            });
            productSpecifications[$(this).attr('title')] = subSpecif;
          });
          /* load and store the footer */
          var subFooter = {};
          $(xml).find('footnotes').find('footnote').each(function () {
            var subHeader = '';
            var subContent = '';
            $(this).find('header').each(function () {
              subHeader = $(this).text();
            });
            $(this).find('content').each(function () {
              subContent = $(this).text();
            });
            subFooter[subHeader] = subContent;
          });

          $(xml).find('productdescription').each(function () {
              _keyFeature = $(this).text();
          });

          $(xml).find('productlinks').find('a').each(function () {
            var externalLink = {};
            if ($(this).attr('href') != ''){
              externalLink.link_type = $(this).attr('type');
              externalLink.href = $(this).attr('href');
              externalLink.display_text = $(this).text();
              _externalLinks.push(externalLink);
            }
          });

          keyFeatures[theProduct.id] = _keyFeature;
          externalLinks[theProduct.id] = _externalLinks;
          productSpecifications.footnotes = subFooter;
          productsSpecifications[theProduct.id] = productSpecifications;
          loadTechSpecInDom(productSpecifications);
          loadKeyFeaturesInDom(keyFeatures[theProduct.id]);
          loadExternalLinksInDom(externalLinks[theProduct.id]);
        }
  });
    } else {
      loadTechSpecInDom(productsSpecifications[theProduct.id]);
      loadKeyFeaturesInDom(keyFeatures[theProduct.id]);
      loadExternalLinksInDom(externalLinks[theProduct.id]);
    }
  }

  function bindProductPanelEvents() {
    // christ! prob a better place to put this..
    if (!contentManager.isDomLoaded()) {
      var theProduct = products[currentProductId];
      loadProductSpecif(theProduct);
    }

    $('#tech_header').click(function () {
      if ($(this).hasClass('open')) {
        $(this).removeClass('open');
        $(this).children(".action_text").text(copies.shared_open);
        $(this).next().slideUp("slow");
      } else {
        $(this).addClass('open');
        $(this).children(".action_text").text(copies.close);
        $(this).next().slideDown("slow", function () {
          $('#preloader').show();
          if (!contentManager.isDomLoaded()) {
            var theProduct = products[currentProductId];
            loadProductSpecif(theProduct);
          } else {
            $('#preloader').hide();
            $('#tech_data').show();
            $('#tech_data').scrollTop(0);
          }
        });
      }
    });

    $('#accessories_header').click(function () {
      if ($(this).hasClass('open')) {
        $(this).removeClass('open');
        $(this).children(".action_text").text(copies.shared_open);
        $(this).next().slideUp("normal");
      } else {
        $(this).addClass('open');
        $(this).children(".action_text").text(copies.close);
        $(this).next().slideDown("normal");
      }
    });

    $('#key_features_header').click(function () {

      if ($(this).hasClass('open')) {
        $(this).removeClass('open');
        $(this).children(".action_text").text(copies.shared_open);
        $(this).next().slideUp("normal");
      } else {
        $(this).addClass('open');
        $(this).children(".action_text").text(copies.close);
        $(this).next().slideDown("slow", function () {
          $('#preloader').show();
          if (!isKeyFeatureInDom) {
            var theProduct = products[currentProductId];
            loadProductSpecif(theProduct);
          } else {
            $('#preloader').hide();
            $('#tech_data').show();
            $('#tech_data').scrollTop(0);
          }
        });
      }
    });
  }

  function activateBuyLink() {
    $('#buy_link').click(function (event) {
      event.preventDefault();
      var t = $('#buy_header').text();
      GB_show(t, $(this).attr('href'), 660, 800, 'Close  X');
    });

    $('#buy,#buy_subheader,buy_header').click(function (event) {
      var t = $('#buy_header').text();
      GB_show(t, $('#buy_link').attr('href'), 680, 800, 'Close  X');
    });
  }

  function storeBanners(obj) {
    var aBanner = {};
    var id = $(obj).find('id').text();
    var src = '' + locations[$(obj).find('src_url').text()];
    var height = $(obj).find('height').text();
    var width = $(obj).find('width').text();
    aBanner.src = src;
    aBanner.height = height;
    aBanner.width = width;
    banners[id] = aBanner;
  }

  function storeAccessories(obj) {
    var anAcc = {};
    var id = $(obj).find('id').text();
    var name = copies[$(obj).find('name').text()];
    var desc = copies[$(obj).find('desc').text()];
    var thumb = '' + locations[$(obj).find('thumb').text()];
    anAcc.id = id;
    anAcc.name = name;
    anAcc.thumb = thumb;
    anAcc.desc = desc;
    accessories[id] = anAcc;
  }

  function storePages(obj) {
    var aPage = [];
    var name = $(obj).find('pg_name').text();
    $(obj).find('banners').find('banner_id').each(function () {
      aPage.push($(this).text());
    });
    pages[name] = aPage;
  }

  function storeMedia(obj) {
    var aMedia = {};
    var mediaId = $(obj).find('id').text();
    var mediaType = $(obj).attr('type');
    var container = $(obj).attr('container');
    var mediaTitle = $(obj).find('title').text();
    var thumb = $(obj).find('thumb').text();
    var desc = $(obj).find('desc').text();
    var thumbType = $(obj).find('thumb').attr('type');
    var titleType = $(obj).find('title').attr('type');
    var swfType = $(obj).find('media_swf_uri').attr('type');
    var swfVal = $(obj).find('media_swf_uri').text();

    aMedia.products = [];
    aMedia.active = false;
    aMedia.id = mediaId;
    aMedia.type = mediaType;
    aMedia.desc = copies[desc];
    aMedia.container = container;

    if (swfType == 'src') {
      aMedia.swfUrl = swfVal;
    } else {
      aMedia.swfUrl = '' + locations[swfVal];
    }

    if (titleType == 'src') {
      aMedia.title = mediaTitle;
    } else {
      aMedia.title = copies[mediaTitle];
    }

    if (thumbType == 'src') {
      aMedia.tmbSrc = thumb;
    } else {
      aMedia.tmbSrc = '' + locations[thumb];
    }

    switch (mediaType) {
    case 'slideshow':
      aMedia.images = [];
      $(obj).find('media_images').find('image').each(function () {
        var val = $(this).text();
        if ($(obj).attr('type') == 'src') {
          aMedia.images.push(val);
        } else {
          aMedia.images.push('' + locations[val]);
        }
      });
      break;

    case 'canon_external':
      aMedia.flvName = $(obj).find('media_flv').text();
      aMedia.flvPath = $(obj).find('media_path').text();
      aMedia.subUrl = $(obj).find('media_sub_uri').text();
      aMedia.autoPlay = $(obj).find('media_autoplay').text();
      break;

    case 'canon_internal':
      aMedia.flvName = locations[$(obj).find('media_flv').text()];
      aMedia.subUrl = $(obj).find('media_sub_uri').text();
      aMedia.autoPlay = $(obj).find('media_autoplay').text();
      break;

    case 'external_video':
      aMedia.extraParams = $(obj).find('media_swf_query').text();
      break;
    }

    if (firstMediaID === null) {
      firstMediaID = mediaId;
    }

    medias[mediaId] = aMedia;
  }

  function storeCategory(obj) {
    var aCategory = {};
    var categId = $(obj).find('id').text();
    var categName = copies[$(obj).find('name').text()];
    var categSubHeader = copies[$(obj).find('subhead').text()];
    var categDesc = copies[$(obj).find('description').text()];
    aCategory.name = categName;
    aCategory.subhead = categSubHeader;
    aCategory.desc = categDesc;
    aCategory.products = [];
    categories[categId] = aCategory;
  }

  function getWhyToCopy(elem) {
    var html1 = '';
    elem.find('copy').each(function () {
      if ($(this).attr('type') == 'link') {
        html1 += '<a href="' + $(this).attr('url') + '">' + copies[$(this).text()] + '</a>';
      } else {
        //default case : a simple span
        html1 += copies[$(this).text()];
      }
    });
    return html1;
  }

  function storeProducts(obj) {
    var aProduct = {};

    //get the product id
    var productId = $(obj).find('id').text();

    //get all the properties of a product
    var bulletContent = '';
    $(obj).find('bullets').find('bullet').each(function () {
      bulletContent += copies[$(this).text()] + '<br />';
    });

    aProduct.bullet = bulletContent;
    aProduct.whyToHead1 = copies[$(obj).find('whytobuy_header_1').text()];
    aProduct.whyToCopy1 = getWhyToCopy($(obj).find('whytobuy_copy_1'));
    aProduct.whyToHead2 = copies[$(obj).find('whytobuy_header_2').text()];
    aProduct.whyToCopy2 = getWhyToCopy($(obj).find('whytobuy_copy_2'));
    aProduct.whyToHead3 = copies[$(obj).find('whytobuy_header_3').text()];
    aProduct.whyToCopy3 = getWhyToCopy($(obj).find('whytobuy_copy_3'));
    aProduct.whyToHead4 = copies[$(obj).find('whytobuy_header_4').text()];
    aProduct.whyToCopy4 = getWhyToCopy($(obj).find('whytobuy_copy_4'));

    aProduct.medias = [];
    $(obj).find('media_items').find('media_id').each(function () {
      aProduct.medias.push($(this).text());
      medias[$(this).text()].products.push(productId);
    });

    aProduct.accessories = [];
    $(obj).find('accessories').find('accessory_id').each(function () {
      aProduct.accessories.push($(this).text());
    });

    aProduct.id = productId;
    aProduct.name = copies[$(obj).find('name').text()];
    aProduct.menuDesc = copies[$(obj).find('menu_description').text()];
    aProduct.shortDesc = copies[$(obj).find('short_description').text()];
    aProduct.headlineDesc = copies[$(obj).find('headline_description').text()];
    aProduct.specif = $(obj).find('product_specs_xml').text();
    aProduct.smallImage = '' + locations[$(obj).find('small_image').text()];
    aProduct.mediumImage = '' +  locations[$(obj).find('medium_image').text()];
    aProduct.bigImage = '' + locations[$(obj).find('big_image').text()];
    aProduct.categoryId = $(obj).find('category_id').text();
    aProduct.isNew = ($(obj).attr('isnew') == 'true' ? true:false);
    aProduct.slideshow = '' + locations[$(obj).find('slideshow').text()];

    // store the ref of product into products array and categories array (according to its category)
    products[productId] = aProduct;
    categories[aProduct.categoryId].products.push(aProduct);
  }

  function addBannersInDom(pageName) {
    var bannersToLoad = pages[pageName];
    for (var ind = 0; ind < bannersToLoad.length; ind++) {
      var ban = banners[bannersToLoad[ind]];
      $('#banners_container').append('<div class="banner"><div id="banner_' + bannersToLoad[ind] + '"></div></div>');
      open_banner(ban.src, 'banner_' + bannersToLoad[ind], ban.width, ban.height);
    }
  }

  function addProductsInDom(type) {
    var menuWidth = 0;
    var i = '';

    // check if we need to build the menu too
    var addMenu = ($('#submenu tbody tr').length === 0);
    var addMenu2 = ($('#submenu2 tbody tr').length === 0);

    // declare the var in case..
    var headerHTML = '';
    // MSP
    var rowsHTML = [];
    var productClass = 'product';
    categHTML = '';
    maxLenght = 0;

    for (i in categories) {
      if (i !== '') {
        maxLenght = Math.max(categories[i].products.length, maxLenght);
      }
    }

    for (i in categories) {

      if (i !== '') {
        menuWidth += 170;

        if (addMenu) {
          headerHTML += '<th>' + categories[i].name + '</th>';
        }


        var categLabel = '<div class="category_item">' +
        '<div class="arrow"></div><div class="categ_item_left"></div><div class="categ_item_middle">' + categories[i].name + '</div><div class="categ_item_right"></div>' +
        '</div>';

        var categContent = '<div class="category_products">';
        categContent += '<h4>' + categories[i].subhead + '</h4>';
        categContent += '<div class="line line_space"></div>';

        if (type == 'overall') {
          productClass = 'big_product';
          categContent = '<div class="category_products bigproduct">' +
          '<h4>' + categories[i].subhead + '</h4>' +
          '<p style="margin-left: 4px;">' + categories[i].desc + '</p>' +
          '<div class="line line_space"></div>';
        }

        productList = categories[i].products;

        var productRow;

        for (var j = 0; j < maxLenght; j++) {
          if (rowsHTML[j] === undefined) {
            rowsHTML[j] = '';
          }
          if (productList[j] === undefined) {
            rowsHTML[j] += '<td>&nbsp;</td>';
          } else {

            var new_star = "";
            if (productList[j].isNew) {
              new_star = '<img class="new_star" alt="new" src="'+locations['little-new-star']+'"></img>';
            }

            if (productList[j].name.indexOf('LEGRIA') != -1) {
              productName = (productList[j].name).replace(/legria/i, '');


              headerProd = '<h6><div class="float_left"><span style="color:#000;">LEGRIA</span>' + productName + '</div>'+ new_star + '</h6><div class="clearer"></div>';
            } else {
              headerProd = '<h6><div class="float_left">' + productList[j].name + '</div>'+ new_star + '</h6><div class="clearer"></div>';
            }
            rowsHTML[j] += '<td onclick="contentManager.triggerProduct(\'' + productList[j].id + '\');">' + headerProd + productList[j].bullet + '</td>';

            if (j % 2 === 0) {
              if (j !== 0) {
                categContent += '<div class="line"></div>';
              }
            }

            var imageURL = productList[j].smallImage;
            if (type == 'overall') {
              imageURL = productList[j].mediumImage;
              productDesc = productList[j].shortDesc;
            } else {
              productDesc = productList[j].bullet;
            }

            var bluestar = '';
            if (productList[j].isNew) {
              bluestar = '<div class="bluestar"></div>';
            }
            categContent +=
            '<div onclick="contentManager.triggerProduct(\'' + productList[j].id + '\');" class="' + productClass + '" id="' + productList[j].id + '">' +
            bluestar +
            '<img class="product_image" src="' + imageURL + '" />' +
            '<div class="product_headline">' +
            // remove the small star and float for the header in the main body.
            headerProd.replace(new_star,"").replace("float_left","") +
            '<p>' + productDesc + '&nbsp;<img src="' + locations.arrow_right_img + '" /></p>' +
            '</div>' +
            '</div>';
          }
        }
        categContent += '</div>';
        categHTML += categLabel + categContent;
      }
    }

    if (addMenu) {
      var menuHTML = '<tbody>';
      menuHTML += '<tr>' + headerHTML + '</tr>';
      for (k = 0; k < rowsHTML.length; k++){
        menuHTML += '<tr>' + rowsHTML[k] + '</tr>';
      }
      menuHTML += '</tbody>';
      $('#submenu').html(menuHTML);

      var tweak = 10;
      if (jQuery.browser.msie) {
        tweak = 2;
      }

      $('.bottom_middle').css('width', (menuWidth + tweak) + 'px');
      $('#link_container').css('width', (menuWidth + tweak + 18) + 'px');
    }

    //ordered lists would've preferable here but the events misfire in IE
    var techsMenuHTML = '<table style="width:100%;"><tbody>';
    var techsMenuRow = "";

    $.each(medias, function(media){
      var onClick = 'onclick="contentManager.triggerMedia(\'' + medias[media].id + '\');"';
      techsMenuRow += "<tr><td "+onClick+"'><h6>"+medias[media].title+"</h6></td></tr>";
    });

    techsMenuHTML += techsMenuRow;
    techsMenuHTML += '</tbody></table>';

    $('#submenu2').html(techsMenuHTML);

    var tweak = 10;
    if (jQuery.browser.msie) {
      tweak = 2;
    }

    $('#bottom_middle2').css('width', (200) + 'px');
    $('#link_container2').css('width', (200 + 18) + 'px');

    $('#categories_container').html(categHTML);
    $('.' + productClass).hover(
      function () {
        $(this).children('.bluestar').fadeOut();
      },
      function () {
        $(this).children('.bluestar').fadeIn();
      }
    );

    menuHeight = -($('#submenu2').height() + 35);
    $('#menu_wrapper', '#menu_wrapper2').css({"top": menuHeight + "px"});

    $('#menu_nav_products').bind("mouseenter", function () {
      closeTechnologyMenu();
      $('#menu_wrapper').css({
        "top": "33px"
      });
    });

    // MSP
    $('#menu_nav_legria').bind("mouseenter", function () {
      closeProductsMenu();
      $('#menu_wrapper2').css({
        "top": "33px"
      });
    });

    $('#submenu').bind("mouseleave", function () {
      closeProductsMenu();
    });

    $('#submenu2').bind("mouseleave", function () {
      closeTechnologyMenu();
    });

    $('#menu_nav_home,#dummy_field').bind("mouseenter", function () {
      closeMenu();
    });
  }

  function fixIePngs() {
    if (jQuery.browser.msie) {
      if (jQuery.browser.version == '6.0') {
        transformPng('.corner_left', 'corner_left', 'image');
        transformPng('.bottom_middle', 'bottom_middle', 'scale');
        transformPng('.corner_right', 'corner_right', 'image');
        transformPng('.bluestar', 'bluestar', 'image');
        transformPng('#footer_rt', 'footer_rt', 'image');
      }
    }
  }

  function transformPng(selector, key, sizing) {
    $(selector).css({'background': 'none'});
    $(selector).css({'filter': 'progid:DXImageTransform.Microsoft.AlphaImageLoader(src="' + locations[key] + '", sizingMethod="' + sizing + '")'});
  }

  function productOver(elem) {
  }

  function productOut(elem) {
    $(elem).children('.bluestar').fadeOut();
  }

  function closeMenu() {
    closeProductsMenu();
    closeTechnologyMenu();
  }

  function closeProductsMenu() {
    $('#menu_wrapper').css({"top": "-600px"});
  }

  function closeTechnologyMenu() {
    $('#menu_wrapper2').css({"top": "-600px"});
  }

  function triggerMedia(id) {
    //dhtmlHistory.add("media="+id,"media");
    closeMenu();
    contentManager.openMedia(id);
    //$('html,body').animate({scrollTop: 0}, 700);
    $.scrollTo(0, 700);
  }

  function triggerProduct(id) {
    closeMenu();
    $('.selected').addClass('non_selected');
    $('.selected').removeClass('selected');
    $('#menu_nav_products').removeClass('non_selected');
    $('#menu_nav_products').addClass('selected');
    dhtmlHistory.add("product=" + id, "product");
    openProduct(id);
  }

  function isDomLoaded() {
    return isTechInDom;
  }

  /* load product in document, we use innerhtml for performance purpose */
  function loadTechSpecInDom(productSpecifications) {
    var htmlContent = '';
    var subSpecif = '';
    var j = '';

    for (var i in productSpecifications) {
      if (i != 'footnotes') {
        htmlContent += '<h6 class="with_offset">' + i + '</h6>';
        subSpecif = productSpecifications[i];
        htmlContent += '<table cellspacing="0"><tbody>';
        for (j in subSpecif) {
          if (j !== '' && subSpecif[j] !== '') {
            htmlContent += '<tr><td class="tech_title">' + j + '</td><td class="tech_value">' + subSpecif[j] + '</td></tr>';
          }
        }
        htmlContent += '</tbody></table>';
      } else {
        htmlContent += '<div style="border-top: solid 2px #999; margin-top: 24px;">';
        subSpecif = productSpecifications[i];
        htmlContent += '<table cellspacing="0"><tbody>';
        for (j in subSpecif) {
          if (j !== '' && subSpecif[j] !== '') {
            htmlContent += '<tr><td class="tech_title gray">' + j + '</td><td class="tech_value gray">' + subSpecif[j] + '</td></tr>';
          }
        }
        htmlContent += '</tbody></table>';
      }
    }

    $('#tech_data').html(htmlContent);
    $('#preloader').hide();
    $('#tech_data').show();

    isTechInDom = true;
  }

  function loadKeyFeaturesInDom(keyFeature) {
    //console.debug("MSP: loadKeyFeaturesInDom");
    var htmlContent = '<div class="key_feature">';
    htmlContent += keyFeature;
    htmlContent += '</div>';

    //console.debug("MSP: htmlContent: "+htmlContent);
    $('#key_features_data').html(htmlContent);
    $('#preloader').hide();
    $('#key_features_data').show();

    isKeyFeatureInDom = true;
  }

  function loadExternalLinksInDom(externalLinks){
    //console.debug("MSP: loadExternalLinksInDom");
    var htmlContent = '';
    
    for (var i = 0; i < externalLinks.length; i++) {
      var externalLink = externalLinks[i];
      if (externalLink.link_type == 'specs') {
        htmlContent += '<a href="'+linksURL['canon_link'] + externalLink.href.replace("?specs=1","")+'">'; //the specs URL already exists so..
        htmlContent += externalLink.display_text;
        htmlContent += '</a><br />';
      }
    }

    $('#external_links').html(htmlContent);
  }


  function openMedia(mediaId) {
    pageTracker._trackPageview("/" + window.location.hash + "/" + mediaId);
    var theMedia = medias[mediaId];
    var swf_file = null;
    var video_server = null;
    var flashvars = {};
    var subtitles_xml = null;
    var images = null;
    
    if (theMedia) {
      switch (theMedia.type) {
      case 'slideshow':
        swf_file = (theMedia.swfUrl !== undefined ? theMedia.swfUrl:config.defaultSlideShowPlayer);
        flashvars.images = theMedia.images;
        var video_file = null;
        video_server = null;
        subtitles_xml = null;      
        //open_flash(swf_file,video_file,video_server,subtitles_xml,images);
        open_flash(swf_file, '', flashvars, true);
        break;
      
      case 'canon_internal':
        swf_file = (theMedia.swfUrl !== undefined ? theMedia.swfUrl:config.defaultVideoPlayer);
        video_server = null;        
        subtitles_xml = null;
        images = null;
        flashvars.video_server = video_server;
        flashvars.video_file = theMedia.flvName;
        if (theMedia.subUrl !== '') {
          flashvars.subtitles_xml = theMedia.subUrl;
        }
        flashvars.autoplay = theMedia.autoPlay;
        //open_flash(swf_file,video_file,video_server,subtitles_xml,images);
        open_flash(swf_file, '', flashvars, true);
        break;
      
      case 'canon_external':
        swf_file = (theMedia.player !== undefined ? theMedia.player:config.defaultVideoPlayer);
        video_server = (theMedia.flvPath !== '' ? theMedia.flvPath:config.defaultServerPath);
        subtitles_xml = null;
        images = null;
        flashvars.video_server = video_server;
        flashvars.video_file = theMedia.flvName;
        if (theMedia.subUrl !== '') {
          flashvars.subtitles_xml = theMedia.subUrl;
        }
        flashvars.subtitles_xml = subtitles_xml;
        flashvars.autoplay = theMedia.autoPlay;      
        //open_flash(swf_file,video_file,video_server,subtitles_xml,images);
        open_flash(swf_file, '', flashvars, true);      
        break;
        
      case 'external_video':      
        open_flash(theMedia.swfUrl, theMedia.extraParams, null, false);
        break;
        
      default:
        break;
      }
    }
  }

  function open_flash(media_swf_uri, media_swf_query, flashvars_, ownPlayer) {
    var swf_express = locations.expressInstall;
    var flashvars = (flashvars_ !== null ? flashvars_:{});
    flashvars.fullscreen_infobutton = copies.fullscreen_infobutton;
    
    var params = {};
    params.play = "true";
    params.loop = "true";
    params.menu = "true";
    params.quality = "best";
    params.scale = "showall";
    params.bgcolor = "#000000";
    params.wmode = "opaque";
    params.devicefont = "true";
    params.allowfullscreen = "true";
    params.allowscriptaccess = "sameDomain";
    
    var attributes = {};
    attributes.id = "flash_movie";
    attributes.align = "middle";
    
    if (ownPlayer) {
      attributes.onfocus = 'this.blur()';
    }
    
    swfobject.embedSWF(
      media_swf_uri + media_swf_query,
      "flash_movie",
      608,
      342,
      "9.0.115",
      swf_express,
      flashvars,
      params,
      attributes
    );
  }

  function open_banner(swf_src, div, width, height) {
    var swf_express = '' + locations.expressInstall;
    var flashvars = {};
    
    var params = {};
    params.play = "true";
    params.loop = "true";
    params.menu = "true";
    params.quality = "high";
    params.bgcolor = "#000000";
    params.scale = "exactfit";
    params.wmode = "opaque";
    params.devicefont = "false";
    params.allowfullscreen = "true";
    params.allowscriptaccess = "always";
    
    var attributes = {};
    attributes.id = div;
    attributes.align = "middle";
    
    swfobject.embedSWF(
      swf_src,
      div,
      width,
      height,
      "9.0.115",
      swf_express, // express
      flashvars,
      params,
      attributes
    );
  }

  return {
    init: init,
    openMedia: openMedia,
    triggerMedia: triggerMedia,
    isDomLoaded: isDomLoaded,
    triggerProduct: triggerProduct,
    openAllProducts: openAllProducts,
    openHome: openHome,
    openProduct: openProduct,
    closeMenu: closeMenu,
    productOver: productOver,
    productOut: productOut,
    openLegria: openLegria,
    activateLeave: activateLeave,
    switchCountry: switchCountry
  };

}();
