//Scroll function(s)
var inc = 224;
var slot_width = 28;
var slot_max = 10;

function scroll( form, dir, length ){
	var pane = $("#slotScrollPane",form)[0];
	var scro = $("#slotScroll",pane)[0];
	var tabl = $("table",scro)[0];
	var mt = pane.clientWidth - (tabl.clientWidth+slot_width) - 1;
	//not possible to scroll (should not happen(tm))
	if( mt > 0 )
		return; 
	var ct = parseInt(scro.style.left) || 0;
	if( dir == "left" ){
		var nt = ct + inc;
		//scroll to beginning
		if( nt > 0 )
			nt = 0;
	} else {
		var nt = ct - inc;
		//scroll to end
		if( nt < mt )
			nt = mt;
	}
	//disable scroll buttons
	$(".arrow #"+(dir=="left"?"right":"left"),form)[0].disabled = true;
	var on = $("#"+dir+" img",form)[0];
	on.disabled = true;
	//show active
	on.style.border = "2px solid #BBBBBB";
	on.style.backgroundColor = "#BBBBBB";
	
	var anim = new YAHOO.util.Anim(scro,{ left: { to: nt } }, 0.5, YAHOO.util.Easing.easeBoth);
	anim.animate();
	anim.onComplete.subscribe(function(){
		hideButtons( form, length );
	});
}

function hideButtons( form, length ){
	var index = ((-parseInt($("#slotScroll",form)[0].style.left))/slot_width);
	var hright = slot_max+index>=length?true:false;
	var hleft = index==0?true:false;
	var img = $(".arrow img",form);
	var l = img.length;
	for( var i = 0; i < l; i++ ){
		var t = img[i];
		var hide = t.id=="left"?hleft:hright;
		t.style.display = hide?"none":"block";
		t.disabled = false;
		t.style.border = "2px solid white";
		t.style.backgroundColor = "white";
	};
}

function hideReservation( form, but ){
	var cb = $("input[type=checkbox]",form);
	var l = cb.length;
	var old = true;
	for( var i = 0; i < l; i++ ){
		var ov = cb[i].getAttribute("oval");
		var check = cb[i].checked;
		if( (check && ov == 0) || (!check && ov == 1)){ //  || (!check && ov == 1) remove this before prod if payment
			old = false;
			break;
		}
	}
	but.disabled = old;
}

// function updateButtonRang(checkbox);
// this function will loop through all interval tables and disable checkboxes
// not next to a checked checbox. if no checkboxes are checked, all will be enabled.
// @params checkbox
// false if called on document ready
// DOM object of clicked checkbox if called on checkbox click

function updateButtonRange(checkbox) {
	jQuery(".slotForm").each(function(){ // loop through all interval forms
		var frm = this;
		var tab = $(this).find(".slotBoxTable");
		if( tab.length > 0 ){ // if tables found, proceed
			tab.find('input[type=checkbox]').attr('disabled', false); // enable all checkboxes
			if (tab.find('input[type=checkbox][oval=0]:checked').length) { // check if there are any enabled checkboxes
				tab.find('input[type=checkbox]').not(':checked').attr('disabled', 'disabled'); // disable all unchecked checkboxes
			}
			var fch = tab.find('input[type=checkbox][oval=0]:checked:first').attr('class'); // first checked checkbox class (ID)
			var lch = tab.find('input[type=checkbox][oval=0]:checked:last').attr('class'); // last checked checkbox class (ID)
			var prevCheck = parseInt(fch) - 1; // set ID of checkbox to the left of fch
			var nextCheck = parseInt(lch) + 1; // set ID of checkbox to the right if lch
			if (checkbox) { // if clicked on a checkbox, make checkbox a jQuery object
				checkbox = $(checkbox);
			}
			// if clicked checkbox is between other clicked checkboxes (or already paid), dont allow unchecking the clicked checkbox
			if (checkbox) {
				if ((parseInt(checkbox.attr('class')) < parseInt(lch) && parseInt(checkbox.attr('class')) > parseInt(fch))) { //  || checkbox.attr('oval') == 1 
					checkbox.attr('checked', true);
				}
			}
			if (tab.find('input[class=' + prevCheck + ']')) {
				if (!tab.find('input[class=' + prevCheck + ']').attr('checked')) {
					tab.find('input[class=' + prevCheck + ']').attr('disabled', false); // enable checkbox to the left of fch
				}
			}
			if (tab.find('input[class=' + nextCheck + ']')) {
				if (!tab.find('input[class=' + nextCheck + ']').attr('checked')) {
					tab.find('input[class=' + nextCheck + ']').attr('disabled', false); // enable checkboc to the right of lch
				}
			}
		}
	});
}

function checkButtons(){
	jQuery(".slotForm").each(function(){
		var frm = this;
		var tab = $(this).find(".slotBoxTable");
		if( tab.length > 0 ){
			var length = tab[0].rows[0].cells.length;
			$(this).find(".arrow img").each(function(){
				$(this).click(function(){ if( !this.disabled ) scroll(frm,this.id,length); });
			});
			hideButtons( frm, length );
			var but = $("button",frm);
			if( but.length ){
				var res = but[0];
				tab.find("input[type=checkbox]").each(function(){
					$(this).click(function(){
						hideReservation( frm, res );
						updateButtonRange(this);
						$(this).attr('disabled', false);
					});
				})
			}
		}
	});
}

function MM_preloadImages(){ 
  //v3.0
  var d=document; 

  if(d.images){
     if(!d.MM_p)
        d.MM_p=new Array();

     var i,j=d.MM_p.length,a=MM_preloadImages.arguments; 
     for(i=0; i<a.length; i++)
     {
        if (a[i].indexOf("#")!=0)
        {
           d.MM_p[j]=new Image; 
           d.MM_p[j++].src=a[i];
        }
     }
  }
}

function show_noshow_message( period, count1, count2 ){
	var pm  = period==0?"":(period>1?" de siste "+period+" dagene":" siden i går");
	var c1m = count1>1?count1+" ganger":"1 gang";
	var c2m = count2>1?count2+" ganger":"1 gang";
	
	var msg = "";
	msg += "Dette tallet indikerer antall ganger du ikke\n"; 
	msg += "har møtt opp til time"+pm+".\n";
	msg += "Hvis du ikke har møtt "+c1m+pm+"\n";
	msg += "kan du inntil videre ikke bestille online lengre.\n\n";
	msg += "Du vil fremdeles ha mulighet til å bestille via\n";
	msg += "resepsjonsterminal.\n";
/*
	msg += "Hvis du ikke har møtt mer enn "+c2m+"\n";
	msg += "vil du også bli utestengt fra bestilling på\n"
	msg += "resepsjonsterminalen og eneste mulighet er å\n";
	msg += "bestille i resepsjonen.";
*/
	alert(msg);
}

//Intervall booking functions
var new_id = 1;
var is_interval = false;

function open_select_member(){
	window.open("index.php?page=member_select","select_member","height=420,width=650,top=100,left=100,location=0,menubar=0,resizable=0,scrollbars=0,titlebar=0,directories=0,");
}
function open_select_member_ext( instid ){
	document.getElementById("nb_iid").value = instid;
	window.open("index.php?page=member_select_ext","select_member","height=500,width=650,top=100,left=100,location=0,menubar=0,resizable=1,scrollbars=1,titlebar=0,directories=0,");
}

function set_member( id, name ){
	if( is_interval ){
		var nam = document.createElement("input");
		nam.type = "hidden";
		nam.name = "new_member["+new_id+"]";
		nam.value = id;
		var f = document.getElementById("slot_form");
		f.appendChild(nam);
		document.getElementById("b_user_id").value = "";
		document.getElementById("b_name").value = "";
		
		update_row( name, "Medlem" );
	} else {
		document.getElementById("b_user_id").value = id;
		document.getElementById("b_name").value = name;
		document.getElementById("b_group").value = "";
		if(check_booking()){
			document.getElementById("add_booking").submit();
		}
	}
}

function add_guest(){
	var name = document.getElementById("b_name_guest").value;
	if( !name ){
		alert("Du må skrive navn på gjest som skal bookes");
		return;
	}
	if( is_interval ){
		var nam = document.createElement("input");
		nam.type = "hidden";
		nam.name = "new_group["+new_id+"]";
		nam.value = name;
		var f = document.getElementById("slot_form");
		f.appendChild(nam);
		document.getElementById("b_name_guest").value = "";
		
		update_row( name, "Gjest" );
	} else {
		document.getElementById("b_group").value = "On";
		if(check_booking()){
			document.getElementById("add_booking").submit();
		}
	}
}

function add_group(){
	var name = document.getElementById("b_name_group").value;
	if( !name ){
		alert("Du må fylle ut navn på gruppe");
		return;
	}
	if( is_interval ){
		var f = document.getElementById("slot_form");
		var nam = document.createElement("input");
		nam.type = "hidden";
		nam.name = "new_group["+new_id+"]";
		nam.value = name;
		f.appendChild(nam);
		var nam = document.createElement("input");
		nam.type = "hidden";
		nam.name = "new_group_num["+new_id+"]";
		nam.value = document.getElementById("b_number").value;
		f.appendChild(nam);
		document.getElementById("b_name_group").value = "";
		document.getElementById("b_number").value = "";
			
		update_row( name, "Gruppe" );
	} else {
		document.getElementById("b_group").value = "On";
		if(check_booking()){
			document.getElementById("add_booking").submit();
		}
	}
}

function update_row( name, type ){
	var f = document.getElementById("slot_form");
	
	var tab = document.getElementById("slot_table");
	var olr = tab.rows[1];
	var olc = olr.cells.length;
	var tr = tab.insertRow(tab.rows.length-1);
	tr.className = "slotTableRow";
	tr.setAttribute("class","slotTableRow");
	var r = new RegExp("^[n0-9]+_");
	var c;
	var n;
	//Name cell
	c = tr.insertCell(-1);
	c.setAttribute("class",'slotTableName');
	c.innerHTML = name;
	c = tr.insertCell(-1);
	c.innerHTML = type;
	//checkboxes
	for( var i = 2; i < olc; i++ ){
		n = olr.cells[i].firstChild.name.replace(r,"");
		c = tr.insertCell(-1);
		c.innerHTML = "<input type='checkbox' name='n"+new_id+"_"+n+"'>";
	}
	new_id++;
	slotSumSetup();
}

function check_interval_booking(){
	if( slot_high > slot_max ){
		return confirm("Du har overbooket denne timen, er du sikker på at du vil gjøre dette?");
	}
	return true;
}

var slot_sum = new Object();
var slot_cel = new Object();
var slot_max  = 1;//[var.capacity];
var slot_high = 0;

function slotSum( tab ){
	//do math
	//clear
	for( var n in slot_sum ){
		slot_sum[n] = 0;
	}
	slot_high = 0;
	var r = new RegExp("^[n0-9]+_");
	var cb = $(".slotTableRow input[type=checkbox]",tab);
	var l = cb.length;
	for( var i = 0; i < l; i++){
		var n = cb[i].name.replace(r,"");
		var c = cb[i].checked;
		slot_sum[n] += c?1:0;
	}
	//echo results
	var sum = $(".slotTableFooter td");
	var l = sum.length;
	for( var i = 1; i < l; i++){
		var v = slot_sum[slot_cel[i]];
		slot_high = Math.max(slot_high,v);
		sum[i].firstChild.data = v;
		if( v > slot_max ){
			sum[i].style.backgroundColor = 'red';
		} else if( v == slot_max ) {
			sum[i].style.backgroundColor = 'yellow';
		} else {
			sum[i].style.backgroundColor = 'white';
		}
	}
}

function slotSumSetup(){
	var tab = jQuery(".slotTable");
	if( tab.length ){
		tab = tab[0];
		$(".slotTableRow input[type=checkbox]",tab).each(function(){
			$(this).click(function(){
				slotSum( tab ); 
			});
		});
		var r = new RegExp("^[n0-9]+_");
		var cb = $(".slotTableClear input[type=checkbox]",tab);
		var l = cb.length;
		for( var i = 0; i < l; i++){
			var n = cb[i].name.replace(r,"");
			slot_sum[n] = 0;
			var ci = i+1;//cb[i].parentNode.cellIndex; //Cannot be used, proprietary IE + Moz bug
			slot_cel[ci] = n;
		}
		slotSum( tab ); 
	}
}

$(document).ready(function() {
	// do something here
	slotSumSetup();
});

/*
function set_member( id, name ){
	if( !document.getElementById("b_group").checked ){
		document.getElementById("b_user_id").value = id;
		document.getElementById("b_name").value = name;
	}
}

function open_select_member(){
	window.open("index.php?page=member_select","select_member","height=400,width=600,top=100,left=100,location=0,menubar=0,resizable=0,scrollbars=0,titlebar=0,directories=0,");
}
*/

function check_booking(){
	if( document.getElementById("b_status").value != "Åpen" ){
		var res = confirm("Denne timen er ikke aktiv for booking, er du sikker på at du vil booke?");
		if( res == false ){
			return false;
		}
	}
	
	//Check fields
	if( document.getElementById("b_group").value == "On" ){
		if( document.getElementById("b_name_group").length == 0 && document.getElementById("b_name_guest").length == 0 ){
			alert("Du må fylle ut navn");
			return false;
		}
	} else {
		if( document.getElementById("b_user_id").value == "" ){
			alert("Du må velge et medlem (bruk søk)");
			return false;
		}
	}
	
	//Check capacity
	var cap = document.getElementById("b_capacity").value;
	var bok = document.getElementById("b_bookings").value;
	var num = document.getElementById("b_group").checked?document.getElementById("b_number").value:1;
	if( (cap - bok - num) < 0 ){
		var res = confirm("Mulig overbooking, er du sikker på at du vil fortsette?");
		if( res == false ){
			alert("Reservasjon avbrutt");
			return false;
		}
	}
	return true;
}

function goto_main(){
	window.location.href = "index.php"; //Session id
}

function print_page(){
	window.print();
}

function form_set_value( item ){
	
}

var status_changes = new Array();
var status_changes_length = 0;
function set_user_status_changed( booking_id, old_status, thisref ){
	if( thisref.value != old_status ){
		thisref.parentNode.style.backgroundColor = "red";
		//thisref.style.outline = "red solid 2px";
		if( !status_changes[booking_id] )
			status_changes_length++;
		status_changes[booking_id] = thisref.value;
	} else {
		thisref.parentNode.style.backgroundColor = "";
		if( status_changes[booking_id] ){
			status_changes_length--;
			delete status_changes[booking_id];
		}
	}
	if( status_changes_length == 0 ){
		document.getElementById("status_save_button").disabled = "disabled";
	} else {
		document.getElementById("status_save_button").disabled = "";
	}
}
function save_user_status(){
	var stats = new Array();
	for( c in status_changes ){
		stats.push(c+":"+status_changes[c]);
	}
	jQuery.get("index.php?page=admin_callback&call=save_booking_status&bookings="+stats.join(','),null,save_user_status_cb);
}
function save_user_status_cb(data,status){
	var status = null;
	var message = null;
	try{
		status = data.getElementsByTagName("status")[0].childNodes[0].nodeValue;
		message = data.getElementsByTagName("message")[0].childNodes[0].nodeValue;
	} catch( e ){
		status = -1;
		message = e;
	}
	
	if( status != 0 ){
		alert("Feil ved oppdatering1("+status+"): "+message);
	} else {
		for( c in status_changes ){
			var o = document.getElementById("status_"+c);
			o.parentNode.style.backgroundColor = "";
			//o.style.outline = "black solid 0px";
			o.onchange='set_user_status_changed("'+c+'","'+status_changes[c]+'",this)';
			document.getElementById("status_save_button").disabled = "disabled";
		}
		status_changes = new Array();
		status_changes_length = 0;
	}
}
function set_user_status( booking_id, thisref ){
	jQuery.get("index.php?page=admin_callback&call=set_booking_status&bid="+booking_id+"&status="+thisref.value,null,set_user_status_cb);
}
function set_user_status_cb(data,status){
	var status = null;
	var message = null;
	try{
		status = data.getElementsByTagName("status")[0].childNodes[0].nodeValue;
		message = data.getElementsByTagName("message")[0].childNodes[0].nodeValue;
	} catch( e ){
		status = -1;
		message = e;
	}
	
	if( status != 0 ){
		alert("Feil ved oppdatering2("+status+"): "+message);
	}
}

function print_window(){
	window.open(location.href+(location.href.indexOf("?")==-1?"?":"&")+"print=1","print_timetable","height=650,width=1000,top=100,left=100,location=0,menubar=0,resizable=0,scrollbars=0,titlebar=0,directories=0,");
	return false;
}

