var MAX_DUMP_DEPTH = 0;

function dumpObj(obj, name, indent, depth) {
    if (depth > MAX_DUMP_DEPTH ) {
        return indent + name + ": <Maximum Depth Reached>\n";
    }
    if (typeof obj == "object") {
        var child = null;
        var output = indent + name + "\n";
        indent += "\t";
        for (var item in obj)
        {
            try {
                child = obj[item];
            } catch (e) {
                child = "<Unable to Evaluate>";
            }
            if (child instanceof Function)
            	continue;
            if (typeof child == "object") {
                output += dumpObj(child, item, indent, depth + 1);
            } else {
                output += indent + item + ": " + child + "\n";
            }
        }
        return output;
    } else {
        return obj;
    }
}

function isEmpty(obj) {
	return obj == null || obj == undefined || obj == "" || obj == "null"; 
}

function equal(a, b) {
	return a == b || isEmpty(a) && isEmpty(b) || a == 'false' && b == false || a == false && b == 'false';
}

function nvl(first, secondIfFirstNull) {
	return first ? first : secondIfFirstNull;
}
function dumpVar(obj){
    return dumpObj(obj, "Your object", "", 0);
}

// input must be in canonical format
function formatDate(dateValue){	
	if (dateValue == null || dateValue == "" || dateValue == "...") return null;
	dateValue = dateValue + ""; // value from grid cell sometimes can be a string-convertable object
	if (dateValue.indexOf('#') >=0) return null;
	
    var format = {datePattern: "MM/dd/yyyy", selector: "date"};
    var formattedDate = dojo.date.locale.format(new Date(dateValue), format);
    return formattedDate;
}

//input must be in canonical format
function formatTime(timeValue){	
	if (timeValue == null || timeValue == "" || timeValue == "...") return null;
	timeValue = timeValue + ""; // value from grid cell sometimes can be a string-convertable object
	if (timeValue.indexOf('#') >=0) return null;
	
    var format = {timePattern: "HH:mm", selector: "time"};
    var formattedTime = dojo.date.locale.format(new Date(timeValue), format);
    return formattedTime;
}

function formatReference(refValue){
	if (!refValue.indexOf) return '';
	else return refValue.substr(refValue.indexOf('#') + 1);
}

function formatLink(linkValue){
	if (linkValue){
		linkValue = "<a href ='javascript: cmp_" + this.constraint.grid + ".openLink(\"" + this.constraint.link  +  "\")'>" + linkValue + "</a>";
		return linkValue;
	}else return '';
}

function formatCalculated(calculatedValue){
	if(calculatedValue){
		calculatedValue = calculatedValue.replace(/&lt;/g, '<');		 
		return calculatedValue;
	}else return '';
}

function formatCurrency(currValue) {
	if (currValue) {
		currValue = '$' + currValue;
		return currValue;
	} else return '';
}

function openDialog(url, action) {
	dojo.connect(mainDialogFrame, 'onLoad', function() {
		if (action) mainDialogFrame.action = action;
		if (dijit._masterTT) dijit.hideTooltip(dijit._masterTT.aroundNode);
    	mainDialog.show();
    	mainDialog._position();
    });
    
    mainDialogFrame.attr('href', baseUrl + url);
}

function changeBody(url, isBackForward, all) {
	if (!isBackForward) {
    	var state = {
			back: function() {changeBody(url, true, all);},
			forward: function() {changeBody(url, true, all);},
			changeUrl: true
		};
		dojo.back.addToHistory(state);
    }
	if (dijit._masterTT) dijit.hideTooltip(dijit._masterTT.aroundNode);
	if (all) bodyDiv.attr('href', baseUrl + url);
	else frameDiv.attr('href', baseUrl + '/index/changebody?url=' + url);
	
	checkAuthStatus();	
}

function checkAuthStatus() {
	if (loginDialog.visible) return false;
	if (dojo.byId('authForm')) return false;
	
	dojo.xhrGet({
    	url: baseUrl + '/auth/loginjson',
    	sync: true,
        load: function(response){
				if (!response) loginDialog.show();
				else {
					var responseObj = dojo.fromJson(response);
					if (responseObj.login == 'false') loginDialog.show();
				}
			}
    });
	return !loginDialog.visible;
}

function getTimeDiff() {
	if (window.timestamp === undefined) window.timestamp = 0;
	var curTime = new Date().getTime();
	var diff = curTime - window.timestamp;
	window.timestamp = curTime;
	return diff;
}

