// ******************************************************************************
// Global Constants and Variables
// ******************************************************************************

var baseURL         = document.getElementsByTagName('base')[0].href;
var ajaxUpdaterFlag = false; // Flag for Ajaxupdater - 

var myAjaxloder;



// ******************************************************************************
// Main Classes
// ******************************************************************************

var DasFirmament = Class.create();
DasFirmament.prototype = {

	// ******************************************************************************
	// Constants
	// ******************************************************************************
	Version: '1.0',
	includes: new Array(
		// Scriptaculous
		'scriptaculous/effects.js',
//		'scriptaculous/builder.js',
		'scriptaculous/dragdrop.js',

		// Firmament 
//		'myProtoExt.js',
		'browserSniffer.js',
		'page.js',
//		'formsaver.js',
		'gutetat_rating.js',
		'gutetat_weitersagen.js',
		'fieldhighlighter.js',
//		'registration.js',
		'rating.js',
		'profilsearch.js',
		'login.js',
		'messages.js',
		'KPoverlay.js',
		'KPmodal.js',
		'validation.js',
		'comments.js',
		'modul.js',
		'swap.js'
		),

	// ******************************************************************************
	// vars
	// ******************************************************************************
	ajaxLoadingIconObj: new Object,


	// ******************************************************************************
	// Constructor
	// ******************************************************************************
	initialize: function(options) {
       	if((typeof Prototype=='undefined') || 
	    	(typeof Element == 'undefined') || 
	   	    (typeof Element.Methods=='undefined') ||
        	parseFloat(Prototype.Version.split(".")[0] + "." +
	           Prototype.Version.split(".")[1]) < 1.5)
	   		    throw("DasFirmament benötigt das Prototype JavaScript framework >= 1.5.0");


	    $A(document.getElementsByTagName("script")).findAll( function(s) {return (s.src && s.src.match(/df\.js$/))}).each(this.setSelfPath.bind(this)); 

		//Event.observe(window,'load', this.pageLoadHandler.bindAsEventListener(this), false);
		Event.onReady(this.pageLoadHandler.bindAsEventListener(this));

   	},

   	require: function(libraryName) {
       	// inserting via DOM fails in Safari 2.0, so brute force approach
        document.write('<script type="text/javascript" src="' + this.selfPath + libraryName + '"></script>');
   	},

    setSelfPath: function(s) {
		this.selfPath = s.src.replace(/df\.js$/,'');
  		$A(this.includes).each(this.require.bind(this));
	},
	    
	    

	pageLoadHandler: function(){
	    
		
//	   	x();

		this.ajaxLoadingIconObj = $('pageLoad');

	   	myAjaxloder = new Ajaxloder('nav', 'footNav'); // muss immer als letzes aufgerufen werden!

//		this.overlay = new KPoverlay({overlayObjId: 'KPoverlay_loading', duration: 0});


		Event.observe(window.document,'mousemove', this.mouseMoveHandler.bindAsEventListener(this), false);
		Ajax.Responders.register(this);

    },
		
	mouseMoveHandler: function(ev){
		Element.setLeft(this.ajaxLoadingIconObj, Event.pointerX(ev) + 10);
		Element.setTop(this.ajaxLoadingIconObj, Event.pointerY(ev) + 10);
	},


	onLoadWrapper: function(func){
		

		if(ajaxUpdaterFlag == true){
			func();
		} else {
			//Event.observe(window, 'load', func, false);
			Event.onReady(func);
		}
	},


	// ***********************************************************************************************
	// Ajax Response Handler
	// ***********************************************************************************************
	onCreate: function(){


//		this.overlay.create();
//		this.overlay.show();

		Element.show(this.ajaxLoadingIconObj);
	},
	onComplete: function() {



//		if(Ajax.activeRequestCount == 0){
			Element.hide(this.ajaxLoadingIconObj);

			
//			this.overlay.hide();

		    if(ajaxUpdaterFlag == false){

				ajaxUpdaterFlag = true;
			}
//		}
	}
};




DF = new DasFirmament();





	
