/*
** =======================================================
** Copyright © 2006 Beware of Design. All rights reserved. 
** -------------------------------------------------------
** Site:     www.bewareofdesign.com
** File:     src_sparks.css
** Purpose:  Display sparkler sparks in a region.
** Author:   Greg Gurr
**
** Acknowledgements:
**   Portions of this code are from a fireworks script
**   Copyright (c) Matt Gabbert. All rights reserved.
**   http://www.nolag.com mgabbert@usrtoday.com
**
** -------------------------------------------------------
** 2005-Dec-20 Created
** 2006-Nov-13 Re-architected
** =======================================================
*/

/*
** For sparkspark colours and fonts, provide a list of as many as you'd like.
*/
var sparkfnum = 10  // number of sparks (recommended: <= 40)
var sparkchar = '*' // spark character (recommended: *)
var sparkfmin = 12  // minimum spark size (pixels)
var sparkfmax = 14  // maximum spark size (pixels)
var sparkmsec = 50  // timer period between spark movement recalcs (msec)
var sparkfcol = new Array('#fff','#ddd','#aaa') // spark colors (in CSS RGB shorthand)
var sparkfont = new Array('Arial')

var sparkpowr = 1
var lit = 0		// lit == 1, sparks running; lit == 0, sparks off
var countdown = 0	// let lit sparks wind down
var ofs_x
var ofs_y

var sparks = new Array() // array of sparks

function randint(range) {		
  return Math.floor(range*Math.random())
}

function sign(v) {
  if (v < 0) return -1
  if (v > 0) return 1
  return 0
}

function randsign(){
  return (Math.random() < 0.5) ? -1 : 1
}

/*
** p - parent container (DIV) for sparks
** ins_x see ofs_x
** ins_y see ofs_y
**
** Note: Call only once because DIV tags are created (but never destroyed)
*/
function sparkinit(p, ins_x, ins_y) {
  var i, spark, sparkstyle
  ofs_x = ins_x
  ofs_y = ins_y
  for (i=0 ; i < sparkfnum ; ++i) {
    sparks[i] = elm(p).appendChild(document.createElement('DIV'))
    spark = sparks[i]
    spark.id = 's'+i
    spark.className = 'spark'
    wrt(spark, sparkchar)
    sparkstyle = spark.style
    sparkstyle.left = '0px' // units very important for Netscape
    sparkstyle.top  = '0px' //
  }
}

function sparkon() {
  var i, spark, sparkstyle

  if ((lit == 1) || (countdown > 0)) return

  lit = 1

  for (i=0 ; i < sparkfnum ; ++i) {
    spark = sparks[i]
    sparkstyle = spark.style
    sparkstyle.fontFamily = sparkfont[randint(sparkfont.length)]
    sparkstyle.color = sparkfcol[randint(sparkfcol.length)]
    spark.size = randint(sparkfmax-sparkfmin) + sparkfmin
    sparkstyle.fontSize =   spark.size + 'px'
    sparkstyle.lineHeight = sparkstyle.fontSize
    sparkstyle.visibility = "visible"
    sparkstyle.left = ofs_x + 'px' // units very important for Netscape
    sparkstyle.top  = ofs_y + 'px' //
    createSpark(i)
  }
}

function sparkoff() {
  if (lit == 1) countdown = sparkfnum
  lit = 0
}

function createSpark(i){
  var dx = Math.round(Math.random()*10) * randsign()
  var dy = Math.round(Math.random()*10) * randsign()
  moveTo(i, ofs_x, ofs_y, dx, dy)
}

function moveTo(i, tempx, tempy, dx, dy) {
  var spark = sparks[i]
  var sparkstyle = spark.style
  if (dx || dy) {
    tempx += dx
    tempy += dy
    sparkstyle.left = (ofs_x + tempx) + 'px'
    sparkstyle.top  = (ofs_y + tempy) + 'px'
    dx -= (sign(dx) * sparkpowr)
    dy -= (sign(dy) * sparkpowr)
    setTimeout('moveTo(' + i + ',' +  tempx + ',' + tempy + ',' + dx + ',' + dy + ')', sparkmsec)
  } else {
    if (lit == 1) {
      setTimeout('createSpark(' + i + ')', sparkmsec)
    } else {
      sparkstyle.visibility = "hidden"
      --countdown
    }
  }
}

// Initialize the sparkler...
//
function doInit() { 
  sparkinit('div_b-pds', 127, 12)
  sparkon()
}

window.onload = doInit
