/**
*   file:           idTools-0.2.1.js
*
*   function:       Require
*   begin:          feb.2009
*   copyright:      © 2009 <i-D> internet + Design GmbH & Co. KG
*                   Erfurter Str. 35
*                   99423 Weimar
*                   Deutschland
*                   Fon:     03643 7785 0
*                   Fax:     03643 7785 29
*                   E-Mail:  office@i-d.de
*                   Web:     http://www.i.d.de/
*   author:         Michael Waack <m.waack@i-d.de>
*
*		0.1							Require(filename|modulname)[regex]
*										addEvent(window, 'load', function)
*										addStyle(filename)
*		0.2							viewport.height() ! Funktion, da jedesmal neu berechnet wird falls Browserfenster geändert wurde
*										viewport.width()
*										Cookie.get(name) 
*													.set(name, value(string), daysToExpire)
*													.erase(name) 
*
*		0.2.1		Wichtiges Update: (2009-06-03)
*					idTools.cfg.js hinzugefügt. Enthält die Konfigurierten Module
*					__libPath muss nicht mehr gesetzt werden
*/



var idTools = function() {
/* PRIVATE */
		// version
		var __version = '0.2.1';
		
		/* CONFIG_REQUIRE */
		var __libPath;// = "/js/lib/";												// Pfad zu den Bibliotheken
		
		/* UPDATE 2009-06-03: 
		*		bibliothekenpfad wird dynamisch gebaut
		*		configurationsfile wird gelesen
		*/
		var scrDummy = document.getElementsByTagName('script');
		for (i=0;i<scrDummy.length;i++) {
			if (scrDummy[i].src !== undefined && (scrDummy[i].src.match(/\?idTools\.v=/g) || scrDummy[i].src.match(/idTools.+\.js/g))) { // idTools.v=
				__libPath = scrDummy[i].src.substr(0,scrDummy[i].src.lastIndexOf('/'));
				// Config einlesen
				__loadModul(__libPath + '/idTools.cfg.js');
				__libPath +=  '/lib/'; // fest defnierter Pfad!
				break;
			}
		}

	
		var __xReq;							// zum einlesen der Module
		var __modulIndex = null;			// Index im Array des aktuellen Moduls
		var __modulName = null;				// Name des Aktuellen Moduls
		var __RequireReady = new Array();	// Speichert Ladezustand der Module
		
/* --------------------------------------- */
/* Interne Funktionen zum laden der Module */
	function __loadModul(item)
	{
		__modulIndex = item;
		__xReq = __createXMLHttpRequest();
		if(__xReq==null) {
			var x = (typeof(__modul));
			if (x != "undefined") {
				loadjscssfile(__libPath + __modul[item][0],'js','true');
			  	pause(400);
			}
			else {
				loadjscssfile(item,'js','true');
			  	pause(400);
			}
			return;	
		} 
		
	  //__xReq.onreadystatechange = __handleStateChange;
	  if (typeof(__modul) != 'undefined')
	  	__xReq.open('GET', __libPath + __modul[item][0], false); 
	  else
	  	__xReq.open('GET', item, false); 
	  	
	  __xReq.send(null);
		if (__xReq.readyState == 4){
			exec(__xReq.responseText);
			if (typeof(__modul[item]) != 'undefined')
				__modul[item][2] = 1;
		}
	}
	function exec(script) {
		( window.execScript ) ? window.execScript( script ) : window.eval( script );
	}

/* --------------------------------------------------------------- */
/*		xmlRequest erstellen                                         */
/* --------------------------------------------------------------- */
	function __createXMLHttpRequest() {
	  var req = null;
  	try {
    	req = new ActiveXObject("MSXML2.XMLHTTP");
	  }
  	catch (err_MSXML2) {
    	try {
	      req = new ActiveXObject("Microsoft.XMLHTTP");
  	  }
    	catch (err_Microsoft) {
      	if (typeof XMLHttpRequest != "undefined") 
        	req = new XMLHttpRequest;
	    }
  	}
  	return req;
	}


	function loadjscssfile(filename, filetype, test){
		var head=true;
		if (filetype=="js"){ //if filename is a external JavaScript file
	  		var fileref=document.createElement('script')
			fileref.setAttribute("type","text/javascript")
			fileref.setAttribute("src", filename)
		 }
		 else if (filetype=="css"){ //if filename is an external CSS file
	  		var fileref=document.createElement("link")
			fileref.setAttribute("rel", "stylesheet")
			fileref.setAttribute("type", "text/css")
			fileref.setAttribute("href", filename)
	 	} 
	  	
	  	if (head)
	  		document.getElementsByTagName("head")[0].appendChild(fileref)
	  	else
	  		document.getElementsByTagName("body")[0].appendChild(fileref)
	}
    function pause (millis){
      var date = new Date();
      var curDate = null;
      do { curDate = new Date(); }
      while(curDate-date < millis)
	}


		
	
/* ################################################################ */
/* Public */

return {
	version : __version,
/* --------------------------------------------------------------- */
/*		Ermittelt sichtbare höhe/breite des aktuellen Browsers	   */
/* --------------------------------------------------------------- */

    pause : function (millis){
      var date = new Date();
      var curDate = null;
      do { curDate = new Date(); }
      while(curDate-date < millis)
	},


	viewport : function () {
		var viewportwidth;
		var viewportheight;
		function __viewportRender(){
		 if (typeof window.innerWidth != 'undefined')
		 {
		      viewportwidth = window.innerWidth,
		      viewportheight = window.innerHeight
		 }
		 else if (typeof document.documentElement != 'undefined'
		     && typeof document.documentElement.clientWidth !=
		     'undefined' && document.documentElement.clientWidth != 0)
		 {
		       viewportwidth = document.documentElement.clientWidth,
		       viewportheight = document.documentElement.clientHeight
		 }
		 else
		 {
		       viewportwidth = document.getElementsByTagName('body')[0].clientWidth,
		       viewportheight = document.getElementsByTagName('body')[0].clientHeight
		 }
		}	
		 return {
		 	height : function() { __viewportRender(); return viewportheight; },
		 	width : function() { __viewportRender(); return viewportwidth; }
		 	
			}			
	}(),
	
/* --------------------------------------------------------------- */
/*		Lädt Module nach sofern noch nicht geladen                  */
/* --------------------------------------------------------------- */
	Require : function (modul)
	{
		var i = 0;
		__modulName = modul;
		__RequireReady[__modulName] = false;
		for (i=0;i<__modul.length;i++)
		{
			if (__modul[i][0].match(modul))
			{
				if(__modul[i][2]==1)
					return;
				if(!__modul[i][1])
				{
					__loadModul(i);
					return;
				}
			}
		}
		// Modul nicht in config, datei einlesen
		__modul.push (new Array(modul,true,0));
		__loadModul(__modul.length-1);
		__modul[i][2]=1;
		
	},

/* Fügt eine Event zum angegebenen Object hinzu (z.B. __addEvent(window, 'load', function); */
	addEvent : function (obj, evType, fn)
	{ 
		if (obj.addEventListener){ 
	   obj.addEventListener(evType, fn, false); 
  	 return true; 
 		} else if (obj.attachEvent){ 
   		var r = obj.attachEvent("on"+evType, fn); 
	   	return r; 
 		} else { 
   		return false; 
 		} 
	},
	addStyle : function (styleFile,styleType) 
	{
		var st = document.createElement("link");
		st.setAttribute("href",styleFile);
		if (styleType === undefined) styleType = "screen";
		st.setAttribute("media",styleType);
		st.setAttribute("type","text/css");
		st.setAttribute("rel","stylesheet");
		
		document.getElementsByTagName("head")[0].appendChild(st);
		//document.write('<link href="/de/css/slideshow/slideshow-js.css" rel="stylesheet" media="screen" type="text/css" />');
	},
	Trim: function (strValue)
	{
		return strValue.replace (/^\s+/, '').replace (/\s+$/, '');
	},
Cookie : function ()
		{ 
			return {
  set: function(name, value, daysToExpire) {  
    var expire = '';  
    if (daysToExpire != undefined) {  
      var d = new Date();  
      d.setTime(d.getTime() + (86400000 * parseFloat(daysToExpire)));  
      expire = '; expires=' + d.toGMTString();  
    }  
    return (document.cookie = escape(name) + '=' + escape(value || '') + expire);  
  },  
  get: function(name) { 
  	var keyEquals = name+"="; 
  	var value = false;
		document.cookie.split(';').invoke('strip').each(function(s){
    	if (s.startsWith(keyEquals)) {
					value = unescape(s.substring(keyEquals.length, s.length));
          throw $break;
       }
  		});
    return value;  
  },  
  erase: function(name) {  
    var cookie = idTools.Cookie.get(name) || true;  
    idTools.Cookie.set(name, '', -1);  
    return cookie;  
  },  
  accept: function() {  
    if (typeof navigator.cookieEnabled == 'boolean') {  
      return navigator.cookieEnabled;  
    }  
    idTools.Cookie.set('_test', '1');  
    return (idTools.Cookie.erase('_test') === '1');  
  } 				
				
				
				
			}
		}()	
	
	

};}();

/* --------------------------------------- */

 
