// (c) 2001 - 2010 Netsilik
// Internet : http://www.netsilik.nl
// E-mail   : info (at) netsilik x nl

// *** some usefull functions *** //
function getElemnt(elemntId) {
	return document.getElementById(elemntId);
}
function setFocus(elemntId) {
	getElemnt(elemntId).focus();
}
function attachEventHandler(elemnt, type, handler, useWrapper) {
	elemnt = (typeof(elemnt) == 'string') ? elemnt = getElemnt(elemnt) : elemnt;
	
	var wrapper = handler;
	if (useWrapper) {
		wrapper = function (event) {
			handler.call(elemnt, event);
		};
	}
	
	if (document.addEventListener) {
		if (type == 'mousescroll') {
			type = 'mousewheel';
			elemnt.addEventListener('DOMMouseScroll', wrapper, false); // firefox
		}
		elemnt.addEventListener(type, wrapper, false);
		return true;
	} else if (document.attachEvent) {
		if (type == 'mousescroll') { type = 'mousewheel'; }
		return elemnt.attachEvent('on' + type, wrapper);
	}
	return false;
}

function stopEvent(event) {
	if (event.stopPropagation) { event.stopPropagation(); }
	if (event.preventDefault) { event.preventDefault(); }
	event.cancelBubble = true;
	event.returnValue = false;
	return false;
}

/* Queued actions */
var preLoad = {
	timerId: null,
	queue: [],
	documentLoaded: false,
	
	onAvailable: function (elemntId, func, args) {
		preLoad.queue.push( {elemntId: elemntId, func: func, args: args} );
		if ( ! preLoad.timerId) {
			attachEventHandler(window, 'load', function () {	preLoad.documentLoaded = true; });
			preLoad.timerId = setInterval('preLoad.checkAvailable();', 50);
		}
	},
	
	checkAvailable: function () {
		var stopChecking = preLoad.documentLoaded;
		var delayed, elemnt, n;
		
		for (n = preLoad.queue.length -1; n >= 0 ; n--) {
			delayed = preLoad.queue[n];
			elemnt = getElemnt(delayed.elemntId);
			
			if (elemnt !== null) {
				delayed.func.apply(elemnt, delayed.args);
				preLoad.queue.splice(n, 1);
			}
		}
		if ( stopChecking || preLoad.queue.length === 0) {
			clearInterval(preLoad.timerId);
		}
	}
};

var css = {
	replaceClass: function (elemntId, fromClassName, toClassName) {
		if (fromClassName === '') {
			if (getElemnt(elemntId).className === '') {
				getElemnt(elemntId).className = toClassName;
			} else if ( ! css.hasClass(elemntId, toClassName) ) {
				getElemnt(elemntId).className += ' ' + toClassName;
			}
		} else {
			getElemnt(elemntId).className = getElemnt(elemntId).className.replace(new RegExp('\\b'+fromClassName+'\\b'), toClassName);
		}
	},
	
	hasClass: function (elemntId, className) {
		return getElemnt(elemntId).className.match(new RegExp('\\b'+className+'\\b'));
	}
};

function imposeMaxLength(elmentId, maxContentLength) {
	var elemnt = getElemnt(elmentId);
	var handler = function () {
			if (elemnt.value.length >= maxContentLength) {
				var scrollTop = elemnt.scrollTop;
				elemnt.value = elemnt.value.substring(0, maxContentLength);
				elemnt.scrollTop = scrollTop;
				return false;
			}
			return true;
		};
	attachEventHandler(elmentId, 'keypress', handler);
	attachEventHandler(elmentId, 'blur', handler);
	attachEventHandler(elmentId, 'keyup', handler);
}

function inlinePost(event, action, args, target) {
	var f = document.createElement('FORM');
	f.method = 'post';
	f.action = action;
	f.target = target || '';
	for (var key in args) {
		var i = document.createElement('INPUT');
		i.type = 'hidden';
		i.name = key;
		i.value = args[key];
		f.appendChild(i);
	}
	document.body.appendChild(f);
	f.submit();
	return stopEvent(event);
}

// *** Dialog function *** //
var dialog = {
	t: null,
	f: null,
	a: null,
	alert: function (event, text, caption, func, args) {
		dialog.t = 'Alert';
		dialog.f = func;
		dialog.a = args || [];
		return dialog.s(event, text, caption);
	},
	confirm: function (event, text, caption, func, args) {
		dialog.t = 'Confirm';
		dialog.f = func;
		dialog.a = args || [];
		return dialog.s(event, text, caption);
	},
	prompt: function (event, text, value, caption, func, args) {
		dialog.t = 'Prompt';
		dialog.f = func;
		dialog.a = args || [];
		return dialog.s(event, text, caption, value);
	},
	s: function (event, text, caption, value) {
		var a, db, dbg, d, f, i;
		if (getElemnt('dialogBg')) {
			return false;
		}
		dbg = getElemnt('pageContainer').appendChild(document.createElement('DIV'));
		dbg.id = 'dialogBg';

		db = document.createElement('DIV');
		db.id = 'dialogBox';
		db.className = dialog.t;

		d = db.appendChild(document.createElement('DIV'));
		d.className = 'caption';
		d.innerHTML = caption || dialog.t;
		
		if (dialog.t == 'Prompt') {
			a = d.appendChild(document.createElement('a'));
			a.id = 'cancelLink';
			a.appendChild(document.createTextNode('\u00D7'));
			a.href = '#';
		}

		d = db.appendChild(document.createElement('DIV'));
		d.className = 'text';
		d.innerHTML = text || '';

		if (dialog.t == 'Prompt') {
			f = d.appendChild(document.createElement('FORM'));
			f.id = 'promptForm';
			f.action = '#';
			f.method = 'get';
			i = f.appendChild(document.createElement('INPUT'));
			i.type = 'text';
			i.name = 'promptField';
			i.id = 'promptField';
			i.value = value || '';
		}

		d = db.appendChild(document.createElement('DIV'));
		d.className = 'buttons';
		
		if (dialog.t == 'Confirm') {
			a = d.appendChild(document.createElement('a'));
			a.id = 'cancelLink';
			a.appendChild(document.createTextNode('[ Cancel ]'));
			a.href = '#';
			d.appendChild(document.createTextNode(' \u00A0 '));
		}
		
		a = d.appendChild(document.createElement('a'));
		a.id = 'okLink';
		a.appendChild(document.createTextNode('[ Ok ]'));
		a.href = '#';
		
		getElemnt('pageContainer').appendChild(db);

		attachEventHandler ('okLink', 'click', function (event){dialog.r(event, true);}, true);
		if (dialog.t == 'Alert') {
			setFocus('okLink');
			attachEventHandler(document, 'keyup', function (event){dialog.k(event, true);}, true);
		} else {
			attachEventHandler ('cancelLink', 'click', dialog.r, true);
			attachEventHandler(document, 'keyup', dialog.k, true);
			setFocus('cancelLink');
			if (dialog.t == 'Prompt') {
				attachEventHandler ('promptForm', 'submit', function (event){dialog.r(event, true);}, true);
				setFocus('promptField');
			}
		}
		if (document.body.scrollTop > 0) { document.body.scrollTop = 0; } //IE6-fix
		return stopEvent(event);
	},
	r: function (event, doCallback) {
		if ( ! getElemnt('dialogBg')) {
			return false;
		}
		if (doCallback && dialog.f) {
			if (dialog.t == 'Prompt') {
				dialog.a.push( getElemnt('promptField').value );
			}
			dialog.f.apply(this, dialog.a);
		}
		getElemnt('pageContainer').removeChild(getElemnt('dialogBox'));
		getElemnt('pageContainer').removeChild(getElemnt('dialogBg'));
		return stopEvent(event);
	},
	k: function(event, doCallback) {
		if (event.keyCode == 27) {
			return dialog.r(event);
		}
	}
};

// *** Menu function *** //
var menu = {
	frozen: false,
	
	e: function (elemntDivId, childListId, toggleMode) {
		var activeItemDivId;
		var expandedChildParentId = menu.getP(expandedChildListId);
		
		if (expandedChildListId != 'none' && expandedChildListId != childListId && expandedChildParentId != menu.getP(activeItemId)) {
			if ( ! menu.frozen ) {
				css.replaceClass(expandedChildListId, '', 'hidden');
			}
			if (expandedChildParentId == activeItemId) {
				menu.swap(expandedChildParentId+'Div', 'aP');
			} else {
				menu.swap(expandedChildParentId+'Div', 'pP');
			}
		}

		activeItemDivId = activeItemId+'Div';
		if ( ! toggleMode || getElemnt(childListId).className == 'hidden') {
			if ( ! menu.frozen ) {
				css.replaceClass(childListId, 'hidden', '');
				if (elemntDivId != activeItemDivId) {
					menu.swap(elemntDivId, 'pM_h');
				}
			} else if (elemntDivId != activeItemDivId) {
				menu.swap(elemntDivId, 'aP_h');
			}
			expandedChildListId = childListId;
		} else {
			if ( ! menu.frozen ) {
				css.replaceClass(childListId, '', 'hidden');
				if (elemntDivId != activeItemDivId) {
					menu.swap(elemntDivId, 'pP_h');
				} 
			} else if (elemntDivId != activeItemDivId) {
				menu.swap(elemntDivId, 'aP_h');
			}
			expandedChildListId = 'none';
		}
		
		if ( ! toggleMode) { // focused
			menu.h(elemntDivId, 1);
		}
	},
	
	f: function () {
		menu.frozen = true;
	},
	
	s: function (selectedDivId) {
		var activeItemDivId = activeItemId+'Div';
		var activeItemParentId = menu.getP(activeItemDivId);
		var selectedChildParentId = menu.getP(selectedDivId);
		
		if (activeItemId != 'none') {
			if (activeItemParentId == 'none') { // active Item == parent
				if (selectedChildParentId == activeItemId) {
					// active item is parent of selected child
					menu.swap(activeItemDivId, 'aM');
				} else {
					menu.swap(activeItemDivId, 'pP');
					menu.swap(selectedChildParentId+'Div', 'aM');
				}
			} else { // active Item == child
				if (activeItemParentId == selectedChildParentId) {
					// active item is child of same parent as selected child
					menu.swap(activeItemDivId, 'pC');
				} else {
					menu.swap(activeItemParentId+'Div', 'pP');
					menu.swap(activeItemDivId, 'pC');
					menu.swap(selectedChildParentId+'Div', 'aM');
				}
			}
		}
		menu.swap(selectedDivId, 'aC');
	},
	
	getP: function (childElementId) {
		var regex = /(c|p)(\d+)(c?)/;
		var capture = regex.exec(childElementId);
		if (capture === null) {
			return 'none';
		} else if (capture[1] == 'c' || capture[3] == 'c') {
			return 'p' + capture[2];
		}
		return 'none';
	},
	
	getCL: function (parentElementId) {
		var regex = /\d/;	
		return 'c' + regex.exec(parentElementId) + 'List';
	},
	
	c: function (elemntDivId) {
		var expandedChildParentId = menu.getP(expandedChildListId);
		
		if (expandedChildListId != 'none' && expandedChildParentId != menu.getP(activeItemId)) {
			if ( ! menu.frozen ) {
				css.replaceClass(expandedChildListId, '', 'hidden');
			}
			if (expandedChildParentId == activeItemId) {
				menu.swap(expandedChildParentId+'Div', 'aP');
			} else {
				menu.swap(expandedChildParentId+'Div', 'pP');
			}
		}
		if ( menu.frozen ) {
			menu.swap(elemntDivId, 'aD');
		}
		menu.h(elemntDivId, 1);
	},
	
	h: function (elemntDivId, highlight) {
		var regex = /\b((p|a)(D|P|M|C))(_h)?\b/;
		var capture = regex.exec(getElemnt(elemntDivId).className);
		
		if (highlight === 0) {
			css.replaceClass(elemntDivId, capture[0], capture[1]);
		} else {
			css.replaceClass(elemntDivId, capture[0], capture[1] + '_h');
		}
		return true;
	},
	
	swap: function (elemntId, toClassName) {
		var regex = /\b((p|a)(D|P|M|C))(_h)?\b/;
		var capture = regex.exec(getElemnt(elemntId).className);
		css.replaceClass(elemntId, capture[0], toClassName);
		return true;
	}
};

var social = {
	i: function () {
		var a;
		if (getElemnt('alternateNavigation') || getElemnt('dialogBg')) {
			return false;
		}
		a = getElemnt('shareDiv').appendChild(document.createElement('A'));
		a.id = 'shareEmail';
		a.className = 'shareLink';
		a.innerHTML = 'Email';
		a.href = '#';
		attachEventHandler ('shareEmail', 'click', function (event){social.e(event);}, true);
		
		a = getElemnt('shareDiv').appendChild(document.createElement('A'));
		a.id = 'sharePrint';
		a.className = 'shareLink';
		a.innerHTML = 'Print';
		a.href = '#';
		attachEventHandler ('sharePrint', 'click', function (event){social.p(event);}, true);
		
		a = getElemnt('shareDiv').appendChild(document.createElement('A'));
		a.id = 'shareSocial';
		a.className = 'shareLink';
		a.appendChild(document.createTextNode('Bookmark \u0026 Share'));
		a.href = '#';
		attachEventHandler ('shareSocial', 'click', function (event){social.s(event);}, true);
	},
	s: function (event) {
		var html;
		if (getElemnt('sendFriendDiv')) {
			css.replaceClass('sendFriendDiv', '', 'hidden'); 
		}
		if ( ! getElemnt('socialDiv')) {
			d = getElemnt('shareDiv').appendChild(document.createElement('DIV'));
			d.id = 'socialDiv';
			d.className = 'social';
			dd = d.appendChild(document.createElement('DIV'));
			a = dd.appendChild(document.createElement('A'));
			a.id = 'socialClose';
			a.href = '#';
			a.appendChild(document.createTextNode('\u00D7'));
			attachEventHandler('socialClose', 'click', social.c, true);
			attachEventHandler(document, 'keyup', social.k, true);
			dd.appendChild(document.createTextNode('Bookmark \u0026 Share'));
			u = dd.appendChild(document.createElement('UL'));
			
			html = '<li><a href="#" id="shFav" ref="sidebar">Favorites</a></li>';
			html += '<li id="shDel"><a href="#">Del.icio.us</a></li>';
			html += '<li id="shFac"><a href="#">Facebook</a></li>';
			html += '<li id="shStu"><a href="#">StumbleUpon</a></li>';
			html += '<li id="shTwi"><a href="#">Twitter</a></li>';
			html += '<li id="shGoo"><a href="#">Google</a></li>';
			html += '<li id="shMys"><a href="#">MySpace</a></li>';
			html += '<li id="shLiv"><a href="#">Live</a></li>';
			html += '<li id="shDig"><a href="#">Digg</a></li>';
			html += '<li id="shLin"><a href="#">LinkedIn</a></li>';
			u.innerHTML = html;
			attachEventHandler('shFav', 'click', social.b, true);
			attachEventHandler('shDel', 'click', function(event){social.l(event,'del')}, true);
			attachEventHandler('shFac', 'click', function(event){social.l(event,'fac')}, true);
			attachEventHandler('shStu', 'click', function(event){social.l(event,'stu')}, true);
			attachEventHandler('shTwi', 'click', function(event){social.l(event,'twi')}, true);
			attachEventHandler('shGoo', 'click', function(event){social.l(event,'goo')}, true);
			attachEventHandler('shMys', 'click', function(event){social.l(event,'mys')}, true);
			attachEventHandler('shLiv', 'click', function(event){social.l(event,'liv')}, true);
			attachEventHandler('shDig', 'click', function(event){social.l(event,'dig')}, true);
			attachEventHandler('shLin', 'click', function(event){social.l(event,'lin')}, true);
		} else {
			css.replaceClass('socialDiv', 'hidden', ''); 
		}
		return stopEvent(event);
	},
	p: function (event) {
		if (getElemnt('socialDiv')) {
			getElemnt('shareDiv').removeChild(getElemnt('socialDiv'));
		}
		window.print();
		return stopEvent(event);
	},
	e: function (event) {
		var html;
		if (getElemnt('socialDiv')) {
			css.replaceClass('socialDiv', '', 'hidden'); 
		}
		if ( ! getElemnt('sendFriendDiv')) {
			d = getElemnt('shareDiv').appendChild(document.createElement('DIV'));
			d.id = 'sendFriendDiv';
			d.className = 'email';
			dd = d.appendChild(document.createElement('DIV'));
			a = dd.appendChild(document.createElement('A'));
			a.id = 'sendFriendClose';
			a.href = '#';
			a.appendChild(document.createTextNode('\u00D7'));
			attachEventHandler('sendFriendClose', 'click', social.c, true);
			attachEventHandler(document, 'keyup', social.k, true);
			dd.appendChild(document.createTextNode('Email this page to a friend'));
			
			c = dd.appendChild(document.createElement('DIV'));
			c.className = 'shareByMail';
			html = '<form method="post" action="/share/email/">';
			html += '<input type="hidden" name="t" value="'+document.title+'"/>';
			html += '<input type="hidden" name="u" value="'+location.pathname+location.search+'"/>';
			html += '<table class="form">';
			html += '<tr><td><label for="teField">Friend\'s Email:</label><span title="required" class="explanation">*</span></td><td><input type="text" name="te" id="teField" value="" maxlength="225"/></td></tr>';
			html += '<tr><td><label for="fnField">Your Name:</label><span title="required" class="explanation">*</span></td><td><input type="text" name="fn" id="fnField" value="" maxlength="225"/></td></tr>';
			html += '<tr><td><label for="feField">Your Email:</label><span title="required" class="explanation">*</span></td><td><input type="text" name="fe" id="feField" value="" maxlength="225"/></td></tr>';
			html += '<tr><td><label for="cTextarea">Comment:</label></td><td>(200 characters max)</td></tr>';
			html += '<tr><td colspan="2"><textarea cols="20" rows="5" id="cTextarea" name="c"></textarea></td></tr>';
			html += '<tr><td colspan="2" align="right"><input type="submit" class="button" value="Send"/></td></tr>';
			html += '</table></form>';
			c.innerHTML = html;
			imposeMaxLength('cTextarea', 200);
			setFocus('teField');
		} else {
			css.replaceClass('sendFriendDiv', 'hidden', ''); 
		}
		return stopEvent(event);
	},
	b: function(event) {
		if (window.sidebar) { // FireFox
			window.sidebar.addPanel(document.title, self.location, "");
		} else if (window.external) { // IE
			window.external.AddFavorite(self.location, document.title);
		} else {
			dialog.alert(event, 'Press CTRL+D to bookmark', 'Help');
		}
		return stopEvent(event);
	},
	l: function(event, service) {
		return inlinePost(event, '/share/', {u: location.pathname+location.search, t: document.title, s: service}, '_blank');
	},
	c: function(event) {
		window.status = 'closing';
		if (getElemnt('socialDiv')) {
			css.replaceClass('socialDiv', '', 'hidden');
			
			window.status += '; socialDiv';
		}
		if (getElemnt('sendFriendDiv')) {
			css.replaceClass('sendFriendDiv', '', 'hidden'); 
			
			window.status += '; sendFriendDiv';
		}
		
		window.status += '; stop';
		return stopEvent(event);
	},
	k:function(event) {
		if (event.keyCode == 27) {
			return social.c(event);
		}
	}
};

if (window.sidebar && window.name == 'web-panels-browser') { // force FireFox to open uri in main window
	window.open(self.location, '_content');
	window.location = '/mainSite/sidebarHelp.html';
}

preLoad.onAvailable('shareDiv', social.i, []);
var dateObj = new Date();
document.cookie='tz='+escape(-dateObj.getTimezoneOffset())+';path=/;domain=traveljournal.net';