
var boa = {};

//
// Get the length of an object - if there's no .length enumerate the properties
// of the object
//
boa.length = function (obj) {
	if (obj.length) return obj.length;
	var x=0;
	for (var i in obj) x++;
	return x;
}

//
// Do a php style print_r on a JS object
//
boa.printR = function(obj)
{
	var breakString = '\n'
	var result = '';

	if (obj.constructor)
	{
		for(var k in obj)
		{
			if((obj[k]!=null) && (obj[k].constructor == Array|| obj[k].constructor == Object))
			{
				result += k+"=>"+typeof(obj)+"("+breakString+"" + this.printR(obj[k])+")"+breakString;
			} 
			else 
			{
				result += k+"=>"+obj[k]+breakString;
			}
		}
	}
	else result = obj + breakString;

	return result;
}

//
// PHP serialize javascript object
boa.serialize = function(a)
{
	var i = 0;
	var s = "";

	for (var k in a)
	{
		i++;

		if (typeof(a[k])=='object')
		{
			
			s += 's:'+String(k).length+':"'+String(k)+'";'+this.serialize(a[k]);
		}
		else
		{
			s += 's:'+String(k).length+':"'+String(k)+'";s:'+String(a[k]).length+':"'+String(a[k])+'";';
		}
	}

	s = "a:"+i+":{"+s+"}";
	
	return s;
}

// requires MochiKit
boa.doSimplePostXMLHttpRequest = function (url/*, ...*/) {
	var self = MochiKit.Async;
	var req = self.getXMLHttpRequest();
	if (arguments.length > 1) {
		var m = MochiKit.Base;
		var qs = m.queryString.apply(null, m.extend(null, arguments, 
					1));
	}
	req.open("POST", url, true);
	//taken from prototype, pretty much verbatim
	var requestHeaders =
		['X-Requested-With', 'XMLHttpRequest',
		'X-MochiKit-Version', MochiKit.Async.VERSION,
		'Accept', 'text/javascript, text/html, application/xml, text/xml, ',
																	'Content-type', 'application/x-www-form-urlencoded'];
		/* Force "Connection: close" for Mozilla browsers to work around
		 * a bug where XMLHttpReqeuest sends an incorrect Content-length
		 * header. See Mozilla Bugzilla #246651.
																 */
		if (req.overrideMimeType) {
			requestHeaders.push('Connection', 'close');
		}
	for (var i = 0; i < requestHeaders.length; i += 2) {
		req.setRequestHeader(requestHeaders[i],
				requestHeaders[i+1]);
	}

	return self.sendXMLHttpRequest(req, qs);

}

// requires MochiKit
boa.insertAfter = function (node, nodeToAppend) {
  MochiKit.Logging.logDebug(node);
	var nodeCopy = node.cloneNode(1);
	var newNode = DIV(null, nodeCopy, nodeToAppend);
  MochiKit.DOM.swapDOM(node, newNode);
  
  
}


boa.objectToArray = function(obj)
  {
    var arr = new Array();
    for (var i in obj)
    {
      arr.push(obj[i]);
    }
    return arr;
  }
