/**
 * Execute an ajax request and include the result
 * @param url(file) [, element(target div), params(arguments), anchor(address tag), method(POST or GET)]
 * @return false
 * @version 0.1.0
 */
function ajaxLoad(url, element, params, anchor, method, replaceTag){
	/* Check and init optional parameters */
	if (url == '' || url == null){ return false; }
	if (element == '' || element == null){ element = '#core'; } /* If null init the target div to #core */
  if (params == '' || params == null){ params = ''; }
	if (method == '' || method == null){ method = 'POST'; }

	/* If asked add history and address recognition (anchor) */
  if (anchor != '' && anchor != null){
    setAnchor(anchor);
    $.history.add(anchor);
		disableTab(anchor);
  }

	/* If asked to replace a tag by original ? (IE fix) */
	if (replaceTag != '' && replaceTag != null){
		url = url.replace(/_/g, '?');
	}

	/* Feedback the user that we're loading his file */
  $('body').append('<div class="ajaxLoad" id="__loading__">'+C_LOADING+'</div>');

  $.ajax({
    type: method,
    url: url,
    data: params,
		success: function(app){
			/* Request successful, if the result is not empty, append it to the target div */
			if (app != ''){
				$(element).empty().append(app);
			}
		},
		complete: function(){
			/* Request is complete (success or fail) */
			getListeners(); /* Recall the listeners... */
			$('#__loading__').remove(); /* ...and remove the loading tag */
		}
  });

  return false;
}

/**
 * Get the current application name by anchor
 * @param
 * @return string(address anchor)
 * @version 0.0.1
 */
function getAnchor(){
	var adressAnchor = document.location.hash; /* Get the page anchor */
	var adressAppName = adressAnchor.substring(0, 0) + adressAnchor.substring(0 + 1, adressAnchor.length);
	return adressAppName;
}

/**
 * Set a new anchor for history navigation
 * @param string(application name)
 * @return true
 * @version 0.0.1
 */
function setAnchor(name){
  document.location.hash = name;
	return true;
}

/**
 * Init the dashboard by loading the main app
 * @param
 * @return true
 * @version 0.0.1
 */
function startDashboard(){
	var app = getAnchor();
  if (app == ''){
    app = 'applications/dashboard/index.php';
		ajaxLoad(app, '', '', 'dashboard', '', '0');
  }else{
		anchorApp = app;
    app = 'applications/'+app;
		ajaxLoad(app, '', '', anchorApp, '', '1');
  }
	return true;
}

function restartEngine(){
	document.location = 'http://'+document.location.host;
}

/**
 * Dynamically load a CSS file
 * @param file(path)
 * @return true
 * @version 0.0.1
 */
function loadCSS(file){
	$('head > link[rel="stylesheet"]').attr({ href: file });
	return true;
}

function disableTab(name){
	var splits = name.split('/', 1);

	$('#apps-menu > ul').children().each(function(){
		if ($(this).hasClass('tabSelected')){
			$(this).removeClass('tabSelected');
		}
	});
	$('#top-menu > ul').children().each(function(){
		if ($(this).hasClass('btnSelected')){
			$(this).removeClass('btnSelected');
		}
	});

	if (splits[0] != ''){
		$('#apps-menu > ul > li > a[ajax='+splits[0]+']').parent().addClass('tabSelected');
		$('#top-menu > ul > li > a[ajax='+splits[0]+']').parent().addClass('btnSelected');
		
		switch(splits[0])
		{
			case 'dashboard':
				$('#core').css('border','4px solid #FE5933');
			break;
			case 'admin':
				$('#core').css('border', '4px solid #FE5933');
				$('#options-menu').css('background-color', '#FE5933');
			break;
			case 'agenda':
				$('#core').css('border', '4px solid #FF9000');
				$('#options-menu').css('background-color', '#FF9000');
			break;
			case 'games':
				$('#core').css('border', '4px solid #37BDD6');
				$('#options-menu').css('background-color', '#37BDD6');
			break;
			case 'messaging':
				$('#core').css('border', '4px solid #A883C1');
				$('#options-menu').css('background-color', '#A883C1');
			break;
			case 'wishlist':
				$('#core').css('border', '4px solid #ED0FA6');
				$('#options-menu').css('background-color', '#ED0FA6');
			break;
			case 'album':
				$('#core').css('border', '4px solid #00FF06');
				$('#options-menu').css('background-color', '#00FF06');
			break;
			default:
				$('#core').css('border', '4px solid #11C6EC');
		}		
	}

	return true;
}

