Function.prototype.eventBind = function(obj, iArgs) {
  var method = this
  
  temp = function() {
    argumentsArray = new Array()
    for(var x = 0; x < arguments.length; x++) {
      argumentsArray.push(arguments[x])
    }
    argumentsArray.push(this)
    if(iArgs)
      argumentsArray.push(iArgs)
      
    return method.apply(obj, argumentsArray);
  };

  return temp;
}

function driver() {
  this.lock = 1
  this.ignition()
}

driver.prototype.lockCar = function() {
  this.lock = 0
}
driver.prototype.unlockCar = function() {
  this.lock = 1
}
driver.prototype.islockCar = function() {
  return this.lock
}

driver.prototype.ignition = function() {
  $(".item").click(function(e) {
    this.takeMeThere(arguments[1].id)
  }.eventBind(this))
  $('.itemNav').click(function(e) {
    this.takeMeHere(arguments[1].id)
  }.eventBind(this))
}

driver.prototype.takeMeHere = function(id) {
  parsedId = id.split('go')[1].toLowerCase()
  
  if(this.islockCar()) {
    this.openWindow(parsedId)
  }
}

driver.prototype.takeMeThere = function(id) {
  parsedId = id.split('item')[1].toLowerCase()
  if(this.islockCar()) {
    if(parsedId == 'blog') {
      window.open('http://crackthewalnut.wordpress.com/')
    }
    else if(parsedId == 'home') {
      $('#backgroundLanding')[0].className = 'doorOpened'
      $('#backgroundMain')[0].className = 'doorClosed'
      this.activeDoor(id)
      this.openDoor(parsedId)
    }
    else {
      $('#backgroundLanding')[0].className = 'doorClosed'
      this.activeDoor(id)
      this.openDoor(parsedId)
    }
  }
}

driver.prototype.activeDoor = function(id) {
  if(this.doorActive) {
    this.passiveDoor(this.doorActive)
  }

  $('.'+id+'Image')[0].className = 'itemImage modImage centerDivChild ' + id + 'ImageActive'
  this.doorActive = id
}

driver.prototype.passiveDoor = function(id) {
  $('.'+id+'ImageActive')[0].className = 'itemImage modImage centerDivChild ' + id + 'Image'
}

driver.prototype.openDoor = function(door) {
  if(this.doorOpened) {
    this.closeDoor(this.doorOpened)
  }
  this.doorOpened = door
  
  $('#backgroundMain')[0].className = 'doorOpened'
  this.openWindow(door + '1')
  $('#' + door)[0].className = 'doorOpened'
}

driver.prototype.closeDoor = function(door) {  
  $('#' + door)[0].className = 'doorClosed'
}

driver.prototype.activeWindow = function(carWindow) {
  if(this.windowActive) {
    this.passiveWindow(this.windowActive)
  }
  
  windowClass = 'image' + carWindow[0].toUpperCase() + carWindow.slice(1)
  $('.' + windowClass)[0].className = 'itemNavImage modImage centerDivChild ' + windowClass + 'Active'
  this.windowActive = windowClass
}

driver.prototype.passiveWindow = function(carWindow) {
  $('.' + carWindow + 'Active')[0].className = 'itemNavImage modImage centerDivChild ' + carWindow
}

driver.prototype.openWindow = function(carWindow) {
  type = carWindow.slice(0, carWindow.length-1)
  number = carWindow.slice(carWindow.length-1)
  parseToName = type + '_main' + number
  extension = '.png'
  
  if( (type == 'print' && (number == '1' || number == '2') ) || (type == 'web' && (number == '2' || number == '3' || number == '4') ) ) 
    extension = '.jpg'
  
  if(domImg = $('#'+parseToName)[0])
    domImg.src = 'images/' + type + '/' + parseToName + extension
  
  this.lockCar()
  if(this.windowOpened) {
    this.closeWindow(this.windowOpened, carWindow)
  }
  else {
    $('#' + carWindow).fadeIn('slow', function() {
      this.unlockCar()
    }.eventBind(this))
    this.activeWindow(carWindow)
    this.windowOpened = carWindow
  }
}

driver.prototype.closeWindow = function(carWindowClosed, carWindowOpen) {
  $('#' + carWindowClosed).fadeOut('slow', function() {
    this.activeWindow(carWindowOpen)
    $('#' + this.windowOpened)[0].style.display = 'none'
    this.windowOpened = carWindowOpen
    $('#' + carWindowOpen).fadeIn('slow', function() {
      this.unlockCar()
    }.eventBind(this, carWindowOpen))
  }.eventBind(this, carWindowOpen))
}