images = new Array(
		'/images/midlet-working.gif',
		'/images/success.png',
		'/images/failed.png',
		'/images/undefined.png'		
);
App = {};

App.getParam = function (name) {
  name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
  var regexS = "[\\?&]"+name+"=([^&#]*)";
  var regex = new RegExp( regexS );
  var results = regex.exec( window.location.href );
  if (results == null )
    return "";
  else
    return results[1];
};

function confirmSubmit(mess) {
	return confirm(mess) ? true : false;
}

function addTextEditor(nam, url) {
	var label = $('#' + nam + "_holder");
	var val = html_entity_decode(label.html());
	var p = label.parent();
	$(document.createElement('input')).addClass('nice').attr('id', nam + "_editor").val(val).appendTo(p.empty());
	$(document.createElement('button')).addClass('smallButton').append(document.createTextNode('OK')).appendTo(p).click(function () {
		val = $('#' + nam + "_editor").val();
		if (val.length == 0) val = 'empty';
		$(document.createElement('a')).html(val).attr({'id': nam + "_holder", 'href': "#"}).click(function() {addTextEditor(nam, url);}).appendTo(p.empty());
		postParam(url, val, false, nam);
	});
}

function addComboEditor(nam, options, url, recheckAfter) {
	var label = $('#' + nam + "_holder");
	var val = html_entity_decode(label.html());
	var p = label.parent();
	
	var opts = '';
	var spl = options.split(',');
	for (var i=0; i<spl.length; i++) {
		opt = spl[i].split('=');
		if (opt[1] == val) {
			opts += '<option value="' + opt[0] + '" selected="selected">' + opt[1] + "</option>";
		} else {
			opts += '<option value="' + opt[0] + '">' + opt[1] + "</option>";
		}
	}
	$(document.createElement('select')).addClass('nice').attr('id', nam + "_editor").html(opts).appendTo(p.empty());
	
	var v = 'undef';
	$(document.createElement('button')).addClass('smallButton').append(document.createTextNode('OK')).appendTo(p).click(function () {
		val = $('#' + nam + "_editor").val();
		for (i=0; i<spl.length; i++) {
			opt = spl[i].split('=');
			if (opt[0] == val) {
				v = opt[1];
				break;
			}
		}		
		$(document.createElement('a')).html(v).attr({'id': nam + "_holder", 'href': "#"}).click(function() {addComboEditor(nam, options, url, recheckAfter);} ).appendTo(p.empty());
		postParam(url, val, recheckAfter, nam);
	});
}

function postParam(url, param, recheckAfter, nam) {
	$.post(url, { 'value' : param }, 
			function(data) {
				if (recheckAfter == '1') {
					checkAllMidlets();
				}
				$('#' + nam + '_holder').html(data.actualValue);
				//innerHTML = html_entity_decode(data.actualValue);
			}, "json"
	);
}

function html_entity_decode(str) {
	  var ta=document.createElement("textarea");
	  ta.innerHTML=str.replace(/</g,"&lt;").replace(/>/g,"&gt;");
	  return ta.value;
}

function showDialog(url, params) {
	$.post(url, params,
			function(data) {
				if (data.ok) {
					jQuery.facebox(data.dialog);
					if (typeof(data.callback) == "undefined") {
						data.callback = 'defaultCallback';
					}
					var options = {
							dataType: data.datatype, 
							beforeSubmit: function() { $.facebox('<div class="c"><img src="/images/working.gif"/></div>'); }, 
							success: function(d) { 
								eval(data.callback + "(d)"); 
							}
					};
					$('#facebox .ajaxSubmit').ajaxForm(options);
				} else {
					jQuery.facebox(data.message);
				}
			}, 'json'
	);
}

function loginCallback(data) {
	if (data.authorized) {
		window.location = data.redirect;
	} else {
		showMessage(data.message);
	}
}

function deleteMidlet(id) {
	if (!confirm(message_confirm_delete_midlet)) {
		return;
	}
	$.post('/utils/midlet/drop', {id: id},
			function(data) {
				if (data.ok) {
					$('#midlet' + id).children().css("background-color", "#f59595").parent().fadeOut("slow");
					if (data.count == 0) {
						$('#noMidlets').show();	
					}
				} else {
					showMessage(data.message);
				}
			}, "json"
	);
}

function deleteProjectEntry(prj,id) {
	if (!confirm(message_confirm_delete_entry)) {
		return;
	}
	$.post('/utils/project/remove-entry', {id: prj, entryId: id},
			function(data) {
				if (data.ok) {
					$('#midlet' + id).children().css("background-color", "#f59595").fadeOut("slow").parent().fadeOut("slow");
					
					if (data.updateToolbar) {
						updateToolbar();
					}
					if (data.updateStatusbar) {
						updateStatusbar();
					}					
					if (data.count == 0) {
						$('#noEntries').show();
					}
				} else {
					showMessage(data.message);
				}
			}, "json"
	);
}

function deleteProject(id) {
	if (!confirm(message_confirm_delete_project)) {
		return;
	}
	$.post('/utils/project/drop', {id: id},
			function(data) {
				if (data.ok) {
					$('#project' + id).children().css("background-color", "#f59595").parent().fadeOut("slow");
					if (data.count == 0) {
						$('#noProjects').show();	
					}
				} else {
					showMessage(data.message);
				}
			}, "json"
	);
}



function createProjectCallback(data, status) {
	if (!data.ok) {
		showMessage(data.message);
	} else {
		hideDialog();
		$('#noProjects').hide();
		$('#projectsTable').prepend(data.display);
		$('.new').removeClass('new').addClass('grn').children().css("background-color", "#a5ffa5").parent().fadeIn("slow");
		setTimeout(function() {$('.grn').removeClass('grn').children().css("background-color", '');}, 5000);
	}
}

function addMidletCallback(data, status) {
	if (!data.ok) {
		showMessage(data.message);
	} else {
		hideDialog();
		$('#noMidlets').hide();
		$('#midletsTable').append(data.display);
		$('.new').removeClass('new').fadeIn("slow");
	}
}

function checkAllMidlets(){
	$.post('/utils/project/check-all-entries', {id: App.getParam('id')},
		function(data) {
			var recheck;
			$.each(data, 
					function(index, e){
						var statusimg = $('#status-' + e.id).children()[0];
						if (statusimg.src.indexOf(images[e.status]) == -1) {
							$(statusimg).attr({'src':images[e.status]});
						}
						$(statusimg).attr({'title':e.details});
						recheck |= e.recheck; 
					}
			);
			if (recheck) {
				setTimeout(checkAllMidlets, 2000);
			}
			
		}, 'json'
	);
}

function updateElements(data) {
	if (typeof data != 'undefined') {
		if (data.updateMidlets) {
			updateMidlets();
		}
		if (data.updateToolbar) {
			updateToolbar();
		}
		if (data.updateStatusbar) {
			updateStatusbar();
		}
		if (data.updateOptions) {
			updateOptions();
		}
	} else {
		updateMidlets();
		updateToolbar();
		updateStatusbar();
		updateOptions();
	}
}

function projectStaled(data) {
	if (data.stalled) {
		$(".projectControl").removeAttr("disabled");
		$(".entryControl").show();
	} else {
		$(".projectControl").attr("disabled", "disabled");
		$(".entryControl").hide();
	}
	if (data.cancelable) {
		$(".projectCancel").removeAttr("disabled");		
	} else {
		$(".projectCancel").attr("disabled", "disabled");
	}
	if (data.updateStatusbar) {
		updateStatusbar();
	}
	if (data.updateOptions) {
		updateOptions();
	}
	$(document).data("status", data.status);
}

function updateToolbar() {
	$('#tbar-i').load("/utils/project/ui/get-toolbar", {id: App.getParam('id')});
}

function updateOptions() {
	$('#options-i').load("/utils/project/ui/get-options", {id: App.getParam('id')});
}

function updateStatusbar() {
	$('#statusbar-i').load("/utils/project/ui/get-statusbar", {id: App.getParam('id')});
}

function updateMidlets() {
	$('#midlets-i').load("/utils/project/ui/get-midlets", {id: App.getParam('id')});
}


function startProject() {
	$.post("/utils/project/start", {id: App.getParam('id')},
		function(data) {
			if (!data.ok) {
				showMessage(data.message);
			} else {
				projectStaled(data);
				setTimeout(checkProject, 2000);
			}
		}, 'json'
	);
}

function cancelProject() {
	$.post("/utils/project/cancel", {id: App.getParam('id')},
		function(data) {
			if (!data.ok) {
				showMessage(data.message);
			} else {
				projectStaled(data);
			}
		}, 'json'
	);
	
}

function checkProject(){
	$.post("/utils/project/check-status", {id: App.getParam('id'), 'status': $(document).data('status')},
		function(data) {
			projectStaled(data);
			if (!data.stalled) {
				setTimeout(checkProject, 2000);
			}
			
		}, 'json'
	);
}

function hideDialog() {
	$.facebox.close();
}

function defaultCallback(data) {
	if (typeof(data.message) != 'undefined') {
		showMessage(data.message);
	}
	if (typeof(data.ok) == 'undefined' || !data.ok) {
		return;
	}
	if (typeof(data.eval) != 'undefined') {
		eval(data.eval);
	}
}
function asyncFormCallback(data) {
	$("input").removeClass("error-hl");
	$("input").removeAttr('title');
	if (typeof(data.ok) == 'undefined' || !data.ok) {
		for (var i in data.errors) {
			var e = data.errors[i];
			var x = $("input[name=\"" + e.field + "\"]");
			x.addClass("error-hl");
			x.attr("title", e.msg);
		}
	}
	if (typeof(data.eval) != 'undefined' && !!data.eval) {
		eval(data.eval);
	}	
	if (typeof(data.redirect) != 'undefined' && !!data.redirect) {
		window.location = data.redirect;
	}	
}
function refreshCode() {
	$("#code").attr("src", "/code.php?id=" + Math.random(100000000)); 
	$("input[name='code']").val("");
}
function addMidlet(projectId, midletId) {
	$.post('/utils/project/put-midlet', {id: projectId, midletId: midletId}, function(data) {
		if (!data.ok) {
			showMessage(data.message);
		} else {
			$('#entriesTable').append(data.display);
			$('.new').removeClass('new').fadeIn("slow");
			
			if (data.updateToolbar) {
				updateToolbar();
			}
			if (data.updateStatusbar) {
				updateStatusbar();
			}
			if (data.count > 0) {
				$('#noEntries').hide();
			}
			if (data.recheck) {
				checkAllMidlets();
			}
		}		
	}, 'json');
}
function showMessage(msg) {
	$.facebox(msg + '<div class="footer"><button onclick="hideDialog()">OK</button></div>');
}
function initProjectUI() {
	updateElements();
}