
//_____[ STUDY ROOMS RESERVATIONS ]_____\\

var srr = 
{
	form: '',
	zones: [],
	reserved: [],
	reserving: [],
	checked: [],
	cancelbutton: null,
	reservebutton: null,
	cancel: null,
	active: '',
	limit: 4, // 2 / .5 (hours / half hour blocks)
	
	disableDefaultBehaviors: function(z)
	{
		//z.input = z.getElementsByTagName('input')[0];
		z.input.onclick = function() { return false; };
		//z.label = z.getElementsByTagName('label')[0];
		z.label.onclick = function() { return false; };
		// prevent text selection: IE's onselectstart
		z.onselectstart = function() { return false; };
	},
	
	setPage: function()
	{
		var setpoint = document.getElementById('reservation_grid');
		if(setpoint && !isIE())
		{
			setpoint.scrollTop = 0;
			setpoint.scrollTop = 160;
		}
	},
	
	activateZones: function()
	{
		for(var i = 0; i < srr.zones.length; i++)
		{
			var zone = srr.zones[i];
			zone.input = zone.getElementsByTagName('input')[0];
			zone.label = zone.getElementsByTagName('label')[0];
			zone.selected = false;
			if(zone.input && zone.label)
			{
				srr.disableDefaultBehaviors(zone);
				zone.onmousedown = function()
				{
					srr.active = true;
					srr.resetCancel();
					srr.checkReservation(this);
					return false; // prevent text selection
				};
				zone.onmousemove = function()
				{
					if(!this.selected && typeof srr != 'undefined' && !document.getElementById('ghost'))
					{
						srr.checkReservation(this);
					}
				};
				zone.onmouseup = function()
				{
					srr.active = false;
				};
			}
		}
	},
	
	checkReservation: function(z)
	{
		if(srr.active)
		{
			if(srr.reserving.length >= srr.limit && z.className.indexOf('open') != -1) // if full, cancel
			{
				srr.resetChecked();
				srr.resetCancel();
				srr.resetReserving();
			}
			if(z.className.indexOf('reserved') != -1) // if reserved, undo
			{
				z.className = z.className.replace('reserved','open');
				z.className = z.className.replace('user','');
				z.key = '';
				z.input.checked = false;
				z.selected = false;
			}
			else if(z.className.indexOf('reserving') != -1) // if reserving, undo
			{
				z.className = z.className.replace('reserving','open');
				srr.reserving.splice(z.key,1);
				z.key = '';
				z.input.checked = false;
				z.selected = false;
			}
			else // reserving
			{
				z.className = z.className.replace('open','reserving');
				srr.reserving.push(z);
				z.key = srr.reserving.length - 1;
				z.input.checked = true;
				srr.checked.push(z.input);
				z.selected = true;
			}
		}
	},
	
	activateCancel: function()
	{
		srr.cancelbutton.className = 'interactive';
		srr.cancelbutton.disabled = true;
		for(var j = 0; j < srr.reserved.length; j++)
		{
			var reservation = srr.reserved[j];
			reservation.input = reservation.getElementsByTagName('input')[0];
			if(reservation.input && reservation.input.name == 'reservation_id')
			{
				reservation.input.onchange = function()
				{
					if(this.checked)
					{
						if(srr.cancel) { srr.cancel.className = 'interactive'; }
						srr.cancel = this;
						this.className = '';
						srr.cancelbutton.disabled = false;
						srr.cancelbutton.className = '';
						srr.reservebutton.disabled = true;
					}
				};
				reservation.onmouseover = function()
				{
					this.input.className = '';
				};
				reservation.onmouseout = function()
				{
					this.input.className = (this.input.checked) ? '' : 'interactive';
					srr.cancelbutton.className = (this.input.checked) ? '' : 'interactive';
				};
			}
		}
	},
	
	resetChecked: function()
	{
		if(srr.checked.length > 0)
		{
			for(var i = 0; i < srr.checked.length; i++)
			{
				srr.checked[i].checked = false;
				srr.checked[i].className = 'interactive';
			}
		}
	},
	
	resetCancel: function()
	{
		if(srr.reserved && srr.cancelbutton)
		{
			for(var j = 0; j < srr.reserved.length; j++)
			{
				srr.reserved[j].input = srr.reserved[j].getElementsByTagName('input')[0];
				if(srr.reserved[j].input && srr.reserved[j].input.name == 'reservation_id')
				{
					srr.reserved[j].input.className = 'interactive';
				}
			}
			if(srr.cancel) { srr.cancel.checked = false; }
			srr.cancelbutton.disabled = true;
			srr.cancelbutton.className = 'interactive';
			srr.reservebutton.disabled = false;
		}
	},
	
	resetAllInputs: function()
	{
		var inputs = srr.form.getElementsByTagName('input');
		for(var i = 0; i < inputs.length; i++)
		{
			inputs[i].checked = (inputs[i].parentNode.className.indexOf('reserved') != -1) ? true : false;
			inputs[i].className = (inputs[i].getAttribute('type') != 'submit') ? 'interactive' : '';
		}
	},
	
	resetReserving: function()
	{
		if(srr.reserving)
		{
			for(var j = 0; j < srr.reserving.length; j++)
			{
				srr.reserving[j].className = srr.reserving[j].className.replace('reserving','open');
				srr.reserving[j].selected = false;
				srr.reserving[j].key = '';
			}
			srr.reserving = [];
		}
	},
	
	checkLogin: function()
	{
		if(!document.getElementById('username') || !document.getElementById('password')) return false;
		var u = document.getElementById('username');
		var p = document.getElementById('password');
		if(u.value != '')
		{
			p.focus();
		}
		else
		{
			u.focus();
		}
	},
	
	checkSms: function()
	{
		if(!document.getElementById('sms')) return false;
		var sms = document.getElementById('sms');
		var txt = document.getElementById('txt');
		var eml = document.getElementById('eml');
		var cell_number = document.getElementById('cell_number');
		var provider = document.getElementById('provider');
		txt.onclick = function()
		{
			if(txt.checked)
			{
				sms.className = 'show';
				cell_number.className = 'required';
				provider.className = 'required';
			}
			else
			{
				sms.className = 'hide';
				cell_number.className = '';
				provider.className = '';
			}
		};
		eml.onclick = function()
		{
			if(eml.checked)
			{
				sms.className = 'hide';
				cell_number.className = '';
				provider.className = '';
			}
			else
			{
				sms.className = 'show';
			}
		};
	},
	
	checkForm: function()
	{
		if(!document.getElementById('study_room_reservations') || !document.getElementsByClassName('zone')) return false;
		srr.form = document.getElementById('study_room_reservations');
		srr.zones = document.getElementsByClassName('zone');
		srr.reserved = document.getElementsByClassName('user');
		srr.cancelbutton = document.getElementById('cancel');
		srr.reservebutton = document.getElementById('reserve');
		srr.resetAllInputs();
		srr.resetReserving();
		srr.activateZones();
		//srr.setPage();
		if(srr.reserved && srr.cancelbutton)
		{
			srr.activateCancel();
		}
		srri.init();
	},
	
	checkRecentChanges: function()
	{
		var recent = document.getElementById('recent');
		if(recent)
		{
			fadeOut(recent,255,187,102,255,255,255);
		}
	},

	init: function()
	{
		srr.checkRecentChanges();
		srr.checkForm();
		srr.checkLogin();
		srr.checkSms();
	}
}
addLoadEvent(srr.init);

//_____[ ROOM INFO ]_____\\

var srri = 
{
	info: false,
	marker: false,
	removal: false,
	current_id: false,
	rooms: [],
	
	assignElements: function()
	{
		srri.rooms = document.getElementsByClassName('room_link');
	},

	applyListeners: function()
	{
		if(srri.rooms)
		{
			for(var i = 0; i < srri.rooms.length; i++)
			{
				srri.rooms[i].onmouseover = srri.showDetails;
				srri.rooms[i].onmouseout = srri.pendingRemoval;
				//srri.rooms[i].onmousemove = srri.getMouse;
			}
		}
	},
	
	getMouse: function(e)
	{
		var x = 0;
		var y = 0;
		if(!e) { e = window.event; }
		if(e.pageX || e.pageY)
		{
			x = e.pageX;
			y = e.pageY;
		}
		else if(e.clientX || e.clientY)
		{
			x = e.clientX + document.documentElement.scrollLeft;
			y = e.clientY + document.documentElement.scrollTop;
		}
		x = x - (parseInt(getStyle(srri.info,'width'))/1.8);
		//y = y - (y * .32);
		y = y + 10;
		srri.moveInfo(x,y);
	},

	moveInfo: function(x,y)
	{
		if(srri.info)
		{
			srri.info.style.left = x + 'px';
			srri.info.style.top = y + 'px';
		}
	},
	
	clearRemoval: function()
	{
		clearTimeout(srri.removal);
	},
	
	pendingRemoval: function()
	{
		srri.removal = setTimeout("srri.removeDetails()",1000);
	},
	
	showDetails: function(e)
	{
		var this_id = this.getAttribute('id');
		if(this_id != srri.current_id)
		{
			srri.removeDetails();
			srri.clearRemoval();
			
			srri.marker = this;
			srri.info = document.getElementById(this_id + '_info');
			if(srri.info)
			{
				srri.current_id = this_id;
				srri.info.setAttribute('id','active_room_info');
				document.body.appendChild(srri.info);
				srri.getMouse(e);
				fadeIn(srri.info);
				srri.info.onmouseover = srri.clearRemoval;
				srri.info.onmouseout = srri.pendingRemoval;
			}
		}
		else
		{
			srri.clearRemoval();
			srri.pendingRemoval();
		}
	},
	
	removeDetails: function()
	{
		if(srri.info)
		{
			srri.info.removeAttribute('id');
			srri.info.setAttribute('id',srri.marker.getAttribute('id') + '_info');
			srri.marker.parentNode.parentNode.appendChild(srri.info);
			srri.current_id = false;
		}
	},
	
	init: function()
	{
		srri.assignElements();
		srri.applyListeners();
	}
}
// see srr.checkForm
//addLoadEvent(srri.init);

//_____[ EFFECTS ]_____\\

function setBackground(e,r,g,b)
{
	e.style.backgroundColor = 'rgb(' + r + ',' + g + ',' + b + ')';
}

function fadeOut(e,r,g,b,re,ge,be)
{
	setBackground(e,r,g,b);
	for(var i = 0; i <= 255; i += 5)
	{
		(
			function()
			{
				var x = i;
				setTimeout
				(
					function()
					{
						r = (r >= re) ? re : (r + 5 >= re) ? re : r + 5;
						g = (g >= ge) ? ge : (g + 5 >= ge) ? ge : g + 5;
						b = (b >= be) ? be : (b + 5 >= be) ? be : b + 5;
						setBackground(e,r,g,b);
					},
					(x + 1) * 10
				);
			}
		)();
	}
}

function setOpacity(e,i)
{
	if(e.filters) { e.style.filters = 'alpha(opacity=' + i + ')'; }
	else { e.style.opacity = i/100; }
}

function fadeIn(e)
{
	setOpacity(e,0);
	e.style.visibility = 'visible';
	for(var i = 0; i <= 100; i += 5)
	{
		(
			function()
			{
				var pos = i;
				setTimeout
				(
					function()
					{
						if(typeof setOpacity != 'undefined')
						{
							setOpacity(e,pos);
						}
					},
					(pos + 1) * 5
				);
			}
		)();
	}
}

//_____[ getStyle ]_____\\

function getStyle(element,property)
{
    var value = '';
    if(document.defaultView && document.defaultView.getComputedStyle)
	{
        var css = document.defaultView.getComputedStyle(element,null);
        value = css ? css.getPropertyValue(property) : null;
    }
    else if(element.currentStyle)
	{
        property = property.replace(/\-(\w)/g,function(matches,p1){return p1.toUpperCase();});
        value = element.currentStyle[property];
    }
    return value;
}

//_____[ getElementsByClassName ]_____\\

document.getElementsByClassName = function(name)
{
	var results = new Array();
	var a = document.getElementsByTagName("*");
	for(var i=0; i<a.length; i++)
	{
		if(a[i].className.indexOf(name) != -1)
		{
			results[results.length] = a[i];
		}
	}
	return results;
};


//_____[ IE detection ]_____\\

function isIE()
{
	var b = navigator.userAgent.toLowerCase();
	return (b.indexOf('msie') != -1) ? true : false;
}
