var cloudServer = "http://mercury.linius.com";
var cloudGateway = "/services/external/linRESTGW.php";
var urlStack = getUrlVars();
if(urlStack['__linID'])	var sessID = urlStack['__linID'];

$(document).ready(function(){

	devMode = true;
	$("ul.sf-menu").superfish();
		
});



function getComponentsToMenu(){
	
	var urlVars = getUrlVars();
	var compURL;
	var id;
	
	if(urlVars['__linID']){
		compURL = "/services/external/linRESTGW.php?PHPSESSID=" + sessID + "&action=getComponents";
	}
	else{
		id = false;
		compURL = "/services/external/linRESTGW.php?action=getComponents";	
	}
	
	$.getJSON(compURL, function(retrn){
		
		if(retrn.className == "linRESTError"){ 		
			displayError(retrn);	
			return;	
		}
			
		$('#linMenu').append('<ul class="sf-menu">');
		for(var i = 0; i < retrn.componentItems.length; i++ ){
			if(!id)	$('#linMenu > ul').append('<li><a href="' + retrn.componentURLs[i] + '">' + retrn.componentItems[i] + '</a></li>\n');
			if(id) $('#linMenu > ul').append('<li><a href="' + retrn.componentURLs[i] + '?__linID=' + id + '">' + retrn.componentItems[i] + '</a></li>\n');
		}
		$("ul.sf-menu").superfish();
		
	});
}

function operate(action, params, callbackFunction, dontShowMsg){
		
	var gwURL;

	// Escape any double quotation marks - these will frag the JSON encoding if not escaped at the other end
	for ( var i=0, elems = params.length; i<elems; ++i )
	{
		if(typeof params[i] == 'string')
		{
			params[i] = params[i].replace( new RegExp( '"', "g" ), '\\"' );
//			console.log("Param: " + params[i]);
		}
	}
		
	if(sessID)	gwURL = "/liniusSDK/utils/linPRX.php?url=" + escape(cloudServer + cloudGateway + "?PHPSESSID=" + sessID + "&action=" + action + "&params=" + encodeURIComponent($.toJSON(params)));
	else		gwURL = "/liniusSDK/utils/linPRX.php?url=" + escape(cloudServer + cloudGateway + "?action=" + action + "&params=" + encodeURIComponent($.toJSON(params)));
			
	//alert("gwURL: " + gwURL);
	
	$.getJSON(
			gwURL,
			function(retrn){
				if(retrn == null){
					alert('Error: No message or error returned from action: ' + action);
					return;
				}
					
				if(retrn.className == "linError"){
					displayError(retrn);
					return;
				}
				
				if(!dontShowMsg)
					displayMessage(retrn);
				
				if(callbackFunction){
					 eval(callbackFunction)(retrn);
				}
				
			}
	);
	
}

function refreshView(id, recordID){
	
	if(recordID)			var linURL = struts[id] + "tokenID=" + recordID;
	else					var linURL = struts[id];

//	alert('Refreshing' + struts[id] + ' ' + id);

	$.ajax({
		url : linURL,
		async: false,
		success : function(html){
			
			$("#" + id).empty();
			$("#" + id).append(html);
			
	}});

}

function closeView(){
}

function displayError(linRESTError){
	
	if(!devMode)	alert(linRESTError.userErrorMessage);
	else			alert(linRESTError.devErrorMessage);
	
	$.unblockUI();
	return;
	
}

function displayMessage(linMESG){
	
	alert(linMESG.message);
	$.unblockUI();
	return;

}

var struts = {
		
		"cLinUserStrut" : "/views/create/linuser.php.inc",
		"rLinUserStrut" : "/views/retrieve/linuser.php.inc",
		"uLinUserStrut" : "/views/update/linuser.php.inc?",
		
		"cLinGroupStrut" : "/views/create/lingroup.php.inc",
		"rLinGroupStrut" : "/views/retrieve/lingroup.php.inc",
		
		"cLinOrganisationStrut" : "/views/create/linorganisation.php.inc",
		"rLinOrganisationStrut" : "/views/retrieve/linorganisation.php.inc",
			
		"cLinVideoStrut" : "/views/create/linvideo.php.inc",
		"rLinVideoStrut" : "/views/retrieve/linvideo.php.inc",

		"cLinEDLStrut" : "/views/create/linedl.php.inc",
		"rLinEDLStrut" : "/views/retrieve/linedl.php.inc",
		
		"rLinDeviceStrut" : "/views/retrieve/lindevice.php.inc",
		"cLinDeviceStrut" : "/views/construction/deviceDetect.php.inc"

};

function getUrlVars(){
	
	var vars = [], hash;
	var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
	
	for(var i = 0; i < hashes.length; i++){
		hash = hashes[i].split('=');
		vars.push(hash[0]);
		vars[hash[0]] = hash[1];
	}
	
	return vars;
}

function setCurrentDeviceDisplay()
{
	var params = [ screen.width, screen.height ];	
	operate("setCurrentDeviceDisplay", params, false, true);
}


