/* JSON Router  (c) eConcept AB */

var doJSON_loaded = new Object;
var doJSON_wait = 0;
var doJSON_pendingJS = new Array;
var doJSON_json;


function updateBackdrop( remove ) {


	var zI = getTopZ();

	if ( zI > 0 ) {
	    if ( $('.backdrop').css('z-index') == undefined ) {
			$('<div></div>').addClass('backdrop').css({ position: 'absolute', top: 0, left: 0, zIndex: zI, width: $(window).width(), height: $(document).height(), opacity: 0.2, background: '#000000' }).appendTo( $('body') );
		}

		$('.backdrop').css({ zIndex: zI });

	} else {
	
		if ( remove ) {
			$('.backdrop').remove();
		} else {
		    if ($('.backdrop').css('z-index') == undefined ) {
				$('<div></div>').addClass('backdrop').css({ position: 'absolute', top: 0, left: 0, zIndex: getTopZ(), width: $(window).width(), height: $(document).height(), opacity: 0.2, background: '#000000' }).appendTo( $('body') );
			}
		}
	}
	
}

function getTopZ() {
	
	// Detect the front div using backdrop.

	var zI = 0;
	$('.useBackdrop').each( function ( idx ) {
		if ( $(this).css('z-index') > zI ) {
			zI = $(this).css('z-index');
		}
	});

	return parseInt('0'+zI);	
	
}

function deleteBackdrop(){updateBackdrop(true);}

function sendJSON ( url, data, callback ) {

	$('#ajaxLoad').remove();
	$('<div id="ajaxLoad" style="position: absolute; border: 0px; margin: 0px; padding: 0px; top:0px; left: 0px; width: '+$(window).width()+'px; height: '+$(window).height()+'px; z-index: 20000;">. . .</div>').appendTo('body');
	
	if ( data.backdrop ) {
		delete data.backdrop;
		updateBackdrop();
	}
	
	if ( callback == false ) { callback = function(json){doJSON(json);}; }
	if ( url == false ) { url = '/core.php'; }	

	data.doJSON = 1;
	
	$.getJSON ( url, data, function ( json ) { callback(json); $('#ajaxLoad').remove(); } );
	
}



function doJSON(json){
   
   
   	var onReady = false;

	if (json.jsSrc) {
		for ( key in json.jsSrc ) {

	   		// Dont load doJSON multiple times.
	   		if ( json.jsSrc[key].slice ( -15 ) == '/core/doJSON.js' ) {
	  			doJSON_loaded[json.jsSrc[key]] = true;
			}

	   		// Dont load jQuery multiple times.
	   		if ( json.jsSrc[key].slice ( -16 ) == '/jquery-1.3.2.js' ) {
	  			doJSON_loaded[json.jsSrc[key]] = true;
			}

			if ( doJSON_loaded[json.jsSrc[key]] == undefined ) {
				onReady = true;
				doJSON_wait++;
				doJSON_loaded[json.jsSrc[key]] = true;

	//			alert ('Load: '+json.jsSrc[key]+' ('+doJSON_loaded[json.jsSrc[key]]+') wait:'+doJSON_wait );
				$.ajax ( { type: 'GET', url: json.jsSrc[key], cache: true, dataType: 'script', success: function (data, status ) { doJSON_load ( status ); } } );
			}
		}

		doJSON_pendingJS = json.jsReady;
		doJSON_json = json;

	}

	if ( json.cssSrc ) {
		for ( key in json.cssSrc ) {
			if ( doJSON_loaded[json.cssSrc[key]] == undefined ) {

				doJSON_loaded[json.cssSrc[key]] = true;
				$('head').append('<link rel="stylesheet" type="text/css" href="'+json.cssSrc[key]+'"></link>');
			}
		}
	}
	
	if ( json.style ) {
		for ( key in json.style ) {
			var style = "";
			if ( doJSON_loaded['style'+key] == undefined ) {

				style = style+json.style[key];
				doJSON_loaded['style'+key] = true;
				
			}
			$('head').append('<style type="text/css">'+style+'</style>');	
		}
	}
	

	if ( json.js ) {
		for ( key in json.js) {
			if ( doJSON_loaded['js'+key] == undefined ) {
				doJSON_loaded['js'+key] = true;	 
				$('head').append('<script type="text/javascript">'+json.js[key]+'</script>');
				eval ( json.js[key] );
			}
		}
	}


	if ( json.idContent ) {
		for ( key in json.idContent ) {
			$(key).html( json.idContent[key] ); 
		}
	}

	if ( onReady == false ) {
		if ( json.jsReady ) {
			for ( key in json.jsReady) {
				try { eval ( json.jsReady[key] ); } catch (e) { alert ('Invalid syntax in json.jsReady: ' + json.jsReady[key] ); }
			}
		}


	}

	if ( json.idContentLast ) {
		for ( key in json.idContentLast ) {
			$(key).html( json.idContentLast[key] ); 
		}
	}


}

function doJSON_load () {

	if ( doJSON_wait > 0 ) { doJSON_wait--; }
	
	if ( doJSON_wait == 0  ) { 
		for (var key in doJSON_pendingJS ) {
			js = doJSON_pendingJS[key];
			json = doJSON_json;
			try { eval ( js ); } catch (e) { alert ('Invalid syntax in pending jsReady: ' + js ); }
		}
	}
}

