/**************
 * Note: Alot of this code was not written by me, all authors are credited in the comments before each Object/Function
 *
 * This tookit includes:
 *   Browser detection, sets IE and NS vars based on browser.
 *   Cookie - An object for handling cookies.
 *   disableSubmit - A function that disables the submit on a form after it is clicked to perevnt a form being submitted twice.
 *   formatCurrency - A function that formats a float or int into a dollar value string.
 *   getArgs - A function that returns an array containing the query portion of a URL as name/value pairs
 *
 **************/

if( navigator.appName.indexOf("Netscape") != -1 ) { NS = true; IE = false; }
else if( navigator.appName.indexOf("Microsoft") != -1 ) { NS = false; IE = true; }

// This script and many more are available free online at
// The JavaScript Source!! http://javascript.internet.com

function disableSubmit( theform ) {
	if( document.all || document.getElementById ) { // Test if IE4 or NS6
		for( i = 0; i < theform.length; i++ ) {
			var tempobj = theform.elements[i];
			if( tempobj.type.toLowerCase() == "submit" || tempobj.type.toLowerCase() == "reset" )
			tempobj.disabled = true;
		}
		return true;
	} else {
		return false;
  }
}

// Original:  Cyanide_7 (leo7278@hotmail.com) -->
// Web Site:  http://www7.ewebcity.com/cyanide7 -->
// This script and many more are available free online at -->
// The JavaScript Source!! http://javascript.internet.com -->

function formatCurrency( num ) {
	num = num.toString().replace(/\$|\,/g,'');
	if( isNaN( num ) ) num = "0";
	cents = Math.floor( ( num * 100 + 0.5 ) % 100 );
	num = Math.floor( num ).toString();
	if( cents < 10 ) cents = "0" + cents;
	for( var i = 0; i < Math.floor( ( num.length - ( 1 + i ) ) / 3 ); i++ )
	num = num.substring( 0, num.length - ( 4 * i + 3 ) ) + ',' + num.substring( num.length - ( 4 * i + 3 ) );
	return( '$' + num + '.' + cents );
}

// This example is from JavaScript: The Definitive Guide, 3rd Edition.
// That book and this example were Written by David Flanagan.
// They are Copyright (c) 1996, 1997, 1998 O'Reilly & Associates.
// This example is provided WITHOUT WARRANTY either expressed or implied.
// You may study, use, modify, and distribute it for any purpose,
// as long as this notice is retained.

/*
 * This function parses comma-separated name=value argument pairs from
 * the query string of the URL. It stores the name=value pairs in
 * properties of an object and returns that object.
 */
function getArgs() {
  var args = new Object();
  var query = location.search.substring(1);  	// Get query string.
  var pairs = query.split("&");              	// Break at comma.
  for(var i = 0; i < pairs.length; i++) {
		var pos = pairs[i].indexOf('=');       		// Look for "name=value".
		if (pos == -1) continue;               		// If not found, skip.
		var argname = pairs[i].substring(0,pos);  // Extract the name.
		var value = pairs[i].substring(pos+1); 		// Extract the value.
		args[argname] = unescape(value);          // Store as a property.
  }
  return args;                               	// Return the object.
}

/** Begin Cookie Object **/

// This example is from the book _JavaScript: The Definitive Guide_.
// Written by David Flanagan.  Copyright (c) 1996 O'Reilly & Associates.
// This example is provided WITHOUT WARRANTY either expressed or implied.
// You may study, use, modify, and distribute it for any purpose.

// The constructor function.  Creates a cookie object for the specified
// document,  with a specified name.
// attributes.
// Arguments:
//   document: the Document object that the cookie is stored for.  Required.
//   name: a string that specifies a name for the cookie.  Required.
//   hours: an optional number that specifies the number of hours from now
//          that the cookie should expire.
//   path: an optional string that specifies the cookie path attribute.
//   domain: an optional string that specifies the cookie domain attribute.
//   secure: an optional boolean value that, if true, requests a secure cookie.
//
//  Updated by GreySeer: the remove function now also deletes all properties associated w/ the cookie data

function Cookie(document, name, hours, path, domain, secure){
  // All the predefined properties of this object begin with '$'
  // to distinguish them from other properties which are the values to
  // be stored in the cookie.
	this.$document = document;
  this.$name = name;
	if (hours)
		this.$expiration = new Date((new Date()).getTime() + hours*3600000);
  else
		this.$expiration = null;
  if (path)
		this.$path = path;
	else
		this.$path = null;
  if (domain)
		this.$domain = domain;
  else
		this.$domain = null;
  if (secure)
	 	this.$secure = true;
	else
		this.$secure = false;
}


// This function is the store() method of the Cookie object
function _Cookie_store(){
  // First, loop through the properties of the Cookie object and
  // put together the value of the cookie.  Since cookies use the
  // equals sign and semicolons as separators, we'll use colons
  // and ampersands for the individual state variables we store
  // within a single cookie value.  Note that we escape the value
  // of each state variable, in case it contains punctuation or other
  // illegal characters.
	var cookieval = "";
	for(var prop in this) {
  	// ignore properties with names that begin with '$' and also methods
  	if ((prop.charAt(0) == '$') || ((typeof this[prop]) == 'function')) continue;
		if (cookieval != "") cookieval += '&';
    cookieval += prop + ':' + escape(this[prop]);
	}

  // Now that we have the value of the cookie, put together the
  // complete cookie string, which includes the name, and the various
  // attributes specified when the Cookie object was created.
  var cookie = this.$name + '=' + cookieval;
	if (this.$expiration) cookie += '; expires=' + this.$expiration.toGMTString();
  if (this.$path) cookie += '; path=' + this.$path;
  if (this.$domain) cookie += '; domain=' + this.$domain;
  if (this.$secure) cookie += '; secure';
  // Now store the cookie by setting the magic Document.cookie property
  this.$document.cookie = cookie;
}

// This function is the load() method of the Cookie object
function _Cookie_load(){
  // First, get a list of all cookies that pertain to this document.
  // We do this by reading the magic Document.cookie property
  var allcookies = this.$document.cookie;
  if (allcookies == "") return false;

  // Now extract just the named cookie from that list.
  var start = allcookies.indexOf(this.$name + '=');

  if (start == -1) return false;   // cookie not defined for this page.

  start += this.$name.length + 1;  // skip name and equals sign.

  var end = allcookies.indexOf(';', start);
  if (end == -1) end = allcookies.length;
  var cookieval = allcookies.substring(start, end);

  // Now that we've extracted the value of the named cookie, we've
  // got to break that value down into individual state variable
  // names and values.  The name/value pairs are separated from each
  // other with ampersands, and the individual names and values are
  // separated from each other with colons.  We use the split method
  // to parse everything.
  var a = cookieval.split('&');  // break it into array of name/value pairs
  for(var i=0; i < a.length; i++)  // break each pair into an array
      a[i] = a[i].split(':');

  // Now that we've parsed the cookie value, set all the names and values
  // of the state variables in this Cookie object.  Note that we unescape()
  // the property value, because we called escape() when we stored it.
  for(var i = 0; i < a.length; i++) {
    this[a[i][0]] = unescape(a[i][1]);
	}

  // We're done, so return the success code
	return true;
}

// This function is the remove() method of the Cookie object.
function _Cookie_remove() {
	var cookie;

	for(var prop in this) {
  	// ignore properties with names that begin with '$' and also methods
  	if( ( prop.charAt( 0 ) == '$' ) || ( ( typeof this[prop] ) == 'function' ) ) continue;
		delete this[prop];
	}
	cookie = this.$name + '=';
  if( this.$path ) cookie += '; path=' + this.$path;
  if( this.$domain ) cookie += '; domain=' + this.$domain;
  cookie += '; expires=Fri, 02-Jan-1970 00:00:00 GMT';
  this.$document.cookie = cookie;
}

// Create a dummy Cookie object, so we can use the prototype object to make
// the functions above into methods.new Cookie();
Cookie.prototype.store = _Cookie_store;
Cookie.prototype.load = _Cookie_load;
Cookie.prototype.remove = _Cookie_remove;

/** End Cookie Object **/