/*
*	JSF Framework: Bootstrapper
*
*	V 1.0
*
*	@changes
*
*	_______________________________________________________________________________
* /
*/

var jsfUsedClasses 		= new Array();
var jsfLoadedClasses 	= new Array();
var jsfLoadHandler 		= new Array();

var jsfUsedStylesheets 	= new Array();
var jsfLoadedStylesheets = new Array();
var jsfNotLoadedStylesheets = new Array();

/*
*	include pfad für require() herausfinden
*/
var JSF_CLASS_PATH = '';
var scripts = document.getElementsByTagName('script');
for(var i=0; i < scripts.length; i++){ if(scripts[i].src.match(/jsf.js/)){ JSF_CLASS_PATH = scripts[i].src.replace(document.location.href, '').replace('jsf.js', ''); break } }

/*
*	include pfad für ressourcen ableiten
*/
var JSF_CSS_PATH = JSF_CLASS_PATH.replace('/js/jsf/', '/res/css/');
var JSF_IMG_PATH = JSF_CLASS_PATH.replace('/js/jsf/', '/res/img/');

/*
*	basiskonfiguration laden
*/
require('jsfObject.js');
require('jsfDetectBrowser.js');
require('jsfFunctions.js');

/*
*	ladezustand der mit require eingebundenen scripts checken
*	und wenn alle da sind die anwendung durch den jsfLoadHandler starten
*/
function jsfCheckLoadState(){
	
	var js_loaded = 0;
	var css_loaded = 0;
	
	for(i=0; i < jsfNotLoadedStylesheets.length; i++){
		if(jsfGetStylesheetStyle('#' + jsfNotLoadedStylesheets[i].replace('.css', 'Loaded'), 'width') == '100%'){
			jsfLoadedStylesheets.push(jsfNotLoadedStylesheets[i]);
			processStylesheetImagePath(jsfNotLoadedStylesheets[i]);
		}
	}
	
	js_loaded = jsfUsedClasses.length == jsfLoadedClasses.length ? 1 : 0;
	css_loaded = jsfUsedStylesheets.length == jsfLoadedStylesheets.length ? 1 : 0;
	
	if(js_loaded && css_loaded)
		for(var i=0; i < jsfLoadHandler.length; i++) jsfLoadHandler[i]();
	else
		window.setTimeout(jsfCheckLoadState, 200);							   
	
}

/*
*	ladeschleife einleiten
*/
if (window.addEventListener) {
	window.addEventListener('load', jsfCheckLoadState, false );
} else if (window.attachEvent) {
	window['eload'+jsfCheckLoadState] = jsfCheckLoadState;
	window['load'+jsfCheckLoadState] = function() { window['eload'+jsfCheckLoadState]( window.event ); }
	window.attachEvent( 'onload', window['load'+jsfCheckLoadState] );
}

/*
*	einen onLoad handler für die anwendung anmelden
*	es sind mehrere handler möglich
*/
function jsfAddLoadHandler(pFunc){ jsfLoadHandler.push(pFunc); }


/*
*	require emulation
*
*	über diese funktion können externe JS dateien nachgeladen werden, jede 
*	datei wird nur einmal eingebunden, und zwar als <script> tag im header
*/
function require(className){
	
	for(var i=0; i < jsfUsedClasses.length; i++){
		if(jsfUsedClasses[i] == className){
			//alert('Die Klasse ' + className + ' wurde bereits geladen');
			return;
		}
	}
	
	jsfUsedClasses.push(className);
	
	script = document.createElement('script');
	script.setAttribute('type','text/javascript');
	script.setAttribute('src', JSF_CLASS_PATH + className);
	document.getElementsByTagName('head')[0].appendChild(script);
	
}

/*
*	require für stylesheets des systems
*
*	wenn kein custom stylesheet angemeldet ist, wird das systemeigene
*	verwendet
*/
function require_css(filename){
	
	for(var i=0; i < jsfUsedStylesheets.length; i++){
		if(jsfUsedStylesheets[i] == filename){
			return;
		}
	}
	
	jsfUsedStylesheets.push(filename);
	jsfNotLoadedStylesheets.push(filename);
	
	link = document.createElement('link');
	link.setAttribute('rel','stylesheet');
	link.setAttribute('type','text/css');
	link.setAttribute('href', JSF_CSS_PATH + filename);
	document.getElementsByTagName('head')[0].appendChild(link);
	
}


