function Screen_menu(pdiv_) {

	var self = this;
	var pdiv = pdiv_;
	var xml = new Xml();
	var displays = null;
	var aid = Tipex.check_login();
	var elem_ident, elem_passwd;

	this.init = function () {
		create();

		displays = new Displays(document.getElementById("display"));
		displays.add_display(new Screen_display("screendisp"));
		if (aid)
			displays.add_display(new Settings_display("sedisp"));

		displays.update_displays();
		displays.change_display("screendisp");

		displays.get_display("screendisp").add_stab();
	}

	function create() {
		var e1;
		var e = document.createElement("div");
		var t = document.createElement("table");
		var r = t.insertRow(0);
		var c = r.insertCell(r.cells.length);
		c.className = "head";
		c.innerHTML = "<b>select: </b>";
		c = r.insertCell(r.cells.length);
		c.innerHTML = "<a href=\"#\">Odds</a>";
		c.className = "headsel";
		c.id = "screendisptxt";
		c.onclick = function () {
			displays.change_display("screendisp");
		}
		if (aid) {
			c = r.insertCell(r.cells.length);
			c.innerHTML = "&nbsp;|&nbsp;";
			
			c = r.insertCell(r.cells.length);
			c.innerHTML = "<a href=\"#\">Settings</a>";
			c.className = "headsel";
			c.id = "sedisptxt";
			c.onclick = function () {
				displays.change_display("sedisp");
			}

			c = r.insertCell(r.cells.length);

			c = r.insertCell(r.cells.length);
			x = document.createElement("button");
			x.appendChild(document.createTextNode("logout"));
			x.onclick = function () { logout(); }
			c.appendChild(x);		
	
		}
		
		e.appendChild(t);
		pdiv.appendChild(e);

		e1 = document.createElement("hr");
		pdiv.appendChild(e1);

		e = document.createElement("div");
		e.id = "display";
		pdiv.appendChild(e);
	}

	function Screen_display(name_) {

		var self = this;
		this.name = name_;
		this.data = null;

		var ddiv = null;
		var n = 0;
		var screens = null;

		this.select = function () {
		}

		this.create = function () {
			self.data = document.createElement("div");
			screens = new Array();
			create_head();
		}

		this.update = function () {
			if (!self.data)
				self.create();
		}

		this.add_stab = function () {
			create_stab();
		}

		function create_head() {
			var cdiv = document.createElement("div");

			var hdiv = document.createElement("div");
			
			var t = document.createElement("table");
			var r = t.insertRow(0);
			var c = r.insertCell(0);
			c.appendChild(b = document.createElement("button"));
			b.style.fontFamily = "arial";
			b.style.fontSize = 10;
			b.appendChild(document.createTextNode("add screen"));
			b.onclick = function () {
				create_stab();
			}
			c = r.insertCell(1);
			c.style.width = "50px";
			c = r.insertCell(2);
			c.appendChild(s1 = document.createElement("span"));
			s1.innerHTML = '';
			
			hdiv.appendChild(t);
			
			hdiv.appendChild(document.createElement("hr"));
			cdiv.appendChild(hdiv);

			ddiv = document.createElement("div");
			cdiv.appendChild(ddiv);

			self.data.appendChild(cdiv);	
		}

		function create_stab() {
			var sn = n;
	
			var e = document.createElement("div");
			var e2 = document.createElement("div");
			var s1 = document.createElement("span");
			var b;
			s1.appendChild(b = document.createElement("button"));
			b.appendChild(document.createTextNode("X"));
			b.style.fontFamily = "arial";
			b.style.fontSize = 10;
			b.onclick = function () {
				remove_stab(sn);
			}
			e2.appendChild(s1);
			e.appendChild(e2);

			var e3 = document.createElement("div");
			e3.id = "stab" + n;
			var screen = new Screen(e3);
			screens[n++] = screen;
			e.appendChild(e3);
			ddiv.appendChild(e);
			screen.init();
		}

		function remove_stab(n) {
			screens[n].stop();
			delete screens[n];

			var e = document.getElementById("stab" + n);
			var stab = e.parentNode;
			var sparent = document.getElementById("sparent");
			ddiv.removeChild(stab);
		}
	}

	function Settings_display(name_) {
	
		var self = this;
		this.name = name_;
		this.data = null;

		var settings = null;	

		this.select = function () {
			if (!settings.is_ready())
				settings.init();
		}

		this.create = function () {
			self.data = document.createElement("div");
			settings = new Settings(self.data);
		}

		this.update = function () {
			if (!self.data) 
				self.create();
		}
	}	

}

function Screen(sp) {

	var self = this;
	var sparent = sp;
	var ocdiv = null;
	var d = document
	var xml = new Xml();
	var ocscreen = null;
	var user_data = new Array()
	var aid = Tipex.check_login();

	this.init = function () {
		create();
	}

	this.stop = function () {
		ocscreen.stop();
	}

	function get_elem_name(name) {
		return sparent.id + "_" + name;
	}

	function get_elem(name) {
		return document.getElementById(get_elem_name(name));
	}

	function create_oc_screen() {
		
		if (ocdiv.childNodes.length > 0) {
			ocscreen.stop();
			ocdiv.removeChild(ocdiv.firstChild);
		}

		ocscreen = new Oc_screen(ocdiv);

		var ot = get_elem("otsel").value;
		var pgid = get_elem("grpsel").value;
		var of = parseInt(get_elem("ofsel").value);
		var lastmins = get_elem("lastmins").value;	
	
		ocscreen.init(ot, get_sel_bids(), pgid, of, lastmins);
		ocscreen.start();
	}

	function create_ot_menu(p) {
		var e = document.createElement("select");
		e.id = get_elem_name("otsel");
		e.options[e.options.length] = new Option("3-way", 0);		
		e.options[e.options.length] = new Option("2-way", 1);		
		e.options[e.options.length] = new Option("spread", 3);		
		e.options[e.options.length] = new Option("total", 4);		
		e.options[e.options.length] = new Option("asian", 5);		

		e.onchange = function () { 
			load_groups(); 
			create_oc_screen();
		}
		p.appendChild(e);
	}

	function create_grp_menu(p) {
		var e = document.createElement("select");
		e.id = get_elem_name("grpsel");
		e.onchange = function () { create_oc_screen(); }	
		p.appendChild(e);

	}
	
	function create_of_menu(p) {
		var e = document.createElement("select");
		e.id = get_elem_name("ofsel");
		e.options[e.options.length] = new Option("decimal", 0);
		e.options[e.options.length] = new Option("american", 2);
		e.onchange = function () { create_oc_screen(); }	
		p.appendChild(e);

	}

	function create_lastmins_menu(p) {
		var e = document.createElement("select");
		e.id = get_elem_name("lastmins");
		e.options[e.options.length] = new Option("1 mins", 1);
		e.options[e.options.length] = new Option("5 mins", 5);
		e.options[e.options.length] = new Option("10 mins", 10);
		e.options[e.options.length] = new Option("15 mins", 15);
		e.options[e.options.length] = new Option("30 mins", 30);
		e.options[e.options.length] = new Option("1 hours", 60);
		e.options[e.options.length] = new Option("2 hours", 120);
		e.options[e.options.length] = new Option("6 hours", 480);
		e.options[e.options.length] = new Option("12 hours", 960);
		e.onchange = function () { create_oc_screen(); }	
		p.appendChild(e);

	}

	function create_ud_menu(p) {
		var e = document.createElement("select");
		e.id = get_elem_name("udsels");
		e.onchange = function () { create_oc_screen(); }
		p.appendChild(e);
	}

	function create() {
		var e0 = document.createElement("div");
		sparent.appendChild(e0);

		var t = document.createElement("table");
		var r = t.insertRow(t.rows.length);
		r = t.insertRow(t.rows.length);
		create_ot_menu(r.insertCell(r.cells.length));
		create_grp_menu(r.insertCell(r.cells.length));
		create_of_menu(r.insertCell(r.cells.length));
		create_lastmins_menu(r.insertCell(r.cells.length));
		if (aid)
			create_ud_menu(r.insertCell(r.cells.length));

		e0.appendChild(t);

		load_user_data();
		load_groups();

		ocdiv = document.createElement("div");
		ocdiv.id = get_elem_name("ocdiv");
		e0.appendChild(ocdiv);
		create_oc_screen();
	}


	function get_user_data_sel()
        {
                var id = -1;

                var sels = get_elem("udsels");
		if (sels == undefined)
			return id;

                if (sels.selectedIndex != 0 && sels.selectedIndex != -1)
                        id = sels.options[sels.selectedIndex].value;

                return id;
        }


	function get_sel_bids()
	{
		var id = get_user_data_sel();

		if (id != -1) {
			return user_data[id][1].split(",");
		}

		return get_default_bids();
	}


	function load_user_data()
	{
		xml.load_data("userdata.php?action=get", update_user_data, false);
	}

	function load_groups()
	{
		var param = "";

		param += "&bid=" + get_sel_bids().join();

		var o = get_elem("otsel");
		var ot = o.options[o.selectedIndex].value;
		param += "&ot=" + ot;

		xml.load_data("groups.php?" + param, update_groups, false);
	}



	function update_groups(groups_data)
	{
		var g = get_elem("grpsel");    

		var oldsel = -1;
		if (g.options.length > 0) {
			oldsel = g.options[g.options.selectedIndex].value;
		
			while (g.options.length > 0)
				g.remove(0);
		}

		var newselidx = -1;
		for (var i=0; i < groups_data.length; ++i) {
			var gd = groups_data[i];
			if (gd == undefined) continue;
			var grpname = gd[1] + " " + gd[2];
			g.options[g.options.length] = new Option(grpname, gd[0]);
			if (newselidx == -1) {
				if (oldsel != -1) {
					if (oldsel == gd[0]) 
						newselidx = i;
				}
				else if (gd[1] == "AFBNFL" || gd[1] == "FBENG" || gd[1] == "FBINT") {
					newselidx = i;
				}	
			}
		}
		
		if (newselidx != -1)
			g.selectedIndex = newselidx;
		else g.selectedIndex = 0;

	}


	function update_user_data(data)
	{
		var sels = get_elem("udsels");
		if (sels == undefined)
			return;

		sels.length = 0;
		sels.options[0] = new Option("(default)", -1);

		user_data = data;

		for (i in user_data) {
			var sel = user_data[i];
			sels.options[sels.options.length] = new Option(sel[0], i);
		}
	}
}

function Settings(pdiv_)
{
	var self = this;
	var pdiv = pdiv_;

	var d = document;
	var xml = null;
	var books = new Array();
	var user_data = new Array();

	this.init = function () 
	{
		xml = new Xml();

		create();

		reload_books();
		reload_user_data();
	}

	this.is_ready = function () 
	{
		return pdiv.childNodes.length > 0;
	}

	function create() {
		var e = d.createElement("div");
		var t = d.createElement("table");
		var r;
		r = t.insertRow(t.rows.length);
		c = r.insertCell(r.cells.length);
		c.innerHTML = "selection name:";
		c = r.insertCell(r.cells.length);
		o = d.createElement("input");
		o.id = "selname";
		o.size = 15;
		o.type = "text";
		c.appendChild(o);
		r = t.insertRow(t.rows.length);
		c = r.insertCell(r.cells.length);
		c.innerHTML = "selections:";
		c = r.insertCell(r.cells.length);
		o = d.createElement("select");
		o.id = "sels";
		o.onchange = function () { change_selection(); }
		c.appendChild(o);

		r = t.insertRow(t.rows.length);
		c = r.insertCell(r.cells.length);
		o = d.createElement("button");
		o.appendChild(d.createTextNode("save"));
		o.onclick = function () { save_user_data(); }	
		c.appendChild(o);
		o = d.createElement("button");
		o.appendChild(d.createTextNode("delete"));
		o.onclick = function () { delete_user_data(); }	
		c.appendChild(o);
		e.appendChild(t);

		// br

		var t = d.createElement("table");
		var r;
		r = t.insertRow(t.rows.length);
		c = r.insertCell(r.cells.length);
		o = d.createElement("select");
		o.id = "books";
		o.size = 20;
		c.appendChild(o);
		c = r.insertCell(r.cells.length);
		var s;
		c.appendChild(s = d.createElement("span"));
		o = d.createElement("button");
		o.appendChild(d.createTextNode("add"));
		o.onclick = function () { select(); }
		s.appendChild(o);
		s.appendChild(d.createElement("br"));
		o = d.createElement("button");
		o.appendChild(d.createTextNode("remove"));
		o.onclick = function () { unselect(); }
		s.appendChild(o);
		c = r.insertCell(r.cells.length);
		o = d.createElement("select");
		o.id = "selbooks";
		o.size = 20;
		c.appendChild(o);
		c = r.insertCell(r.cells.length);
		c.appendChild(s = d.createElement("span"));
		o = d.createElement("button");
		o.appendChild(d.createTextNode("up"));
		o.onclick = function () { up(); }
		s.appendChild(o);
		s.appendChild(d.createElement("br"));
		o = d.createElement("button");
		o.appendChild(d.createTextNode("down"));
		o.onclick = function () { down(); }
		s.appendChild(o);
		e.appendChild(t);

		pdiv.appendChild(e);	
	}


	function reload_user_data()
	{
		xml.load_data("userdata.php?action=get", update_user_data, false);
	}

	function update_user_data(data)
	{
		var sels = document.getElementById("sels");
		sels.length = 0;
		sels.options[0] = new Option("(new)", -1);

		user_data = data;

		for (i in user_data) {
			var sel = user_data[i];
			sels.options[sels.options.length] = new Option(sel[0], i);
		}

		change_selection();

	}

	function delete_user_data()
	{
		var id = get_cur_sel();
		if (id == -1)
			return;
		
		xml.load_data("userdata.php?action=delete&id=" + id, null, false);
		window.location.replace("/screen/screen.php");
	}

	function save_user_data()
	{
		var id = get_cur_sel();

		var selname = document.getElementById("selname");
		if (selname.value == "" || selname.value == "-") {
			window.alert("selection must have a name");
			return;
		}

		var selbooks = document.getElementById("selbooks");
		var bsels = "";
		for (var i=0; i < selbooks.length; ++i) {
			bsels += selbooks.options[i].value;
			if (i < selbooks.length-1)
				bsels += ",";
		}

		xml.load_data("userdata.php?action=set&id=" + id + "&name=" + selname.value + "&selbooks=" + bsels, null, false);

		window.location.replace("/screen/screen.php");

	}

	function get_cur_sel()
	{
		var id = -1;

		var sels = document.getElementById("sels");
		if (sels.selectedIndex != 0)
			id = sels.options[sels.selectedIndex].value;
		
		return id;
	}

	function populate_books()
	{
		var t = new Array();
		for (var i in books) {
			t.push(new Array(i, books[i]));
		}

		t.sort(function (a, b) {
			var x = a[1].toLowerCase();
			var y = b[1].toLowerCase();
			return y == x ? 0 : (y > x ? -1 : 1);
		});

		var o = document.getElementById("books");
		o.length = 0;

		for (var i=0; i < t.length; ++i) {
			o.options[o.options.length] = new Option(t[i][1], t[i][0]);
		}	
	}

	function populate_sels(id)
	{
		var sels;

		if (id == -1)
			sels = new Array();
		else
			sels = user_data[id][1] != "" ? user_data[id][1].split(",") : new Array();

		var selbooks = document.getElementById("selbooks");
		selbooks.length = 0;

		var n = 0;
		for (var i=0; i < sels.length; ++i) {
			if (books[sels[i]] == undefined) continue;
			selbooks.options[n++] = new Option(books[sels[i]], sels[i]);
		}

		var booksel = document.getElementById("books");

		var removes;
		do {
			removes = 0;
			for (var i=0; i < sels.length; ++i) {
				for (var j=0; j < booksel.length; ++j) {
					if (sels[i] == booksel.options[j].value) {
						booksel.options[j] = null;
						removes++;
						break;
					}
				}
				if (removes) 
					break;
			}
		} while (removes > 0);

	}

	function change_selection()
	{
		populate_books();

		var id = get_cur_sel();
		
		var selname = document.getElementById("selname");

		if (id != -1) {
			selname.value = user_data[id][0];
		}
		else {
			selname.value = "";
		}	

		populate_sels(id);

	}

	function reload_books()
	{
		var param = "";
		
		xml.load_data("books.php?" + param, update_books, false);
	}

	function update_books(data)
	{
		var o = document.getElementById("books");

		books = data;

		populate_books();
	}

	function up() {
		var o = document.getElementById("selbooks");
		if (o.selectedIndex > 0) {
			var i = o.selectedIndex;
			var tmp = o.options[i-1];
			var op = o.options[i];
			o.options[i-1] = new Option(op.text, op.value);
			o.options[i] = tmp;
			o.selectedIndex = i-1;
		}
	}
	function down() {
		var o = document.getElementById("selbooks");
		if (o.selectedIndex < o.length-1) {
			var i = o.selectedIndex;
			var tmp = o.options[i+1];
			var op = o.options[i];
			o.options[i+1] = new Option(op.text, op.value);
			o.options[i] = tmp;
			o.selectedIndex = i+1;
		}
	}

	function select() {
		var books = document.getElementById("books");
		var selbooks = document.getElementById("selbooks");
		var idx = books.selectedIndex;

		if (idx == -1) return;

		var o = books.options[idx];
		selbooks.options[selbooks.options.length] = new Option(o.text, o.value);
		books.options[idx] = null;

		if (books.length > 0)
			books.selectedIndex = idx;
	}

	function unselect() {
		var books = document.getElementById("books");
		var selbooks = document.getElementById("selbooks");
		var idx = selbooks.selectedIndex;
		
		if (idx == -1) return;

		var sel = selbooks.options[idx];

		var i;
		for (i=0; i < books.length; ++i) {
			if (books.options[i].text.toLowerCase() > sel.text.toLowerCase()) {
				break;
			}

		}

		for (var j=books.length; j > i; --j) {
			var x = books.options[j-1];
			books.options[j] = new Option(x.text, x.value);
		}

		books.options[i] = new Option(sel.text, sel.value);
		selbooks.options[idx] = null;

		if (selbooks.length > 0)
			selbooks.selectedIndex = idx;

	}
}
