function cloneObject(obj) {
	var clone = {};
	for(var i in obj) {
		if(typeof(obj[i])=="object")
			clone[i] = cloneObject(obj[i]);
		else
			clone[i] = obj[i];
	}
	return clone;
};

function isSet(variable) {
	return ((typeof variable) != 'undefined' );
}

function addslashes(str) {
	str=str.replace(/\\/g,'\\\\');
	str=str.replace(/\'/g,'\\\'');
	str=str.replace(/\"/g,'\\"');
	str=str.replace(/\0/g,'\\0');
	return str;
}

function stripslashes(str) {
	str=str.replace(/\\'/g,'\'');
	str=str.replace(/\\"/g,'"');
	str=str.replace(/\\0/g,'\0');
	str=str.replace(/\\\\/g,'\\');
	return str;
}

function alertObject(obj) {
	var out = '';
	for (var i in obj) { out += i + '=' + obj[i] + '\n '};
	alert (out);
}

function padZeros(theNumber, max) {
    var numStr = String(theNumber);

    while ( numStr.length < max) {
        numStr = '0' + numStr;
    }

    return numStr;
}

function num_bytes_as_text(num) {
	if (num < 1024) {
		return num+"b";
	} else if (num < 1048576) {
		var size_kb = parseInt(num/1024);
		return size_kb + "KB";
	} else {
		size_mb = parseInt(num/1048576);
		return size_mb + "MB";
	}
}

function getRadioValue(radioElement) {
	var result = -1;
	for (var i=0; i < radioElement.length; i++) {
	   if (radioElement[i].checked) result = i;
	}
	return result;
}

function getFilenameSuffix(fname) {
	return fname.match(/\.([^\.]+)$/g);
}

function getTargetId(event) {   // Originally from the QT Example
	// an event has the target element as a property. the property has a 
	//  different name in IE so handle that here
	var target = event.target ? event.target : event.srcElement;
	return target.id;
}

function myAddListener (obj, evt, handler, captures) {   // Originally from the QT Example
	if ( document.addEventListener )
		obj.addEventListener(evt, handler, captures);
	else
		obj.attachEvent('on' + evt, handler); // IE requires this form
}

function ucFirst(str) {
    var firstLetter = str.substr(0, 1);
    return firstLetter.toUpperCase() + str.substr(1);
}

function divAbbrev (divId, prefix) {
	return (divId.substr(prefix.length, divId.indexOf('_div')-prefix.length)).toLowerCase();
}

function divAbbrevCamel (divId, prefix) {
	var str = (divId.substr(prefix.length, divId.indexOf('_div')-prefix.length));
	return str.substr(0,1).toLowerCase() + str.substr(1);
}

function basename(path) {
    return path.replace(/\\/g,'/').replace( /.*\//, '' );
}

function truncateString(str, len) {
	if (str.length <= len) {
		return str;
	} else {
		return str.substr(0, len) + '...';
	}
}

function arrayCount(arr) {
	var count = 0;
	for (var i in arr) count++
	return count;
}
