//-------------------------------------------------------------------------------
//-------------------------------------------------------------------------------
// YUI Popup handling functions
//

if(typeof(YAHOO) != 'undefined') {
    YAHOO.namespace("OPS");
    OPS = YAHOO.OPS;
}

if(typeof(opsPopupInited) == 'undefined') {
    var opsPopupInited = false;
    var opsPopupOpenPanel = false;
}

//-----------------------------------------------------------------------------
function opsDOMAcceptsClick(targetEl) {
    if(targetEl.tagName.toLowerCase() == 'input') {
	return true;
    }
    if(targetEl.getAttribute('href')) {
	return true;
    }

    return false;
}

//-----------------------------------------------------------------------------
function opsDOMGetChildRegion(targetEl) {
    var region = YAHOO.util.Dom.getRegion(targetEl);
    var bottom = region.top+region.height;
    var right = region.left+region.width;

    //opsDebug(targetEl.innerHTML);
    //opsDebug(region.left+','+region.top+' to '+right+','+bottom);

    var children = YAHOO.util.Dom.getChildren(targetEl);
    for(var i in children) {
	var child = children[i];
	var childRegion = opsDOMGetChildRegion(children[i]);
	if(region.top > childRegion.top)
	    region.top = childRegion.top;
	if(bottom < childRegion.top+childRegion.height)
	    bottom = childRegion.top+childRegion.height;
	if(region.left > childRegion.left)
	    region.left = childRegion.left;
	if(right < childRegion.left+childRegion.width)
	    right = childRegion.left+childRegion.width;
	//opsDebug('now '+region.left+','+region.top+' to '+right+','+bottom);
    }

    region.height = bottom-region.top;
    region.width = right-region.left;
    //opsDebug('return '+region.left+','+region.top+' '+region.width+'x'+region.height);
    return region;
}

//-------------------------------------------------------------------------------
function opsPopupInit() {
    if(opsPopupInited)
	return;
    YAHOO.util.Event.on(document, "click", function(ev) {
	var el = YAHOO.util.Event.getTarget(ev);
	if (opsPopupOpenPanel && el != opsPopupOpenPanel.element
	&& !YAHOO.util.Dom.isAncestor(opsPopupOpenPanel.element, el)
	&& !YAHOO.util.Dom.hasClass(el, 'popup-toggle')
	&& !YAHOO.util.Dom.getAncestorByClassName(el, 'popup-toggle')) {
	    opsPopupOpenPanel.hide();
	    opsPopupOpenPanel = false;
	}
    });
    opsPopupInited = true;
}

//-------------------------------------------------------------------------------
function opsPopupHideCurrent() {
    opsDebugDump('hide', opsPopupOpenPanel, 1);
    opsPopupOpenPanel.hide();
    opsPopupOpenPanel = false;
}

//-------------------------------------------------------------------------------
function opsPopupToggle(ev, o) {
    opsDebugDump('tog', o, 1);
    YAHOO.util.Event.preventDefault(ev);
    if(o.cfg.getProperty("visible")) {
	o.hide();
	opsPopupOpenPanel = false;
    } else {
	if(opsPopupOpenPanel) {
	    opsPopupOpenPanel.hide();
	}
    opsDebugDump('show', o, 1);
	o.show();
	opsPopupOpenPanel = o;
    }
}


//-------------------------------------------------------------------------------
// Encode email mailto
//
function opsMailto(name, domain, text, atts) {
    address = name+'@'+domain;
    if(!text)
	text = address;
    if(!atts)
	atts = '';
    document.write('<a href="mailto:'+address+'" '+atts+'>'+text+'</a>');
}

//-------------------------------------------------------------------------------
//-------------------------------------------------------------------------------
// HTML table handling functions
//

//-------------------------------------------------------------------------------
function opsTableAddRow(table) {
    var rowCount = table.rows.length;
    var row = table.tBodies[0].insertRow(rowCount);
    return row;
}

function opsTableDeleteAllRows(table) {
    try {
	while(table.rows.length > 0) {
	    table.tBodies[0].deleteRow(0);
	}
    }catch(e) {
	alert(e);
    }
}


//-----------------------------------------------------------------------------
function opsResolveOpts(defaultOpts, inputOpts) {
    var opts = defaultOpts;
    if(typeof inputOpts == 'undefined')
	return opts;

    for(var opt in opts) {
	if(typeof inputOpts[opt] != 'undefined') {
	    if(typeof opts[opt] != 'object')
		opts[opt] = inputOpts[opt];
	    else {
		for(var subopt in inputOpts[opt]) {
		    opts[opt][subopt] = inputOpts[opt][subopt];
		}
	    }
	}
    }

    return opts;
}

//-------------------------------------------------------------------------------
//-------------------------------------------------------------------------------
// Debugging functions
//

if(typeof(opsIsDebugOn) == 'undefined') {
//    if(typeof(parent) && typeof(parent) != 'undefined' && typeof(parent.opsIsDebugOn) && typeof(parent.opsIsDebugOn) != 'undefined')
//	var opsIsDebugOn = parent.opsIsDebugOn;
//    else
	var opsIsDebugOn = false;
}

//-------------------------------------------------------------------------------
function opsDump(arr,maxlevel,dispfuncs,level) {
    var dumped_text = "";
    if(!level) level = 0;
    if(maxlevel && level >= maxlevel) return "";

    //The padding given at the beginning of the line.
    var level_padding = "";
    for(var j=0;j<level+1;j++)
	level_padding += "    ";

    if(typeof(arr) != 'object') {
	//Stings/Chars/Numbers etc.
	dumped_text = "===>"+arr+"<===("+typeof(arr)+")";

    } else {
	//Array/Hashes/Objects
	if(!level) dumped_text += arr + " ...\n";
	for(var item in arr) {
	    var value = arr[item];

	    if(typeof(value) == 'object') { //If it is an array,
		//dumped_text += level_padding + "'" + item + "' " + value + "...\n";
		//try {
		    dumped_text += level_padding + "'" + item + "' (" + typeof(value) + ")\n" + opsDump(value,maxlevel,dispfuncs,level+1);
		//} catch(e) {
		//}
	    } else if(typeof(value) != 'function') {
		dumped_text += level_padding + "'" + item + "' => \"" + value + "\" (" + typeof(value) + ")\n";
	    }
	}
	for(var item in arr) {
	    var value = arr[item];
	    if(typeof(value) == 'function' && dispfuncs != 'undefined' && dispfuncs) {
		value = String(value);
		value = value.replace(/\n/, '');
		value = value.replace(/function /, '');
		dumped_text += level_padding + "function " + item + value.substr(0,value.indexOf(")")+1) + "\n";
	    }
	}
    }
    return dumped_text;
}

//-------------------------------------------------------------------------------
function opsDebug(text) {
    if(typeof(opsIsDebugOn) == 'undefined' || !opsIsDebugOn)
	return;

    var frames = top.frames;
    if(frames && frames != 'undefined') {
	for(var i = 0; i < frames.length; i++) {
	    var jsdebug = frames[i].document.getElementById('jsdebug');
	    if(jsdebug && jsdebug != 'undefined') {
		jsdebug.value += opsHtmlentities(text) + "\n";
	    } else if(frames[i].name == 'ticker') {
		if(!frames[i].opsDebugVisited || frames[i].opsDebugVisited == 'undefined') {
		    frames[i].document.write('<pre>');
		    frames[i].opsDebugVisited = true;
		}
		frames[i].document.writeln(opsHtmlentities(text));
		if(frames[i].scrollByPages)
		    frames[i].scrollByPages(100);
		return;
	    }
	}
    }

    if(typeof(opsIsDebugOn) != 'undefined' && opsIsDebugOn === 'alert')
	alert(text);
    else if(typeof(opsIsDebugOn) != 'undefined' && opsIsDebugOn == 'con')
	console.log(text);
    else if(typeof(opsIsDebugOn) != 'undefined' && opsIsDebugOn)
	document.write('<pre>' + opsHtmlentities(text) + '</pre>');
}

//-------------------------------------------------------------------------------
function opsDebugDump(name, o, maxlevel, dispfuncs) {
    var text = name + '=' + opsDump(o, maxlevel, dispfuncs);
    text += "\n------------------------------------------------------";
    opsDebug(text);
}

