//<![CDATA[
<!--

/************************************************************************************

	Klickadeeler JavaScript API
	
	(c) 2007 Christian Boehnke und Paul Meyer
		Klickadeeler Mediendesign GbR
		
	Core


 ************************************************************************************/
 
 // klickadeeler class
 klickadeeler = {
	
	// api class
	api: {
		 
		 // constants
		 DOM : 1,
		 BROWSER : 2,
		 INPUT: 4,
		 AJAX: 8,
		 POPUP: 16,
		 COOKIE: 32,
		 TOOLTIP: 64,
		 GRAPHX: 128,
		 SWF: 256,
		 ALL: 0,
		 
		 // core files
		 arrayCoreClasses: { script_1: 'klickadeeler.api.dom.js',
							 script_2: 'klickadeeler.api.browser.js',
							 script_4: 'klickadeeler.api.input.js', 
							 script_8: 'klickadeeler.api.ajax.js',
							 script_16: 'klickadeeler.api.popup.js',
							 script_32: 'klickadeeler.api.cookie.js',
							 script_64: 'klickadeeler.api.tooltip.js',
							 script_128: 'klickadeeler.api.graphx.js',
							 script_256: 'klickadeeler.api.swf.js'},
					
		  // core objects
		  dom: null,
		  browser: null,
		  input: null,
		  ajax: null,
		  popup: null,
		  cookie: null,
		  tooltip: null,
		  graphx: null,
		  parameters: 0,
		  onReady: function() { },
		  onLoadNumRetries: 999,
		  
		   __private_load: null,
		 
		 /*=============================================================================*
		  *		check if oect exists
		  *=============================================================================*/
		  exists: function (strObj) {
			 try {
				var variantType = eval(strObj);
				return Boolean(variantType);
			 }
			 catch(e) {
				return false;
			 }
		  },
		 
		 /*=============================================================================*
		  *		include additional javascript files
		  *=============================================================================*/
		  include: function () {
			  var i = 0;
			  
			  if (this.exists('document.createElement') && 
				  this.exists('document.getElementsByTagName') &&
				  this.exists('arguments.length')) {
				  var oHTMLElementHead = document.getElementsByTagName('head')[ 0 ];
				  
				  if (oHTMLElementHead) {
					  for (i = 0; i < arguments.length; i ++) {
						  var oHTMLElementScript = document.createElement('script');
						  
						  oHTMLElementScript.setAttribute('type', 'text/javascript');
						  oHTMLElementScript.setAttribute('language', 'javascript');
						  oHTMLElementScript.setAttribute('src', arguments[i]);
						 
						  oHTMLElementHead.appendChild(oHTMLElementScript);
					  }
				  }
			  }
			  
			  return i;
		  },
		  
		 /*=============================================================================*
		  *		init (a call to this function is required)
		  *=============================================================================*/
		  init: function () {
			  if (this.exists('arguments.length') && 
				  this.exists('arguments[0].lastIndexOf')) {
				  var strPath = arguments[0].lastIndexOf('/') != (arguments[0].length - 1) ? arguments[0] + '/' : arguments[0];
				  
				  // grab parameters
				  this.parameters = arguments.length > 1 ? arguments[1] : 0;
				  
				  // include required classes
				  this.include(strPath + this.arrayCoreClasses['script_' + String(this.DOM)]);
				  this.include(strPath + this.arrayCoreClasses['script_' + String(this.BROWSER)]);
				  
				  // include additional files
				  if (this.parameters & this.INPUT) {
					  this.include(strPath + this.arrayCoreClasses['script_' + String(this.INPUT)]);
				  }
				  
				  if (this.parameters & this.AJAX) {
					  this.include(strPath + this.arrayCoreClasses['script_' + String(this.AJAX)]);
				  }
				  
				  if (this.parameters & this.POPUP) {
					  this.include(strPath + this.arrayCoreClasses['script_' + String(this.POPUP)]);
				  }
				  
				  if (this.parameters & this.COOKIE) {
					  this.include(strPath + this.arrayCoreClasses['script_' + String(this.COOKIE)]);
				  }
				  
				  if (this.parameters & this.TOOLTIP) {
					  this.include(strPath + this.arrayCoreClasses['script_' + String(this.TOOLTIP)]);
				  }
				  
				  if (this.parameters & this.GRAPHX) {
					  this.include(strPath + this.arrayCoreClasses['script_' + String(this.GRAPHX)]);
				  }
				  
				  if (this.parameters & this.SWF) {
					  this.include(strPath + this.arrayCoreClasses['script_' + String(this.SWF)]);
				  }
				  
				  // include extra javascripts
				  for (var i = 2; i < arguments.length; i ++) {
					  this.include(strPath + arguments[i]);
				  }
			  }
			  
			  // process on load events
			  this.__private_load = window.onload;
			  
			  window.onload = function(e) {
				  try {
					  // get event object
					  if (e) {
						 event = e;
					  }
				  	  
					  // validate dom
					  if (klickadeeler.api.parameters & klickadeeler.api.DOM) {
						  if (typeof(dom) == 'undefined') {
							  throw('');
						  }
					  }
					  
					  if (typeof(dom) != 'undefined') {
			 		  	  klickadeeler.api.dom = dom;
					  }
		 			  
					  // validate browser
					  if (klickadeeler.api.parameters & klickadeeler.api.BROWSER) {
						  if (typeof(browser) == 'undefined') {
							  throw('');
						  }
					  }
					  
					  if (typeof(browser) != 'undefined') {
			 		  	  klickadeeler.api.browser = browser;
					  }
					  
					  // validate input
					  if (klickadeeler.api.parameters & klickadeeler.api.INPUT) {
						  if (typeof(input) == 'undefined') {
							  throw('');
						  }
					  }
					  
					  if (typeof(input) != 'undefined') {
			 		  	  klickadeeler.api.input = input;
					  }
					  
					  // validate ajax
					  if (klickadeeler.api.parameters & klickadeeler.api.AJAX) {
						  if (typeof(ajax) == 'undefined') {
							  throw('');
						  }
					  }
					  
					  if (typeof(ajax) != 'undefined') {
			 		  	  klickadeeler.api.ajax = ajax;
					  }
					  
					  // validate popup
					  if (klickadeeler.api.parameters & klickadeeler.api.POPUP) {
						  if (typeof(popup) == 'undefined') {
							  throw('');
						  }
					  }
					  
					  if (typeof(popup) != 'undefined') {
			 		  	  klickadeeler.api.popup = popup;
					  }
					 
					  // validate cookie
					  if (klickadeeler.api.parameters & klickadeeler.api.COOKIE) {
						  if (typeof(cookie) == 'undefined') {
							  throw('');
						  }
					  }
					  
					  if (typeof(cookie) != 'undefined') {
			 		  	  klickadeeler.api.cookie = cookie;
					  }
					
					  // validate tooltip
					  if (klickadeeler.api.parameters & klickadeeler.api.TOOLTIP) {
						  if (typeof(tooltip) == 'undefined') {
							  throw('');
						  }
					  }
					  
					  if (typeof(cookie) != 'undefined') {
			 		  	  klickadeeler.api.tooltip = tooltip;
					  }
					  
					  // validate graphx
					  if (klickadeeler.api.parameters & klickadeeler.api.GRAPHX) {
						  if (typeof(graphx) == 'undefined') {
							  throw('');
						  }
					  }
					  
					  if (typeof(graphx) != 'undefined') {
			 		  	  klickadeeler.api.graphx = graphx;
					  }
					 
					  // validate swf
					  if (klickadeeler.api.parameters & klickadeeler.api.SWF) {
						  if (typeof(swf) == 'undefined') {
							  throw('');
						  }
					  }
					  
					  if (typeof(swf) != 'undefined') {
			 		  	  klickadeeler.api.swf = swf;
					  }
					 
				  	  // report ready
					  if (klickadeeler) {
				  	  	  if (klickadeeler.api) {
						      // call previous on load event callback
							  if (typeof(klickadeeler.api.__private_load) == 'function') {
				  	  		  	  klickadeeler.api.__private_load(event);
							  }
						  }
						  
						  setTimeout('klickadeeler.api.onReady()', 10);
					  }
				  }
				  catch(e) {
					  if (klickadeeler) {
				  	  	  if (klickadeeler.api) {
							  if (klickadeeler.api.onLoadNumRetries > 0) {
								  setTimeout('window.onload()', 10);
								  klickadeeler.api.onLoadNumRetries --;
								  return;
							  }
						  }
					  }
					  
					  alert('[JavaScript/Klickadeeler API] Fatal Error: Unable to initialize core objects. Interface reports "' + e + '"');
				  }
			  }
		  }
		 
	}
	// api class
	
 };
 // klickadeeler class
 
 
 // initialization of some variables
 klickadeeler.api.ALL = klickadeeler.api.DOM | 
 						klickadeeler.api.BROWSER | 
						klickadeeler.api.INPUT | 
						klickadeeler.api.AJAX | 
						klickadeeler.api.POPUP | 
						klickadeeler.api.COOKIE |
						klickadeeler.api.TOOLTIP |
						klickadeeler.api.GRAPHX |
						klickadeeler.api.SWF;
 
//-->
//]]>