/***
** Global variables.
*/

// the collected parameters appended to the current url
var page_args = new Array();

/***
** Global functions.
*/

function addLoadEvent(func)
{
	attachCustomEvent(window, "onload", func);
}

function attachCustomEvent(obj, event, func, arguments)
{
  var oldevent = obj[event];
  if (typeof obj[event] != 'function')
  {
    obj[event] = func;
  }
  else
  {
    obj[event] = function(arguments)
    {
      oldevent(arguments);
      func(arguments);
    }
  }
}




function setUrlArgs()
{
	var args = (arguments ? arguments : setVars.arguments);
	var url = args[0];
	var varStr = '';

	var list;
	for(var x=1; x<args.length; x++)
	{
		list = args[x];
		var firstarg = true;
		for (var key in list)
		{
			if (!firstarg) varStr += '&'; else firstarg = false;
			varStr += escape(key) + '=' + escape(list[key]);
			
		}
		if(x < args.length-1) varStr += '&';
	}
	
	return varStr == '' ? url : url + '?' + varStr;
}

function getUrlArgs()
{
	var args = (arguments ? arguments : setVars.arguments);
	var url = args[0];
	var params = new Array();
	var url_params = url.split('?');
	if (url_params.length > 1)
	{
		params = url_params[1].split('&');
	}

	var retVal = [];
	if (args[1])
		retVal = args[1];

	for (p in params)
	{
		var arg = params[p].split('=');
		if (arg.length == 2)
		{
			var key = unescape(arg[0]);
			var value = unescape(arg[1]);
			
			if (retVal[key])
			{
				var dCval = decode(retVal[key]);
				var dNval = decode(value);
				if ((retVal[key] != value) && (dCval != "") && (dNval != ""))
				{
					retVal[key] = encode(dNval + "," + dCval);
				}
				else if ((retVal[key] != value) && (dCval == "") && (dNval == ""))
				{
					retVal[key] = value + "," + retVal[key];
				}
				else if (retVal[key] == value)
				{
					//ignore
				}
				else
				{
					throw "invalid page args: " + key + "=" + value;
				}
			}
			else
			{
				retVal[unescape(arg[0])] = unescape(arg[1]);
			}
		}
	}
	
	//if (!args[1])
	return retVal;
}

//this function makes sure any number is properly rounded to two decimal places
function fix(num) {
 var string = "" + Math.round(num*Math.pow(10,2))/Math.pow(10,2); 				// fix that damn math rounding bug, AAARGGGGGGG!!!
 if (string.indexOf('.') == -1)												// then massage the data to get a useful price
  return string + '.00';
 var seperation = string.length - string.indexOf('.');
 if (seperation > 3)
  return string.substring(0,string.length-seperation+3);
 else if (seperation == 2)
  return string + '0';
 return string;
}

function setCopyright()
{
	var today=new Date();
	document.getElementById("footer").innerHTML = //firstChild.nodeValue = 
		"Copyright 2001-" + today.getFullYear() + " TahDah! Inc. <br /> All Rights Reserved.";
}


// This code was written by Tyler Akins and has been placed in the
// public domain.  It would be nice if you left this header intact.
// Base64 code from Tyler Akins -- http://rumkin.com

var keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";

function encode(input) {
   var output = "";
   var chr1, chr2, chr3;
   var enc1, enc2, enc3, enc4;
   var i = 0;

   if (input)
   {
	   do {
		  chr1 = input.charCodeAt(i++);
		  chr2 = input.charCodeAt(i++);
		  chr3 = input.charCodeAt(i++);

		  enc1 = chr1 >> 2;
		  enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
		  enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
		  enc4 = chr3 & 63;

		  if (isNaN(chr2)) {
		     enc3 = enc4 = 64;
		  } else if (isNaN(chr3)) {
		     enc4 = 64;
		  }

		  output = output + keyStr.charAt(enc1) + keyStr.charAt(enc2) + 
		     keyStr.charAt(enc3) + keyStr.charAt(enc4);
	   } while (i < input.length);
   }
   return output;
}

function decode(input, allowBinary) {
   
   allowBinary = typeof(allowBinary) != 'undefined' ? allowBinary : false;

   var output = "";
   var chr1, chr2, chr3;
   var enc1, enc2, enc3, enc4;
   var i = 0;

   if (input)
   {
	  // remove all characters that are not A-Z, a-z, 0-9, +, /, or =
      input = input.replace(/[^A-Za-z0-9\+\/\=]/g, "");

      do {
         enc1 = keyStr.indexOf(input.charAt(i++));
         enc2 = keyStr.indexOf(input.charAt(i++));
         enc3 = keyStr.indexOf(input.charAt(i++));
         enc4 = keyStr.indexOf(input.charAt(i++));

         chr1 = (enc1 << 2) | (enc2 >> 4);
         chr2 = ((enc2 & 15) << 4) | (enc3 >> 2);
         chr3 = ((enc3 & 3) << 6) | enc4;

         output = output + String.fromCharCode(chr1);

         if (enc3 != 64) {
            output = output + String.fromCharCode(chr2);
         }
         if (enc4 != 64) {
            output = output + String.fromCharCode(chr3);
         }
      } while (i < input.length);

   }
   
   if (!allowBinary)
      return (output.replace(/[^\w]/g, "") != "") ? output : "";
   else
      return output;
}


function appendSession(e)
{
	var event = e;
	var targ;
	if (!event) event = window.event;
	if (event.target) targ = event.target;
	else if (event.srcElement) targ = event.srcElement;
	if (targ.nodeType == 3) // defeat Safari bug
		targ = targ.parentNode;

	var target_args = [];
	for (var p in page_args)
		target_args[p] = page_args[p];
	
	getUrlArgs(targ.href, target_args);
	var target_url = targ.href.split('?')[0];

	document.location = setUrlArgs(target_url, target_args);
	return false;
}

/***
** functions to execute when the page loads.
*/
addLoadEvent(setCopyright);
addLoadEvent(function() {page_args = getUrlArgs(document.location.href);});
addLoadEvent(function() {
	var links = document.getElementsByTagName('A');
	for (var h in links)
	{
		if (links[h].href)
		{
			links[h].onclick = appendSession;
		}
	}
});

