DirectAccess = {
	created: false,
	returnCallback : null,
	timeout : 0,
	timeoutObj : null,
	delay : 1500
};

/*
There is the Data.directAccessMap which contains an array for each channel number

When I do a direct access, then I first need to "go down to root" and then apply the positions from the array.

Main.selectedVideo needs to point to the selected video of that current folder


*/
DirectAccess.init = function (){
	if (this.created == false) {
		DirectAccess.createStyleSheet();
		$("#directChanAccess").hide();
		this.created = true;
	}
};

DirectAccess.selectNewChannel = function (num) {
	Main.log("DirectAccess.selectNewChannel: val= (" + num + ")");
	if (!(num in Data.directAccessMap)){
		Main.log("DirectAccess.selectNewChannel: val= (" + num +") not found!");
		Notify.showNotify("Not Found", true);

/*		Player.stopVideo();
		Main.changeState(0);
		widgetAPI.blockNavigation(event);
*/
		return;
	}
	
	Main.log("DirectAccess.selectNewChannel num= " + num + " Data.directAccessMap[num]= " +Data.directAccessMap[num] );
	if (Data.isRootFolder() != true) {
 		var itm = Data.folderUp();
		Main.selectedVideo = itm.id;
	}
	// now I should be in root
	switch(Data.directAccessMap[num].length) {
	case 1:
		Main.selectedVideo= Data.directAccessMap[num][0];
		Main.log("DirectAccess.selectNewChannel num=" + num +" - Case 1: Main.selectedVideo= "+ Main.selectedVideo);
		break;
	case 2:
		Main.log("DirectAccess.selectNewChannel num=" + num +" - Case 2: Data.directAccessMap[num][0]= "+ Data.directAccessMap[num][0] + " Data.directAccessMap[num][1]= " + Data.directAccessMap[num][1]);
 		if (Data.getCurrentItem().childs[Data.directAccessMap[num][0]].isFolder == true) {
 			Data.selectFolder(Data.directAccessMap[num][0], Data.directAccessMap[num][0]);
 			Main.selectedVideo= Data.directAccessMap[num][1];
 		}
		else {
			// Error: Should be a folder, if there is two elms in directAccessMap
			Display.showPopup("directAccess Failed: Inconsistency in directAccessMap");
			Main.log("ERROR in selectNewChannel num=" + num +"- Case 2: Data.directAccessMap[num][0]= "+ Data.directAccessMap[num][0] + " Data.directAccessMap[num][1]= " + Data.directAccessMap[num][1]);
			
			Player.stopVideo();
			Main.changeState(0);
			widgetAPI.blockNavigation(event);
		}
		break;
	default:
		Display.showPopup("directAccess Failed: Inconsistency in directAccessMap. More than 2 elms");
		Main.log("ERROR in selectNewChannel num=" + num +" - Data.directAccessMap[num].length= "+ Data.directAccessMap[num].length);
		Player.stopVideo();
		Main.changeState(0);
		widgetAPI.blockNavigation(event);
		
		return;
		break;
	}
	
	Player.stopVideo();
	Main.playItem(); 

	
		//
};


DirectAccess.show = function (val) {
	Main.log("DirectAccess.show " + val);
	$("#directAccessText").text(val);
	$("#directChanAccess").show();
	$("#directAccessAnchor").focus();
	
	DirectAccess.timeout = Display.GetUtcTime() + (DirectAccess.delay / 1000.0);
//	DirectAccess.timeout = (new MyDate()).getTimeSec() + (DirectAccess.delay / 1000.0);
	DirectAccess.timeoutObj = window.setTimeout( function() {DirectAccess.handleTimeout();}, DirectAccess.delay);
	Main.log("DirectAccess.show: now= "+ Display.GetUtcTime() +" timeout= " + DirectAccess.timeout +" delta= " + (DirectAccess.timeout -Display.GetUtcTime()));
//	Main.log("DirectAccess.show: now= "+ (new MyDate()).getTimeSec() +" timeout= " + DirectAccess.timeout +" delta= " + (DirectAccess.timeout -(new MyDate()).getTimeSec()));
	};


DirectAccess.hide = function () {
	Main.log("DirectAccess.hide: timeout= " + DirectAccess.timeout);
	if (DirectAccess.timeoutObj != null) {
		window.clearTimeout(DirectAccess.timeoutObj);
		DirectAccess.timeoutObj = null;
	};
//	$("#directAccessAnchor").val("");
	$("#directAccessText").text("");

	$("#directChanAccess").hide();
	$("#directAccessAnchor").blur();
	Main.enableKeys();
};

DirectAccess.handleTimeout = function () {
	Main.log("DirectAccess.handleTimeout");
	DirectAccess.timeoutObj = null;
	
	if (Display.GetUtcTime() < DirectAccess.timeout) {
//	if ((new MyDate()).getTimeSec() < DirectAccess.timeout) {
		var delta = (DirectAccess.timeout -Display.GetUtcTime()) *1000.0;
//		var delta = (DirectAccess.timeout -(new MyDate()).getTimeSec()) *1000.0;
		DirectAccess.timeoutObj = window.setTimeout( DirectAccess.handleTimeout, delta);
		DirectAccess.timeout = Display.GetUtcTime() + (delta / 1000.0);
//		DirectAccess.timeout = (new MyDate()).getTimeSec() + (delta / 1000.0);
		Main.log("DirectAccess.timeout: " + DirectAccess.timeout);
	}
	else {
		Main.log("DirectAccess.timeout: handleEnter");
		DirectAccess.handleEnter();
	};
};

DirectAccess.extendTimer = function () {
	DirectAccess.timeout = Display.GetUtcTime() + (DirectAccess.delay / 1000.0);
//	DirectAccess.timeout = (new MyDate()).getTimeSec() + (DirectAccess.delay / 1000.0);
	Main.log("DirectAccess.extendTimer: " + DirectAccess.timeout);
};

DirectAccess.cancel = function () {
	DirectAccess.hide();
};

DirectAccess.handleEnter = function () {	
//	Main.log("DirectAccess.handleEnter val= " +$("#directAccessAnchor").val() );
//	DirectAccess.selectNewChannel($("#directAccessAnchor").val());
	Main.log("DirectAccess.handleEnter val= " +$("#directAccessText").text() );
	DirectAccess.selectNewChannel($("#directAccessText").text());
	DirectAccess.hide();

	// find entry according to number
};

DirectAccess.createStyleSheet = function () {
	var sheet = $("<style>");
	sheet.attr({type : 'text/css',
		innerHTML : '\
		#directChanAccess { left: 87%; top: 10px; width:8%; height: 10%; position: absolute; \
					text-align:center; \
		            background:rgba(0,0,139, 0.8);\
					border-width:1px;border-style:solid;border-width:1px;border-radius:15px;\
			       -webkit-box-shadow:3px 3px 7px 4px rgba(0,0,0, 0.5);z-index:15;}\
		#directAccessAnchor {background-color:transparent;text-align: right;font-size:20px}\
		#directAccessText {background-color:transparent;text-align: right;font-size:20px}\
		'});

	$('body').append(sheet);
};

DirectAccess.onInput = function () {
    var keyCode = event.keyCode;
	var input ="";
//	if (input.length == 4) {
//	Main.log("DirectAccess.onInput: len= " + $("#directAccessText").text().length );

	if ($("#directAccessText").text().length == 4) {
//		input= $("#directAccessAnchor").val().slice(1);
		input= $("#directAccessText").text().slice(1);
	}
	else {
//		input= $("#directAccessAnchor").val();
		input= $("#directAccessText").text();
	}
//		$("#directAccessAnchor").val(input.slice(1));
//	Main.log("DirectAccess.onInput: " + keyCode + " Val= " + $("#directAccessAnchor").val());
//	Main.log("DirectAccess.onInput: " + keyCode + " Val= " + $("#directAccessText").text() + " input.length= " + input.length);
	DirectAccess.extendTimer();
    switch(keyCode) {
        case tvKey.KEY_0:
//			$("#directAccessAnchor").val(input + "0");
			$("#directAccessText").text(input + "0");
			break;
        case tvKey.KEY_1:
//			$("#directAccessAnchor").val(input + "1");
			$("#directAccessText").text(input + "1");
			break;
        case tvKey.KEY_2:
//			$("#directAccessAnchor").val(input + "2");
			$("#directAccessText").text(input + "2");
			break;
        case tvKey.KEY_3:
//			$("#directAccessAnchor").val(input + "3");
			$("#directAccessText").text(input + "3");
			break;
        case tvKey.KEY_4:
//			$("#directAccessAnchor").val(input + "4");
			$("#directAccessText").text(input + "4");
			widgetAPI.blockNavigation(event);
			break;
        case tvKey.KEY_5:
//			$("#directAccessAnchor").val(input + "5");
			$("#directAccessText").text(input + "5");
			break;
        case tvKey.KEY_6:
//			$("#directAccessAnchor").val(input + "6");
			$("#directAccessText").text(input + "6");
			break;
        case tvKey.KEY_7:
//			$("#directAccessAnchor").val(input + "7");
			$("#directAccessText").text(input + "7");
			break;
        case tvKey.KEY_8:
//			$("#directAccessAnchor").val(input + "8");
			$("#directAccessText").text(input + "8");
			break;
        case tvKey.KEY_9:
//			$("#directAccessAnchor").val(input + "9");
			$("#directAccessText").text(input + "9");
			break;
        case tvKey.KEY_ENTER:
			//Search channel
			DirectAccess.handleEnter ();
			widgetAPI.blockNavigation(event);
		break;
		case tvKey.KEY_RETURN:
		case tvKey.KEY_EXIT:
			DirectAccess.hide();
			if (this.returnCallback  != null)
				this.returnCallback(); 	    	
			break;
	};
	Main.log("DirectAccess.onInput: input= " + $("#directAccessText").text());
	widgetAPI.blockNavigation(event);
};