/**
 * Include script for Aerodynamics website.
 * 
 * @author R.J.T. de Vries <rdevries@thirdwave.nl>
 * @version 1.00, 03/09/2009
 * @access public
 * @package CMS
 */
 
//------------------------------------------------------------------------------
// 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='/cms/jscripts/cms.cookie.js'></script>");
document.write("<script src='/inc/jscripts/ddMenus.js'></script>");
document.write("<script src='/inc/jscripts/Tabs.js'></script>");
document.write("<script src='/inc/jscripts/Selectbox.js'></script>");
document.write("<script src='/inc/jscripts/Expander.js'></script>");
document.write("<script src='/inc/jscripts/JobOvv.js'></script>");
document.write("<script src='/inc/jscripts/AjaxFileRemover.js'></script>");
document.write("<script src='/inc/jscripts/googleTracking.js'></script>");
document.write("<script type='text/javascript' src='/inc/jscripts/tiny_mce/tiny_mce.js'></script>");

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

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

/**
 * Instance of JobOvv object.
 * @var object jobOvv
 * @access global
 */
var jobOvv = null;

/**
 * Instance of the Tabs object, used for switching tabs.
 * @var object tabs
 * @access global
 */
var tabs = null;

/**
 * Instance of the Selectbox object, used for transforming default <select>
 * elements with the "multiple" attribute into select-elements with a expanding
 * div containing checkboxes for each of the options.
 * @var object selectbox
 * @access global
 */
var selectbox = null;

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

/**
 * Initialize website. Called from <body> tag.
 *
 * Starts with calling the ddinit() function which initializes the dropdown
 * menus in the website.
 * 
 * @return 	void
 * @access	public
 */
function init() {
	var title, inputs, i, it, pagesizers;
	
	// Initialize the DropDown menu's
	ddmenus = new ddMenus;
	ddmenus.init();
		
	// Initialize tabs.
	tabs = new Tabs;
	tabs.init();
	
	// Initialize selectboxes.
	selectbox = new Selectbox;
	selectbox.init();
	
	// Initialize the expanders, if any.
	expander = new Expander();
	
	// Initialize the AJAX image removers, if any.
	ajaxFileRemover = new AjaxFileRemover();
	
	// add events to the username and password input elements.
	inps = document.getElementsByTagName('input');
	addedTo = [];
	
	for ( i = 0; i < inps.length; i++ ) {
		// if ( inps.getAttribute('defaulttext') ) {
		if ( inps[i].className.indexOf('deftxt') != -1 ) {
			addEvent(inps[i], 'focus', removeDefTxt);
			addEvent(inps[i], 'blur', restoreDefTxt);
			if ( !in_array(inps[i].form, addedTo) ) {
				addEvent(inps[i].form, 'submit', removeDefaultTexts);
				addedTo.push(inps[i].form);
			}
			if ( inps[i].getAttribute('defaultText') !== inps[i].value ) {
				inps[i].className = inps[i].className.replace(/ ?deftxt/, '');
			}
			if ( inps[i].getAttribute('value') !== inps[i].value ) {
				inps[i].className = inps[i].className.replace(/ ?deftxt/, '');
			}
		}
	}

	// initialise the wysiwyg editors
	tinyMCE.init({
		mode : "textareas",
		editor_selector : "wysiwyg",
		plugins: 'fullscreen,iespell,paste,safari,table',

		theme_advanced_toolbar_location : "top",
		theme_advanced_toolbar_align : "left",
		theme_advanced_buttons1 : [	'bold,italic,underline,sub,sup',
																'justifyleft,justifycenter,justifyright,justifyfull',
																'outdent,indent',
																'bullist,numlist',
																'tablecontrols'
															].join(',|,'),
		theme_advanced_buttons2 : [	'styleselect,formatselect,hr',
																'removeformat,charmap',
																'cut,copy,paste,pastetext,pasteword',
																'undo,redo',
																'link,unlink,/*anchor*/,/*image*/',
																'code,fullscreen'
															].join(',|,'),
		theme_advanced_buttons3 : null,
		theme_advanced_blockformats: 'p,h1,h2,h3', // default: 'p,address,pre,h1,h2,h3,h4,h5,h6',
		invalid_elements : ['img','style','script','link','meta','form','input',
												'select','textarea','object','param','applet','iframe'
											 ].join(','),
		
		content_css : "/inc/styles/tetra-applications.com_editor.css",
		theme : "advanced"
	});
	
	jobOvv = new JobOvv;
	jobOvv.init();
	
	set_select_values();
	
	textareas = document.getElementsByAttribute('maxsize', false, 'textarea');
	for ( it = 0; it < textareas.length; it++ ) {
		addEvent(textareas[it], 'keyup', removeExcessCharacters);
	}
	
	pagesizers = document.getElementsByName('pagesize');
	for ( it = 0; it < pagesizers.length; it++ ) {
		addEvent(pagesizers[it], 'change', changePageSize);
	} // for
	
	pagesizers = document.getElementsByName('youtube[size]');
	for ( it = 0; it < pagesizers.length; it++ ) {
		addEvent(pagesizers[it], 'change', changePageSize);
	} // for
	
} // init()

/**
 * Redirector to a new pagesize
 * 
 * @param e
 * @return
 */

function changePageSize(e) {
	e = e || window.event;
	var src = getEventSrc(e);
	
	if ( src.value ) {
		window.location = src.value;
	}
} // changePageSize();

/**
 * Handles the removing any chars in excess of maxsize characters of textareas
 * 
 * @param e	The triggering event
 * @return
 */
function removeExcessCharacters(e) {
	e = e || window.event;
	var eventSrc = getEventSrc(e);

	if ( eventSrc.getAttribute('maxlength') ) {
		if ( eventSrc.value.length > parseInt(eventSrc.getAttribute('maxlength')) ) {
			eventSrc.value = eventSrc.value.substr(0, eventSrc.getAttribute('maxlength'));
		}
	}
	return true;
} // removeExcessCharacters();

/**
 * 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.className.match(/deftxt/)) {
		eventSrc.value = '';
		eventSrc.className = eventSrc.className.replace(/ ?deftxt/, '');
	}
	setTimeout( function() { eventSrc.focus(); }, 100);
} // removeDefTxt()

/**
 * A function to remove all default texts from the defaultText fields when the
 * form is submitted.
 * 
 * @param e
 * @return
 */
function removeDefaultTexts(e) {
	var it,
			eventSrc,
			inps;
			
	e = e || window.event;
	eventSrc = getEventSrc(e);
	
	inps = document.getElementsByAttribute('defaultText', false, 'input', eventSrc);
	for ( it in inps ) {
		if ( inps[it].className.match(/ ?deftxt/) ) {
			inps[it].value = '';
		}
	}
} // removeDefaultTexts()

/**
 * Restore the default value for inputs to which this event was attached.
 * 
 * @param		object	[e]					event object for Mozilla based browsers.
 * @param		object	[eventSrc]	use as eventSrc if given.
 * @return	void
 */
function restoreDefTxt(e, eventSrc) {
	
	if ( !eventSrc ) {
		if ( !e ) e = window.event;
		eventSrc = getEventSrc(e);
	}
	
	if ( eventSrc.value == '' ) {
		if ( eventSrc.getAttribute('defaultText') !== undefined ) { 
			eventSrc.value = eventSrc.getAttribute('defaultText');
		} else {
			eventSrc.value = '';
		}
		if ( !/( |^)deftxt($| )/.test(eventSrc.className) ) {
			eventSrc.className = trim(eventSrc.className + ' deftxt');
		}
	}
} // restoreDefTxt()

window.onload = init;

/* end of include script */
