// Anime Theme DA Logo version 1.5
// Copyright © 1997-2006 Butz Yung. All rights reserved.
// Do NOT copy or modify any part of the script without permission.
// All comments and notice must be left as is.
// Homepage: http://www.animetheme.com

var texs = new Array()
var currentPic = -1
var dim = 0.03
var m, DA_ready, lastTex, lastImg, initImg, lastVector, DA_image, start_tex
var vectors = new Array()

function DA_disabled_write() {
  if (self.ie_win && self.linkTitle)
    document.write('<h2>' + linkTitle + '</h2>')
}

function startDA() {
  if (!self.DAControl) {
    DA_disabled_write()
    return
  }

  m = DAControl.MeterLibrary
  if (!m) {
    DAControl.style.display = "none"
    DA_disabled_write()
    return
  }

  if (DAControl.View) {
    DAControl.TimerSource = 1
    var p = DAControl.View.Preferences
    p.PutPreference("Texture Quality", 1)
    p.Propagate()
  }

  lastTex = m.StringImage(DATitle, m.Font("Times New Roman", 10, m.Black))
  var X = lastTex.BoundingBox.Max.X.Extract() * 1.1
  var Y = lastTex.BoundingBox.Max.Y.Extract()
  var XY = (X - Y) / 2
  lastTex = m.Overlay(lastTex, m.SolidColorImage(m.White).Crop(m.Point2(0,-XY), m.Point2(X,X-XY)))
  var texBox = lastTex.BoundingBox
  lastTex = m.Overlay(lastTex, m.SolidColorImage(m.White).Crop(texBox.Min,texBox.Max)).MapToUnitSquare()

  var title = '<h2 align=center><a id=DAlink style="text-decoration:none" href="" onMouseOver="switchVector(1)" onMouseOut="switchVector(0)" onClick="return false">'
  title += (autoStart) ? linkTitle : 'Now Loading...'
  title += '</a></h2>'
  document.writeln(title)

  if (autoStart)
    start_tex = true
  else
    window.onload = new Function('DAlink.innerText = linkTitle; if (DA_ready) { switchTex() } else { start_tex = true }')
  var geo = m.ImportGeometryAsync(geoPath + "sphere.x", m.EmptyGeometry)
  DA_image = m.ModifiableBehavior(m.Until(m.EmptyImage, geo.CompletionEvent.ScriptCallback('setTimeout("DA_start()",500)','JScript'), m.EmptyImage))
  DAControl.Image = DA_image
  if (updateInterval)
    DAControl.UpdateInterval = updateInterval

  DAControl.Start()
}

function DA_start() {
  DA_ready = true

  var camera = m.PerspectiveCamera(2*dim, 1.1*dim)
  var light = m.PointLight.Transform(m.Translate3(dim/2, dim/4, 1.5*dim))
  vectors = new Array(m.YVector3, m.YVector3.Transform(m.Rotate3RateDegrees(m.XVector3, rotation)))
  lastVector = m.ModifiableBehavior(vectors[0])
  var renderPath = m.Compose3(
    m.Scale3Uniform(dim/2),
    m.Rotate3RateDegrees(lastVector, rotation) )

  if (start_tex)
    switchTex()
  else {
    initImg = m.ModifiableBehavior(lastTex)
    lastImg = initImg
  }
  var plane = m.UnionGeometry(m.ImportGeometry(geoPath + "sphere.x").Texture(initImg).Transform(renderPath), light).Render(camera)
  DA_image.SwitchTo(plane)
}

function switchVector(num) {
  if (!DA_ready)
    return
  var newVector = m.ModifiableBehavior(vectors[num])
  lastVector.SwitchTo(newVector)
  lastVector = newVector
}

function switchTex(pic, newI) {
  if (!DA_ready)
    return
  if (newI)
    pic += imgs.length
  else {
    if (pic == null) {
      pic = nextImage()
      if (pic == null)
        return
    }
    newI = imgs[pic]
  }
  if (pic == currentPic)
    return
  currentPic = pic

  var completionEvent
  if (!texs[pic]) {
    var imgTex = m.ImportImageAsync(newI, m.EmptyImage)
    completionEvent = imgTex.CompletionEvent
    imgTex = imgTex.Image
    var movieBBox = imgTex.BoundingBox
    var solidImg = m.SolidColorImage(m.White)
    solidImg = solidImg.Crop(movieBBox.Min,movieBBox.Max)
    texs[pic] = m.Overlay(imgTex,solidImg).MapToUnitSquare()
  }

  var newTex = m.ModifiableBehavior(m.Until(m.Overlay(lastTex.OpacityAnim(m.Interpolate(1,0,1)), texs[pic]), m.Timer(generateTime()).ScriptCallback("switchTex()","JScript"), texs[pic]))
  var newImg = (completionEvent) ? m.Until(lastTex, completionEvent, newTex) : newTex

  if (lastImg)
    lastImg.SwitchTo(newImg)
  else
    initImg = newImg
  lastImg = newTex
  lastTex = texs[pic]
}

function nextImage() {
  if (!autoLoad)
    return null
  var pic = currentPic
  if (autoLoad == 3)
    while (currentPic == pic)
      pic = Math.round(Math.random() * imgs.length - 0.5)
  else {
    if (++pic >= imgs.length) {
      pic = 0
      if (autoLoad == 2)
        autoLoad = 3
    }
  }
  return pic
}

function generateTime() {
  var time = fixedInterval + Math.random() * randomInterval
  return time
}

var first_error = true

function error(msg, filename, line) {
  if (first_error) {
    if (line && eval('/unspecified|class|library/i.test(msg)'))
      return true
    if (confirm("An error has occurred in the script on this page.\n\nLine: " + line + "\nError: " + msg + "\n\n" + "Press OK to send me an automatic bug report, or press CANCEL to continue."))
      window.open("mailto:webmaster@animetheme.com?body=" + window.location.href + "%0A" + filename + "%0A" + line + "%0A" + msg + "%0A" + navigator.appName + " " + navigator.appVersion)
    first_error = false
  }
  return true
}

window.onerror = error

