/**
 * Include script for javascript application layer.
 * 
 * @author R.J.T. de Vries <rdevries@thirdwave.nl>
 * @version 1.00, 11/09/2007
 * @access public
 */

//------------------------------------------------------------------------------
// PHASE I: INCLUDE ALL NECESSARY JAVASCRIPT FILES.
//------------------------------------------------------------------------------
document.write("<script src='/cms/jscripts/cms.event.js'></script>");
document.write("<script src='/cms/jscripts/cms.functions.js'></script>");
document.write("<script src='/inc/jscripts/Fader.js'></script>");
document.write("<script src='/cms/jscripts/cms.cookie.js'></script>");
document.write("<script src='/cms/jscripts/sarissa/sarissa.js'></script>");
document.write("<script src='/cms/jscripts/xmlhttp/XMLHttp.js'></script>");
document.write("<script src='/cms/jscripts/xmlhttp/XMLProcessor.js'></script>");
document.write("<script src='/cms/jscripts/xmlhttp/Data.js'></script>");
document.write("<script src='/cms/jscripts/cms.dateinput.js'></script>");
document.write("<script src='/inc/jscripts/FormDependencies.js'></script>");
document.write("<script src='/inc/jscripts/MenuScroller.js'></script>");
document.write("<script src='/inc/jscripts/ddMenus.js'></script>");
document.write("<script src='/inc/jscripts/FontSizer.js'></script>");
document.write("<script src='/inc/jscripts/ChangeImage.js'></script>");
document.write("<script src='/inc/jscripts/FaqOvv.js'></script>");

//------------------------------------------------------------------------------
// PHASE II: INITIALIZATION FUNCTION, CALLED ON DOCUMENT LOAD EVENT
//------------------------------------------------------------------------------

/**
 * Instance of XMLHttp object, used for XML HTTP data communication.
 * @var object xmlhttp
 * @access global
 */
var xmlhttp = null;

/**
 * Instance of XMLProcessor object, used for XML data processing.
 * @var object xmlprocessor
 * @access global
 */
var xmlprocessor = null;

/**
 * Instance of Data object, used for saving form data.
 * @var object data
 * @access global
 */
var data = null;

/**
 * Instance of Photoplayer object.
 * @var object photoplayer
 * @access global
 */
var photoplayer = null;

/**
 * Fader object, which takes care of the fade-in/out effects on the website.
 * @var object fader
 * @access public
 */
var fader = null;

/**
 * Instance of TabManager object.
 * @var object tabManager
 * @access global
 */
var tabManager = null;

/**
 * Instance of ArtCollection object.
 * @var object artCollection
 * @access global
 */
var artCollection = null;

/**
 * Instance of the FormDependencies object.
 * @var object formDependencies
 * @access global
 */
var formDependencies = null;

/**
 * Date input management object, that takes care of automatically continuing to
 * next field input.
 * @var object dateInput
 * @access global
 */
var dateinput = null;

/**
 * Instance of ddMenus object.
 * @var object ddmenus
 * @access global
 */
var ddmenus;


/**
 * Instance of FontSizer object.
 * @var object fontSizer
 * @access global
 */
var fontSizer;

/**
 * Instance of ChangeImage object.
 * @var object changeimage
 * @access global
 */
var changeimage;

/**
 * Instance of FaqOvv object.
 * @var object faqOvv
 * @access global
 */
var faqOvv = null;

/**
 * Initialization function.
 *
 * @author R.J.T. de Vries <rdevries@thirdwave.nl>
 * @param		boolean		refresh		should the nav-list be refreshed? default to true.
 * @return 	void
 * @access	public
 */
function init() {
	var rgt,			// right column in document.
			cnt;			// content column in document.
			
	if ( typeof(TabManager) != 'undefined' ) {
		tabManager = new TabManager;
		tabManager.init();
	}

	if ( typeof(Artists) != 'undefined' ) {
		artists = new Artists;
		artists.init();
	}
	
	if ( (rgt = document.getElementByAttribute('className', 'rgt')) ) {
		if ( (cnt = document.getElementById('cnt')) ) {
			rgt.style.height = getHeight(cnt) + 'px';
		}
	}
	
	// add events to the search input.
	inps = document.getElementsByTagName('input');
	for ( i = 0; i < inps.length; i++ ) {
		if ( inps[i].className.indexOf('deftxt') != -1 ) {
			inps[i].setAttribute('defaultText', inps[i].value);
			addEvent(inps[i], 'focus', removeDefTxt);
			addEvent(inps[i], 'blur', restoreDefTxt);
		}
	}
	
	// activate menu scrolling correction.
	menuScroller = new MenuScroller;
	menuScroller.init();
	
	// set formdependencies.
	formDependencies = new FormDependencies;
	formDependencies.init();

	// initialize dateinput.
	dateinput = new Dateinput;
	dateinput.init();
	
	ddmenus = new ddMenus;
	if ( !ddmenus.init() ) {
		alert('Dropdown menus kunnen niet worden geactiveerd');
	}
	
	// activate FontSizer.
	fontSizer = new FontSizer;
	fontSizer.init();
	
	changeimage = new ChangeImage;
	changeimage.init();
	
	faqOvv = new FaqOvv;
	faqOvv.init();
} // init()

/**
 * Remove the default text from inputs to which this event was attached.
 * 
 * @param		object	[e]	event object for Mozilla based browsers.
 * @return	void
 */
function removeDefTxt(e) {
	if ( !e ) e = window.event;
	var eventSrc = getEventSrc(e);
	if ( eventSrc.getAttribute('defaultText') == eventSrc.value ) {
		eventSrc.value = '';
		eventSrc.className = eventSrc.className.replace(' deftxt', '');
	}
	setTimeout( function() { eventSrc.focus(); }, 100);
} // removeDefTxt()

/**
 * Restore the default value for inputs to which this event was attached.
 * 
 * @param		object	[e]	event object for Mozilla based browsers.
 * @return	void
 */
function restoreDefTxt(e) {
	if ( !e ) e = window.event;
	var eventSrc = getEventSrc(e);
	if ( eventSrc.value == '' ) {
		eventSrc.value = eventSrc.getAttribute('defaultText');
		eventSrc.className += ' deftxt';
	}
} // restoreDefTxt()

window.onload = init;