/*  Events Calendar
 *  February 2007, by Assaf Rafaeli
 */

/***************************************************************************
	Intialization
****************************************************************************/

var EventCache = {
	listEvents: [],
	add: function(node, sEventName, fHandler) {
		EventCache.listEvents.push(arguments);
	},
	flush: function() {
		var i, item, listEvents = EventCache.listEvents;
		for (i = listEvents.length - 1; item = listEvents[i]; i--) {
			if(item[0].removeEventListener)
				item[0].removeEventListener(item[1], item[2], item[3]);
			if(item[1].substring(0, 2) != "on")
				item[1] = "on" + item[1];
			if(item[0].detachEvent)
				item[0].detachEvent(item[1], item[2]);
			item[0][item[1]] = null;
		};
	}
}

addEvent(window, "load", init);
addEvent(window, "unload", function(){fade.end()});
addEvent(window, "unload", EventCache.flush);

function init() {
	fade.init();
	filter.init();
	eventItem.init();
	resizer.init();
	sendForm.init();

	var a = $("main-panel").getElementsByTagName("a");
	if (window.ActiveXObject) {
		for (var i = 0, item, title; item = a[i]; i++) {
			if (/^#link-/.test(item.hash))
				addEvent(item, 'click', function() {show(this.hash.substring(6))})
		}
	}
	else {
		sweetTitles.init();
		if (resizer.isFirefox)
			init_gecko_select_hack();

		for (var i = 0, item, title; item = a[i]; i++) {
			if (/^#link-/.test(item.hash))
				addEvent(item, 'click', function(){show(this.hash.substring(6))})
			if (item.getAttribute('title')) {
				addEvent(item, 'mouseover', sweetTitles.tipOver);
				addEvent(item, 'mouseout', sweetTitles.tipOut);
				addEvent(item, 'click', sweetTitles.tipOut);
				item.setAttribute('tip', item.getAttribute('title'));
				item.removeAttribute('title');
			}
		}
		isChanged();
	}
	fade.isChanged();
}

var changedTimer = 0;
function isChanged() {
	fade.isChanged();
	clearTimeout(changedTimer);
	changedTimer = setTimeout(isChanged, 500);
}

/***************************************************************************
	Utility Functions
****************************************************************************/

function $(id) {
	return document.getElementById(id);
}

function addEvent(obj, type, fn) {
	if (obj.addEventListener) {
		obj.addEventListener(type, fn, false);
		EventCache.add(obj, type, fn);
	}
	else if (obj.attachEvent) {
		var typefn = type + fn;
		obj["e"+typefn] = fn;
		obj[typefn] = function() { obj["e"+typefn](window.event); }
		obj.attachEvent("on"+type, obj[typefn]);
		EventCache.add(obj, type, fn);
	}
	else
		obj["on"+type] = obj["e"+type+fn];
}
var XHR = function(url, params, loader, innerHTML, func) {
	var req = null;
	try { req = new ActiveXObject("Msxml2.XMLHTTP"); }
	catch (e) { try { req = new ActiveXObject("Microsoft.XMLHTTP"); }
	catch (e) { try { req = new XMLHttpRequest(); }
	catch (e) { req = false; }}}
	if (!req)
		return null;

	var comp = function(loader, innerHTML) {
		if (loader.disabled)
			loader.disabled = false;
		if (req.readyState == 4) {
			if (req.status == 200) {
				if (/Error/.test(req.responseText)) {
					alert(req.responseText);
					loader.innerHTML = "<img src='images/no.gif' /> <b>נסה שוב</b>";
					return false;
				}
				loader.innerHTML = innerHTML;
				func();
			}
			else {
				alert("unable to connect (Error " + req.status + ")");
				loader.innerHTML = "<img src='images/no.gif' /> <b>נסה שוב</b>";
				return false;
			}
		}
	};
	req.onreadystatechange = function(){comp(loader, innerHTML)}
	req.open("POST", url, true);
	req.setRequestHeader("Method", "POST " + url + " HTTP/1.1");
	req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
	req.send(params);
}
var fade = {
	isActive: 0,
	last: null,
	_new: null,
	timers: null,
	init: function() {
		fade.isActive = 0;
		fade._new = $("upcoming");
	},
	show: function(el) {
		if ((!fade.isActive) && (el) && (el != fade._new)) {
			fade.isActive = 1;
			fade.last = fade._new;
			fade._new = el;
			fade.timers = [];
			if (fade._new.style.filter == undefined) {
				for (var i = 0, ms; i <= 10; i++) {
					fade.timers[i] = setTimeout('fade.last.style.opacity = "' + (10 - i)/10 + '"', ms = i * 40);
					fade.timers[i] = setTimeout('fade._new.style.opacity = "' + i/10 + '"', ms + 440);
				}
			}
			else {
				for (var i = 0, ms; i <= 10; i++) {
					setTimeout('fade.last.style.filter = "alpha(opacity=' + (10 - i) * 10 + ')"', ms = i * 40);
					setTimeout('fade._new.style.filter = "alpha(opacity=' + i * 10 + ')"', ms + 440);
				}
			}
			fade.timers[++i] = setTimeout(function() {
				fade.last.style.display = "none";
				fade._new.style.display = "block";
			}, 440);
			fade.timers[i] = setTimeout(function() {
				fade.end();
				fade.isActive = 0;
				fade.isChanged();
			}, 890);
		}
	},
	isChanged: function() {
		var name = location.hash.substring(6);
		if (fade._new.id != name) {
			if (name == "")
				show('upcoming');
			else
				show(name);
		}
	},
	end: function() {
		if (fade.isActive) {
			for (var i = 0, len = fade.timers.length; i < len; i++)
				clearTimeout(fade.timers[i])
		}
	}
}

/* Sweet Titles (c) Creative Commons 2006
 * http://creativecommons.org/licenses/by-sa/2.5/
 * Author: Dustin Diaz | http://www.dustindiaz.com

 * <16.1.07>
 * Modified by Assaf Rafaeli,
 * now a little more efficent and clean
 */
var sweetTitles = {
	xCord: 0,				// @Number: x pixel value of current cursor position
	yCord: 0,				// @Number: y pixel value of current cursor position
	obj: null,				// @Element: That of which you're hovering over
	tip: null,				// @Element: The toolTip itself
	active: 0,				// @Number: 0: Not Active || 1: Active
	init: function() {
		sweetTitles.tip = document.createElement('div');
		sweetTitles.tip.id = 'toolTip';
		document.getElementsByTagName('body')[0].appendChild(sweetTitles.tip);
	},
	setXY: function(e) {
		if (document.captureEvents) {
			sweetTitles.xCord = e.pageX;
			sweetTitles.yCord = e.pageY;
		}
		else if (window.event.clientX) {
			sweetTitles.xCord = window.event.clientX + document.documentElement.scrollLeft;
			sweetTitles.yCord = window.event.clientY + document.documentElement.scrollTop;
		}
	},
	tipOut: function() {
		if (window.tID)
			clearTimeout(tID);
		if (window.opacityID)
			clearTimeout(opacityID);
		sweetTitles.tip.style.visibility = 'hidden';
		sweetTitles.tip.style.top = '0';
		sweetTitles.tip.style.left = '0';
	},
	tipOver: function(e) {
		sweetTitles.obj = this;
		tID = window.setTimeout("sweetTitles.tipShow()", 500);
		sweetTitles.setXY(e);
	},
	tipShow: function() {
		var tp = parseInt(Number(sweetTitles.xCord) + 15);
		var lt = parseInt(Number(sweetTitles.yCord) + 10);
		sweetTitles.tip.innerHTML = "<p>"+sweetTitles.obj.getAttribute('tip')+"</p>";

		if (document.documentElement.clientWidth + document.documentElement.scrollLeft < sweetTitles.tip.offsetWidth + tp)
			sweetTitles.tip.style.left = tp - sweetTitles.tip.offsetWidth + 10 + 'px';
		else
			sweetTitles.tip.style.left = tp+'px';

		if (document.documentElement.clientHeight + document.documentElement.scrollTop < sweetTitles.tip.offsetHeight + lt)
			sweetTitles.tip.style.top = lt - sweetTitles.tip.offsetHeight + 10 + 'px';
		else
			sweetTitles.tip.style.top = lt+'px';

		sweetTitles.tip.style.visibility = 'visible';
		sweetTitles.tip.style.opacity = '.1';
		sweetTitles.tipFade(10);
	},
	tipFade: function(opac) {
		opac += 10;
		if ( opac < 100 ) {
			sweetTitles.tip.style.opacity = '.'+opac;
			sweetTitles.tip.style.filter = "alpha(opacity:"+opac+")";
			window.opacityID = window.setTimeout("sweetTitles.tipFade("+opac+")", 20);
		}
		else { 
			sweetTitles.tip.style.opacity = '1';
			sweetTitles.tip.style.filter = "alpha(opacity:100)";
		}
	}
};
function hebMonth(x) {
	if (x == 1)
		return 'ינואר'
	else if (x == 2)
		return 'פברואר'
	else if (x == 3)
		return 'מרץ'
	else if (x == 4)
		return 'אפריל'
	else if (x == 5)
		return 'מאי'
	else if (x == 6)
		return 'יוני'
	else if (x == 7)
		return 'יולי'
	else if (x == 8)
		return 'אוגוסט'
	else if (x == 9)
		return 'ספטמבר'
	else if (x == 10)
		return 'אוקטובר'
	else if (x == 11)
		return 'נובמבר'
	else if (x == 12)
		return 'דצמבר'
	else
		return null;
}

/***************************************************************************
	Core Functions
****************************************************************************/

function show(name) {
	var item = $(name);
	if (item)
		fade.show(item)
	else
		fade.show(eventItem.add(name.substring(5)))
}
var eventItem = {
	main: null,
	init: function() {
		eventItem.main = $("blue-box").getElementsByTagName("div")[0]
	},
	add: function(id) {
		for (var i = 2, item; item = filter.elements[i]; i++) {
			item = item.getElementsByTagName("td");
			if (item[0].getElementsByTagName("input")[1].value == id) {
				var dateTD = item[1].innerHTML;
				dateTD = dateTD.split(" - ");
				var date1split = dateTD[0].split(".");
				var date2split;
				if (dateTD.length > 1) {
					date2split = dateTD[1].split(".");
					var endDate = '<div class="end-date">' +
								'<div class="day">' + date2split[0] + '</div>' +
								'<div class="month">' + hebMonth(date2split[1]) + '</div>' +
							'</div>';
				}
				var link = item[3].getElementsByTagName("a")[0];
				var main = item[4].getElementsByTagName("span");
				if (item[0].getElementsByTagName("input")[2])
					var next = "&nbsp;&nbsp;&nbsp;או&nbsp;&nbsp;&nbsp;<a href='#link-item-" + item[0].getElementsByTagName('input')[2].value + "'><b>עוד אירוע</b></a>";
				var div = document.createElement('div');
				div.className = "full-item items";
				div.id = "item-" + id;
				div.innerHTML = '<div class="item">' +
							'<div class="date-' + (date2split ? "double" : "singal") + '">' +
								'<div class="start-date">' +
									'<div class="day">' + date1split[0] + '</div>' +
									'<div class="month">' + hebMonth(date1split[1]) + '</div>' +
								'</div>' +
								(endDate || "") +
							'</div>' +
							'<div class="content">' +
								'<h3><a href="' + link.href + '">' + link.innerHTML + '</a></h3>' +
								'<h4>' + main[1].innerHTML + '</h4>' +
								'<p class="text">' +
									main[0].innerHTML +
								'</p>' +
								'<p class="info">'+
									'מחיר: ' +
									main[2].innerHTML +
									' //&nbsp;&nbsp;(<a href="' + link.href + '">לאתר האירוע</a>)' +
								'</p>' +
							'</div>' +
						'</div>' +
						'<div class="nav"><a href="#link-upcoming"><b>חזרה לראשי</b></a>' + (next || "") + '</div>';
						addEvent(div.getElementsByTagName("a")[2], 'click', function() { show(this.hash.substring(6)) });
						if (next)
							addEvent(div.getElementsByTagName("a")[3], 'click', function() { show(this.hash.substring(6)) });
				return eventItem.main.appendChild(div);
			}
		}
		return false;
	}
}
var filter = {
	elements: null,
	category: null,
	area: null,
	listNotFound: null,
	main: null,
	height: null,
	init: function() {
		filter.main = $("table-panel");
		filter.height = filter.main.offsetHeight - 54;
		filter.elements = filter.main.getElementsByTagName("tr");
		filter.category = $("list-filter-category");
		filter.area = $("list-filter-area");
		filter.listNotFound = $("list-not-found");
		filter.listNotFound.style.display = "none";
		filter.listNotFound.innerHTML = "לא נמצאו אירועים";

		filter.category.selectedIndex = 0;
		filter.area.selectedIndex = 0;
		filter.category.onchange = function() { filter.run() };
		filter.area.onchange = function() { filter.run() };
	},
	run: function() {
		var selected = {
			category: filter.category.options[filter.category.selectedIndex].value,
			area: filter.area.options[filter.area.selectedIndex].value
		};
		for (var i = 2, item, hidden = 0, n = 0; item = filter.elements[i]; i++) {
			if (((selected.category != 0) && (item.getElementsByTagName("td")[2].innerHTML != selected.category)) || ((selected.area != 0) && (item.getElementsByTagName("td")[0].getElementsByTagName("input")[0].value != selected.area))) {
				item.style.display = "none";
				hidden++
			}
			else {
				item.style.display = "";
				if (n%2)
					item.className = "even";
				else
					item.className = "";
				n++
			}
		}
		if ((filter.elements.length - 2) == hidden)
			filter.listNotFound.style.display = "";
		else if (filter.listNotFound.style.display == "")
			filter.listNotFound.style.display = "none";
		filter.main.style.height = filter.height + "px";
	}
}
var resizer = {
	divs: null,
	isFirefox: null,
	init: function() {
		resizer.divs = $("table-panel").getElementsByTagName("table")[0].getElementsByTagName("div");
		try { resizer.isFirefox = InstallTrigger } // This global var is checked in other parts of the code as well
		catch(e) { resizer.isFirefox = 0; }
		if (resizer.isFirefox)
			var addClassName = function(div){div.className = "moz-resize"}
		else
			var addClassName = function(div){div.className = "resize"}

		for (var i = 0, item; item = resizer.divs[i]; i++) {
			if (item.scrollHeight > item.offsetHeight) {
				var resizeDiv = document.createElement("div");
				var resizeLink = document.createElement("a");
				resizeLink.href = "#resize";
				resizeLink.innerHTML = " ... &raquo;";
				resizeDiv.appendChild(resizeLink);
				addClassName(resizeDiv);
				addEvent(resizeLink, 'click', resizer.more);

				var resizeBackDiv = document.createElement("div");
				var resizeBackLink = document.createElement("a");
				resizeBackLink.href = "#resize-back";
				resizeBackLink.innerHTML = "&laquo; <span>הקטן</span>";
				resizeBackDiv.appendChild(resizeBackLink);
				resizeBackDiv.className = "resizeBack";
				addEvent(resizeBackLink, 'click', resizer.less);

				item.insertBefore(resizeDiv, item.getElementsByTagName("span")[0]);
				item.appendChild(resizeBackDiv);
			}
		}
	},
	more: function() {
		this.parentNode.style.display = "none";
		this.parentNode.parentNode.getElementsByTagName("div")[1].style.display = "inline";
		this.parentNode.parentNode.style.maxHeight = "none";
		this.parentNode.parentNode.style.height = "auto";
		filter.height += this.parentNode.parentNode.offsetHeight - 55;
		filter.main.style.height = filter.height + "px";
	},
	less: function() {
		filter.height -= this.parentNode.parentNode.offsetHeight - 55;
		filter.main.style.height = filter.height + "px";
		this.parentNode.style.display = "none";
		this.parentNode.parentNode.getElementsByTagName("div")[0].style.display = "block";
		this.parentNode.parentNode.style.height = "55px";
		this.parentNode.parentNode.style.maxHeight = "55px";
	}
}
var sendForm = {
	init: function() {
		sendForm.input = [$('add-new-step-one').getElementsByTagName("input"),
					[$('add-new-step-two').getElementsByTagName("input")[0],
					 $('add-new-step-two').getElementsByTagName("textarea")[0]]
				  ];
		sendForm.func = [
					[{
						event: 'onblur',
						re: /.{1}/,
						run: function(input, valid) {}
					},
					{
						event: 'onblur',
						re: /^(0[1-9]|1[0-9]|2[0-9]|3[0-1])\.(0[1-9]|1[0-2])\.([0-9][0-9][0-9][0-9])$/,
						run: function(input, valid) {}
					},
					{
						event: 'onblur',
						re: /^((0[1-9]|1[0-9]|2[0-9]|3[0-1])\.(0[1-9]|1[0-2])\.([0-9][0-9][0-9][0-9])|())$/,
						run: function(input, valid) {}
					},
					{
						event: 'onblur',
						re: /.{1}/,
						run: function(input, valid) {}
					},
					{
						event: 'onblur',
						re: /^((http:\/\/)|(http:\/\/)(([^א-ת])*\.([^א-ת])*){1,3})$/,
						run: function(input, valid) {}
					}],
					[{
						event: 'onblur',
						re: /.{1}/,
						run: function(input, valid) {}
					},
					{
						event: 'onkeyup',
						re: /^[0-9,א-ת,a-z,A-Z].{0,439}$/,
						run: function(input, valid) {
							var span = input.parentNode.getElementsByTagName("span")[0];
							span.style.color = (valid ? "" : "#FF0F1E")
							span.innerHTML = input.value.length;
						}
					}]
			       ];
		for (var i = 0, item, func; item = sendForm.input[i]; i++) {
			for (var j = 0, input; input = item[j]; j++) {
				func = sendForm.func[i][j];
				input[func['event']] = function(event) {
					try {input.func = func}
					catch(e) {
						if (event && event.keyCode == 9)
							return "";
						if (this.func['re'].test(this.value)) {
							this.func['run'](this, true);
							return this.className = "";
						}
						else {
							this.func['run'](this, false);
							this.onkeyup = this[this.func['event']];
							return this.className = "invalid";
						}
					}
				}
				input[func['event']]();
			}
		}
		var form = document.getElementsByTagName("form")[0];
		addEvent(form, 'submit', function(event) {
			if (event.preventDefault)
				event.preventDefault();
			else
				this.returnValue = false;
		});
		addEvent(form.getElementsByTagName("button")[0], 'click', function() {
			if (sendForm.check())
				sendForm.send(form);
		});
	},
	check: function() {
		var isInStepTwo = 1, valid = true;
		for (var i = 0, item; item = sendForm.input[i]; i++) {
			for (var j = 0, len = item.length; j < len; j++) {
				if (item[j][sendForm.func[i][j]['event']]() == "invalid") {
					if (isInStepTwo)
						isInStepTwo = i;
					valid = false;
				}
			}
		}
		if (!isInStepTwo)
			location.hash = "#link-add-new-step-one";
		return valid;
	},
	send: function(form) {
		var select = form.getElementsByTagName("select")[0];
		var button = form.getElementsByTagName("button")[0];
		var params =
			("start-date=" + sendForm.input[0][1].value + "&" +
			(sendForm.input[0][2] != "" && (sendForm.input[0][2].value != sendForm.input[0][1].value) ?
				"end-date=" + sendForm.input[0][2].value + "&" :
				"") +
			"name=" + escape(sendForm.input[0][0].value) + "&" +
			"location=" + escape(sendForm.input[1][0].value) + "&" +
			"desc=" + escape(sendForm.input[1][1].value.replace(/(\n|\r|\r\n|\n\r)/g, " ")) + "&" +
			"price=" + escape(sendForm.input[0][3].value) + "&" +
			"url=" + sendForm.input[0][4].value + "&" +
			"category=" + escape(select.options[select.selectedIndex].value));
		button.innerHTML = "<img src='images/ajax-loader.gif' /> &nbsp; <b>שולח</b>";
		button.disabled = true;
		XHR("addnew.asp", params, button, "<img src='images/yes.gif' /> <b>נשלח</b>", function() {
			var back = form.getElementsByTagName("a")[2];
			var next = form.getElementsByTagName("a")[1];
			addEvent(next, "click", function() {
				back.innerHTML = "<b>ביטול</b>";
				back.href = "#link-add-new-step-one";
			});
			back.innerHTML = "<b>חזרה לראשי</b>";
			back.href = "#link-upcoming";
		});
	}
}

/***************************************************************************
	 Mozilla Hacks
****************************************************************************/

function ev_gecko_select_keyup(event) {
	// prevent tab, alt, ctrl keys from fireing the event
	if (event.keyCode && (event.keyCode == 1 || event.keyCode == 9 || event.keyCode == 16 || event.altKey || event.ctrlKey))
		return true;
	event.target.onchange();
	return true;
}
function ev_gecko_select_mousewheel(event) {
	var delta = event.detail/3;
	var selectedIndexDelta = this.selectedIndex + delta;
	if ((selectedIndexDelta >= 0) && (selectedIndexDelta < this.length)) {
		this.selectedIndex = selectedIndexDelta;

		if (event.target.onchange)
			event.target.onchange();
		event.preventDefault();
		event.returnValue = false;
	}
}
function init_gecko_select_hack() {
	var selects = document.getElementsByTagName("SELECT");
	for (var i = 0; i < selects.length; i++) {
		if (selects.item(i).getAttribute("size") == 1) {
			selects.item(i).addEventListener("keyup", ev_gecko_select_keyup, false);
			selects.item(i).addEventListener("DOMMouseScroll", ev_gecko_select_mousewheel, false);

		}
	}
	return true;
}