/* 	: spacecake : synoptx.net: Javascript Function Library 	: c |< 2006	: v 0.2 : 12.11	  */

function switchstatus(state) {
	
	var trfImg;
	if(trfImg=document.getElementById("trafficDisplayImg")) {
		if(trfImg) {
	        var trfDis = true;
	    }
	}
	var actDisO;
	if(actDisO=document.getElementById("actionDisplay")) {
		if(actDisO ) {
        	var actDis = true;
        }
	}	

	if( state == 'loading') {
		if(trfDis) {
			trfImg.src = '/img/icons/spinner.gif';
			document.getElementById('trafficDisplayText').innerHTML = 'Loading..';
		}
        if(actDis) {
			actDisO.style.display = 'block';
        }
	}	
	if( state == 'complete') {
	    if(trfDis) {
			trfImg.src = '/img/icons/check.gif';
			document.getElementById('trafficDisplayText').innerHTML = 'Rendering';
		}
		if(actDis) {
			actDisO.style.display = 'none';
	    }
		setTimeout("switchstatus('ok');",500);
	}		
	if( state == 'saving') {
	    if(trfDis) {
			trfImg.src = '/img/icons/save.gif';
			document.getElementById('trafficDisplayText').innerHTML = 'Saving Data';
        }
        if(actDis) {
			actDisO.style.display = 'block';
		}
	}	
	if( state == 'ok') {
	    if(trfDis) {
			document.getElementById('trafficDisplayText').innerHTML = '..';
		}
	}	
}

var HistoryTracker = function(url, target, change_url, nav_div){
	this._url 		= url;
	this._target 	= target;
	
	
	if(change_url == null) {
		change_url = url;
	}	
	if(change_url.substr(0,6) == '/bare/' ) {
		change_url = change_url.substr(5);
	}	
	if(change_url.substr(0,1) == '/' ) {
		change_url = change_url.substr(1);
	}
	this.changeUrl = change_url;

	if(nav_div) {	
		this._nav_div 	= nav_div;
		this._nav_act_id = 'ico_'+ change_url.charAt(0).toUpperCase() + change_url.substr(1).toLowerCase();
	}
}
HistoryTracker.prototype.back = function(){
	if(this._nav_div) {	
		activatenav(this._nav_act_id, this._nav_div);
	}
	loadPage(this._url, this._target, this.changeUrl);
}
HistoryTracker.prototype.forward = function(){
	
	if(this._nav_div) {	
		activatenav(this._nav_act_id, this._nav_div);
	}
	loadPage(this._url, this._target, this.changeUrl, true);
}

function startup( ) {
	
	toggleDisplayElement('actionDisplay',0);

	navigator.userAgent.toLowerCase().indexOf('msie') != -1 ? is_ie = true : is_ie = false;
	
	if(is_ie == true) {
		dojo.require("dojo.widget.ContentPane");
	}
	var state = { back: function() { return; 		},
				  forward: function() { return; 	}	}; 
				  
	dojo.undo.browser.setInitialState(state);

	dojo.addOnLoad( function() {

			toggleDisplayElement('actionDisplay',100);

			if($mode == 'init') {
				// ups : rewrite after ajax to visitor
				//checkBookmark();
			}
		});
}
function checkBookmark() {

	var bookmarkId = location.hash;
	if(bookmarkId){	
		bookmarkId = bookmarkId.substring(1, bookmarkId.length);
		dojo.byId('content').innerHTML = "!! Redirecting to /" + bookmarkId;
		//alert(bookmarkId);
		loadPage( '/bare/'+bookmarkId, 'content', bookmarkId );
		//document.location.href = bookmarkId;
		
	} 
	
}
function loadPage( url, target_div, change_url, nav_div, reload) {

	if(url.substr(0,6) != '/bare/' ) {
		url = '/bare' + url;
	}

	if($mode == 'user' || $mode == 'coder') {	// global var from php
		
		loadPageCp( url, target_div, change_url, nav_div, reload );
	} else {
	
		navigator.userAgent.toLowerCase().indexOf('msie') != -1 ? is_ie = true : is_ie = false;
		if(is_ie == true) {
			loadPageCp( url, target_div, change_url, nav_div, reload );
		} else {
			loadPageBind( url, target_div, change_url, nav_div, reload );
		}
	
	}
}

function loadPageBind( url, target_div, change_url, nav_div, reload ) {

    switchstatus('loading');
	
	//document.getElementById(target_div).innerHTML = '<div id="loadingBlock"><small>Loading..</small></div>';
    
	dojo.io.bind({
	    url: url,
	    load: function(type, data, evt) { 

	    		// FIXME : two times the <div > contentpane?!!
	    		dojo.byId(target_div).innerHTML = data;
				executeScript(data);	// doesnt load editor2!
				
				if(reload != true) {	    		
					var historyTracker = new HistoryTracker(url, target_div, change_url, nav_div);	
					dojo.undo.browser.addToHistory(historyTracker);	    
				}
	    		dojo.lfx.html.wipeIn(target_div, 350).play();	
				switchstatus('complete');
	    	  },
	    error: function(type, error){
	    			return;
	    	   },
	   //	changeUrl:	change_url,
	    mimetype: 	"text/html",
	    transport: 	"XMLHTTPTransport",
	    useCache:	$djUseCache,
	    preventCache:$djPreventCache	// no coma for IE
	});
		
	return false;	
	
}

function loadPageCp( url, target_div, change_url, nav_div, reload ) {
	// contentpane.seturl needed for editor2

	dojo.widget.byId(target_div).onDownloadStart = function (e) {

        switchstatus('loading');		 
	}
	dojo.widget.byId(target_div).onLoad = function (e) {
 
      	switchstatus('complete');

		//flickers in teatro ::
		//dojo.lfx.html.wipeIn(target_div, 800).play();
	}	

	dojo.widget.byId(target_div).setUrl(url);
	if(reload != true) {	    		
		var historyTracker = new HistoryTracker(url, target_div, change_url, nav_div );	
		dojo.undo.browser.addToHistory(historyTracker);
	}
	return false;
}

function loadPagesCp( url1, target_div1, url2, target_div2 ) {
	
	if(url1.substr(0,6) != '/bare/' ) {
		url1 = '/bare' + url1;
	}
	if(url2.substr(0,6) != '/bare/' ) {
		url2 = '/bare' + url2;
	}
	
	dojo.widget.byId(target_div1).onDownloadStart = function (e) {

    	dojo.lfx.html.wipeOut(target_div1, 200).play();
        switchstatus('loading');
	}

	dojo.widget.byId(target_div1).onLoad = function (e) {

      	switchstatus('complete');
		 
		dojo.lfx.html.wipeIn(target_div1, 400).play();	
		
		dojo.widget.byId(target_div2).setUrl(url2); 
	
		var historyTracker = new HistoryTracker(url2, target_div2);
		dojo.undo.browser.addToHistory(historyTracker);		
	}	
	dojo.widget.byId(target_div1).setUrl(url1);
	var historyTracker = new HistoryTracker(url1, target_div1);
	dojo.undo.browser.addToHistory(historyTracker);		
	return false;
}

function executeScript(content) {
	// handle <script src="foo"> first
	var src = new RegExp('<script.*?src=".*?"');
	var repl = new RegExp('<script.*?src="');
	var matches = src.exec(content);
	var semaphore = 0;

	navigator.userAgent.toLowerCase().indexOf('msie') != -1 ? is_ie = true : is_ie = false;

	if (matches != null) {
		for (i = 0; i < matches.length; i++) {

			var scriptSrc = matches[i].replace(repl, '');
			scriptSrc = scriptSrc.substring(0, scriptSrc.length-1);

			// this evals remote scripts
			dojo.io.bind({
					url:      scriptSrc,
					load:     function(type, evaldObj) {/* do nothing */ },
					error:    function(type, error) {/* do nothing */ },
					mimetype: "text/javascript"
			});
		}    
	}

	// Remove the script tags we matched
	repl = new RegExp('<script.*?src=".*?".*?</script>');
	
	if(is_ie == true) {
		eval(repl);		
	}
	content = content.replace(repl, '');
	

	// Next, handle inline scripts

	// Clean up content: remove inline script  comments
	repl = new RegExp('//.*?$', 'gm');
	content = content.replace(repl, '\n');
	
	// Clean up content: remove carraige returns
	repl = new RegExp('[\n\r]', 'g');
	content = content.replace(repl, '; ');
   
	// Match anything inside <script> tags
	src = new RegExp('<script.*?</script>', 'g');
	matches = content.match(src);

	// For each match that is found...
	if (matches != null) {
		for (i = 0; i < matches.length; i++) {
			// Remove begin tag
			var repl = new RegExp('<script.*?>', 'gm');
			var script = matches[i].replace(repl, '');
             
			// Remove end tag
			repl = new RegExp('</script>', 'gm');
			script = script.replace(repl, ''); 
//			eval(script);
			
			setTimeout((function() {eval(script);}), 250);
		}    
	}
}
/*
function loadTmpl(url, target_div) {
	// 2fix: fallback, ..., fx_conf
	url = '/bare/templates/rendertmpl' + url;
	
	dojo.widget.byId(target_div).onDownloadStart = function (e) {
         switchstatus('loading');
	}
	dojo.widget.byId(target_div).onLoad = function (e) {
         switchstatus('complete');
	}		
	dojo.widget.byId(target_div).setUrl(url);				
	return false;
}
*/
function loadPlaylist(playerid, tmplurl) {

	document.getElementById('audioplayer').loadPlaylist();
}

function toggleDisplayElement(el, duration) {	

	if(duration == undefined) {
		duration = 300;
	}	
	elem = document.getElementById(el);

	if(elem.style.display == 'none' || elem.style.visibility == "hidden" ) {

		if(duration != 0){
			dojo.lfx.html.wipeIn(el, duration).play();	 
		} else {
			elem.style.display = 'block';
		}
		
	} else {
		if(duration != 0){
			dojo.lfx.html.wipeOut(el, duration).play();
		} else {			
			
			elem.style.display = 'none';
		}
	}
	return false;
}	
function toggleDisplayElement_basic(el) {	

	elem = document.getElementById(el);

	if(elem.style.display == 'none' || elem.style.visibility == "hidden" ) {
		elem.style.display= 'block';
	} else {
		elem.style.display = 'none';
		elem.style.visibility = 'hidden';
	}
	return false;
}	

var allPageTags = new Array(); 
function hideFlash() {
	var cmsg = 'message';
	var cerr = 'error';	
    var allPageTags=document.getElementsByTagName("div");
    for (i=0; i<allPageTags.length; i++) {
    	if (allPageTags[i].className == cmsg)	{	/* :: hide .message */
    	
 			//new Effect.SwitchOff(allPageTags[i], {duration:1}); 			 		
 			new Effect.Fold(allPageTags[i], {duration:0.3}); 			 		
    	}
    	if (allPageTags[i].className == cerr)	{	/* :: hide .error */
 			new Effect.SwitchOff(allPageTags[i], {duration:1});   
    	}
    }
}

function activatenav(el, navDivId) {
	elem 	 = document.getElementById(el);
	elnavDiv = document.getElementById(navDivId);
	
  	elNav = elnavDiv.getElementsByTagName('a');	// deactivate
  	for (i = 0; i < elNav.length; i++) {	
		if( elNav[i].className.substr(elNav[i].className.length-4,4) == '_act') {		
			// IE substr bug: no negative parms!
   			elNav[i].className = elNav[i].className.substr(0,elNav[i].className.length-4);
		}
	}
	elem.className=elem.className + '_act';		// activate
}
/* EOF */
