/**
 * scripts for ajax pages
 */ 
function createHttpRequestObject()
{
  try {
    xhr = new ActiveXObject("Microsoft.XMLHTTP");    // Trying Internet Explorer 
  }
  catch(e) { // Failed 
    xhr = new XMLHttpRequest()
  }
  
  return xhr;
}

function csvArray(csv)
{
  var csArray = csv.split(/", *"/);
  var counter = csArray.length - 1;
  
  for ( var i = 0; i <= counter; ++i )
  {
    // single item response?  Will have leading and trailing "
    if ( counter == 0 )
      csArray[i] = csArray[i].substring(1,csArray[i].length - 1);
    // first one will have a leading "
    else if ((i == 0) || ( counter == 0 ))
      csArray[i] = csArray[i].substr(1);
    // last will still have the trailing "
    else if (i == counter)
      csArray[i] = csArray[i].substring(0,csArray[i].length - 1);
      
//    alert("||"+csArray[i]+"||");

    csArray[i] = csArray[i].replace(/\\"/g, '"');
  }
  return csArray;
}

// NBNBNBNB! - this apparently no longer works in FF3.

/* overrides native split */

/*
	Cross-Browser Split 0.2.1
	By Steven Levithan <http://stevenlevithan.com>
	MIT license
*/

var nativeSplit = nativeSplit || String.prototype.split;

String.prototype.split = function (s /* separator */, limit) {
	// If separator is not a regex, use the native split method
	if (!(s instanceof RegExp))
		return nativeSplit.apply(this, arguments);

	/* Behavior for limit: If it's...
	 - Undefined: No limit
	 - NaN or zero: Return an empty array
	 - A positive number: Use limit after dropping any decimal
	 - A negative number: No limit
	 - Other: Type-convert, then use the above rules */
	if (limit === undefined || +limit < 0) {
		limit = false;
	} else {
		limit = Math.floor(+limit);
		if (!limit)
			return [];
	}

	var	flags = (s.global ? "g" : "") + (s.ignoreCase ? "i" : "") + (s.multiline ? "m" : ""),
		s2 = new RegExp("^" + s.source + "$", flags),
		output = [],
		lastLastIndex = 0,
		i = 0,
		match;

	if (!s.global)
		s = new RegExp(s.source, "g" + flags);

	while ((!limit || i++ <= limit) && (match = s.exec(this))) {
		var zeroLengthMatch = !match[0].length;

		// Fix IE's infinite-loop-resistant but incorrect lastIndex
		if (zeroLengthMatch && s.lastIndex > match.index)
			s.lastIndex = match.index; // The same as s.lastIndex--

		if (s.lastIndex > lastLastIndex) {
			// Fix browsers whose exec methods don't consistently return undefined for non-participating capturing groups
			if (match.length > 1) {
				match[0].replace(s2, function () {
					for (var j = 1; j < arguments.length - 2; j++) {
						if (arguments[j] === undefined)
							match[j] = undefined;
					}
				});
			}

			output = output.concat(this.slice(lastLastIndex, match.index), (match.index === this.length ? [] : match.slice(1)));
			lastLastIndex = s.lastIndex;
		}

		if (zeroLengthMatch)
			s.lastIndex++;
	}

	return (lastLastIndex === this.length) ?
		(s.test("") ? output : output.concat("")) :
		(limit      ? output : output.concat(this.slice(lastLastIndex)));
};
