/* -------------------------------------------------------------------------- */
/** 
 *    @fileoverview
 *       Control for Pseudo Dialog content pages.
 *
 *    @version rev012.2008-05-19
 *    @requires common.js
 *    @requires keyEquiv.js
 *    @requires pseudoDialog.js (in parent window page)
 */
/* -------------------------------------------------------------------------- */


var BA_PSEUDODIALOG = parent.BA_PSEUDODIALOG;



/* --------------- Settings for BAPseudoDialogContent --------------- */

var BA_PDCONTENT_DEFAULTFOCUS_ID = 'pseudo-dialog-cancel-btn';



/* --------------- Constructor : BAPseudoDialogContent inherits BAObservable --------------- */

function BAPseudoDialogContent() {
	this.defaultBtnID = 'pseudo-dialog-default-btn';
	this.cancelBtnID  = 'pseudo-dialog-cancel-btn';

	if (BA.env.isDOMReady) {
		this.init();
	}
}

BAPseudoDialogContent.prototype = new BAObservable;

BAPseudoDialogContent.prototype.init = function() {
	BAAppendStateClassName('BAPseudoDialogContent');
	if (BA_PSEUDODIALOG.allowDialogOpen) {
		document.documentElement.style.width = BAGetGeometry().pageW + 'px';
		BA_PSEUDODIALOG.showDialog(this);

		// setup event handlers for buttons
		var defaultBtn = document.getElementByIdBA(this.defaultBtnID);
		var cancelBtn  = document.getElementByIdBA(this.cancelBtnID );
		if (defaultBtn) defaultBtn.addEventListenerBA('click', this.defaultBtnClicked, this);
		if (cancelBtn ) cancelBtn .addEventListenerBA('click', this.cancelBtnClicked , this);

		// set key equivalents
		if (typeof BA_KEYEQUIV == 'object') {
			BA_KEYEQUIV.addKeyEquiv('!', this.cancelBtnClicked, this);
		}

		// workaround to Gecko, iframe scroll position is corrupted when browser window is minimized.
		new BASetTimeout(function() { window.scrollTo(0, 0) }, 1);
	}
}

BAPseudoDialogContent.prototype.defaultBtnClicked = function(e) {
	e.preventDefault();
	e.stopPropagation();
	this.doCallBack('onDefaultBtnClicked');
}

BAPseudoDialogContent.prototype.cancelBtnClicked = function(e) {
	e.preventDefault();
	e.stopPropagation();
	this.doCallBack('onCancelBtnClicked');
}

BAPseudoDialogContent.prototype.setDefaultFocus = function() {
	var id   = window.BA_PDCONTENT_DEFAULTFOCUS_ID;
	var node = (id) ? document.getElementByIdBA(id) : null;
	if (!_focusToNode(node)) {
		window.focus();
		var nodes = document.getElementsByTagNameBA('*');
		for (var i = 0, n = nodes.length; i < n; i++) {
			if (_focusToNode(nodes[i])) break;
		}
	}
	
	function _focusToNode(node) {
		var validNodeNames = ['a', 'area', 'input', 'select', 'textarea'];
		if (node && validNodeNames.some(function(name) { return (name == node.nodeName.toLowerCase()) })) {
			node.focus();
			return true;
		} else {
			return false;
		}
	}
}

BAPseudoDialogContent.prototype.getGeometry = function() {
	var geom = BAGetGeometry();
	if (BA.ua.isOpera) {
		geom.pageW = document.documentElement.offsetWidth ; // but opera returns invalid offsetWidth value...
		geom.pageH = document.documentElement.offsetHeight;
	}
	return geom;
}






/* -------------------- Main : register start-up -------------------- */

if (typeof BA == 'object' && typeof BA_PSEUDODIALOG == 'object' && BA.ua.isDOMReady) {
	BAAddOnload(function() {
		BASingleton(BAPseudoDialogContent);
	});
}
