window.dhtmlHistory.create({
  toJSON: function(o) {
    return Object.toJSON(o);
  },
  fromJSON: function(s) {
    return s.evalJSON();
  }
});

var hoptListener = function(newLocation, historyData) {
  if ((newLocation != 'index') && (newLocation != '') && (newLocation != null)){
    if ($('section_nav').visible()){
      swapSection(newLocation);
    }
    else {
      loadSectionFromMain(newLocation);
    }
  }
  else {
    unloadSectionToMain();
  }
}

Event.observe(window, 'load', function() {
  dhtmlHistory.initialize();
  dhtmlHistory.addListener(hoptListener);
});

var in_transition  = false;
var loaded_section = null;

function loadSectionFromMain(section){
  if (!in_transition) {
    in_transition  = true;
    dhtmlHistory.add(section, 'index');
    loaded_section = section;

    new Ajax.Updater('content_text_block', '/company/'+section, {
      method: 'get',
      asynchronous: true,
      evalScripts: true,
      onComplete: function(request){
        Effect.BlindDown('main_content', {
          duration: 0.7,
          queue: {
            scope: 'content',
            position: 'end'
          }
        });
      }
    });

    $('main_medallion_home_info').hide();
    $('main_medallion_about_info').hide();
    $('main_medallion_portfolio_info').hide();
    $('main_medallion_partners_info').hide();
    $('main_medallion_contact_info').hide();

    setTimeout("Effect.Fade('business_quote',{duration: 1.0})", 0);
    setTimeout("Effect.DropOut('main_medallion_home',{duration: 1.0, queue: { position: 'front', scope: 'content'}})", 0);
    setTimeout("Effect.DropOut('main_medallion_about',{duration: 1.0})", 75);
    setTimeout("Effect.DropOut('main_medallion_portfolio',{duration: 1.0})", 150);
    setTimeout("Effect.DropOut('main_medallion_partners',{duration: 1.0})", 225);
    setTimeout("Effect.DropOut('main_medallion_contact',{duration: 1.0})", 300);
    setTimeout("Effect.Appear('side_medallion_"+section+"',{duration: .5})", 1000);
    setTimeout("Effect.Appear('section_nav',{duration: .5})", 1000);
    setTimeout("in_transition = false;", 1800);
  }
}


function unloadSectionToMain(){
  if (!in_transition) {
    in_transition  = true;
    setTimeout("Effect.BlindUp('main_content',{duration: 0.5})", 0);
    setTimeout("Effect.Fade('side_medallion_"+loaded_section+"',{duration: 1.0})", 0);
    setTimeout("Effect.Fade('section_nav',{duration: 1.0})", 0);
    setTimeout("Effect.Appear('main_medallion_home',{duration: 1.0})", 400);
    setTimeout("Effect.Appear('main_medallion_about',{duration: 1.0})", 475);
    setTimeout("Effect.Appear('main_medallion_portfolio',{duration: 1.0})", 550);
    setTimeout("Effect.Appear('main_medallion_partners',{duration: 1.0})", 625);
    setTimeout("Effect.Appear('main_medallion_contact',{duration: 1.0})", 700);
    setTimeout("Effect.Appear('business_quote',{duration: 1.0})", 775);
    setTimeout("in_transition = false;", 1800);
    dhtmlHistory.add('index', loaded_section);
    loaded_section = null;
  }
}


function swapSection(section){
  if (loaded_section && !in_transition && (loaded_section != section)) {
    in_transition  = true;

    $('content_text_block').setOpacity(0);
    Effect.Fade('side_medallion_'+loaded_section, {duration: 1.5});
    Effect.BlindUp('main_content',{duration: 0.4, queue: {
      scope: 'content',
      position: 'end'
    }});

    new Ajax.Updater('content_text_block', '/company/'+section, {
      method: 'get',
      asynchronous: true,
      evalScripts: true,
      onComplete: function(request){
        Effect.BlindDown('main_content', {
          duration: .8,
          queue: {
            scope: 'content',
            position: 'end'
          }
        });
        Effect.Appear('content_text_block', {
          duration: 0.1,
          queue: {
            scope: 'content',
            position: 'end'
          }
        });
      }
    });

    Effect.Appear('side_medallion_'+section, {duration: 1.5});
    dhtmlHistory.add(section, loaded_section);
    loaded_section = section;
    setTimeout("in_transition = false;", 1800);
  }
}


var Rollover = Class.create({
  initialize: function(id, options) {
    this.id = id;
    this.origsource = $(this.id).src;
    this.setOptions(options);
    this.preloadRollover();
    this.rollbackImage();
    this.observeMouse();
  },

  setOptions: function(options) {
    this.options = {
      prefix: 'on-'
    };
    Object.extend(this.options, options || {});
  },

  observeMouse: function() {
    $(this.id).observe('mouseover', this.rolloverImage.bindAsEventListener(this));
    $(this.id).observe('mouseout', this.rollbackImage.bindAsEventListener(this));
  },

  preloadRollover: function() {
    this.preload = new Image();
    this.preload.setAttribute('src',this.parseRollbackSource());
    this.preload_orig = new Image();
    this.preload_orig.setAttribute('src',this.origsource);
  },

  parseRollbackSource: function() {
    path = this.origsource.match(/(.*)\/(.*\.(png|gif|jpg))/)[1];
    filename = this.origsource.gsub(path, '').substr(1);
    return path + '/' + this.options.prefix + filename;
  },

  rolloverImage: function(e) {
    if (!in_transition) {
      $(this.id).setAttribute('src',this.parseRollbackSource());
      if (this.options.info) {
        $(this.id + this.options.info).show();
      }
    }
  },

  rollbackImage: function(e) {
    $(this.id).setAttribute('src',this.origsource);
    if (this.options.info) {
      $(this.id + this.options.info).hide();
    }
  }
});
