// +-------------------------------------------------------------+
// | Zaplife javascript file
// | All rights reserved. Copyright 2005-2010 Zaplife
// |
// +-------------------------------------------------------------+

//Global vars

var previousField = ''; //Used to find out which was the previous field when using the focusInput function
var currentSmilieInput = ''; //Used to determine which is the current input to insert smilies
var selectedEntryId = '';
var jSPath = 'http://www.zaplife.com/javascripts_uncompressed/'; //Used to include files
var webPath = 'http://www.zaplife.com/';
var theme = 'default';
var sessionVar = '';


//Core status functions

function statusUpdate(currentPage) {
	var jSonRequest = new Request.JSON({url: webPath + "ajax_status.php", data: 'current_page=' + currentPage, onComplete: function(status){
    	if (status.loggedIn == 0) {
    		document.location = 'logout.php';
    	} else {
			// Messages
			if (status.newMessages != 0) { 
				$('statusMessages').set('html', ' (' + status.newMessages + ')');
				$('statusMessagesLink').title = status.newMessagesText;
				
				if (status.newMail != 0) { 
					$('statusMail').set('html', ' (' + status.newMail + ')'); 
					$('statusMailLink').title = status.newMailText; 
				}
				if (status.newGb != 0) {
					$('statusGb').set('html', ' (' + status.newGb + ')');
					$('statusGbLink').title = status.newGbText; 
				}
				/*
				if (status.newAloha != 0) {
					$('statusAloha').set('html', ' (' + status.newAloha + ')');
					$('statusAlohaLink').title = status.newAlohaText;
				}
				*/
			}
			// Friends
			// Online friends
			if (status.newFriends != 0) {
				$('statusFriendsMain').set('html', ' (' + status.newFriends + ')');
				$('statusFriendsMainLink').title = status.newFriendsText;

				if (status.onlineFriends != 0) {
					//$('statusFriendsMain').setHTML(' (' + status.onlineFriends + ')');
					$('onlineFriends').set('html', status.onlineFriendsHTML);
				} else {
					//$('statusFriendsMain').setHTML('');
					$('onlineFriends').set('html', '');
				}
				if (status.newFriendActivities != 0) { 
					$('statusFriendActivities').set('html', ' (' + status.newFriendActivities + ')'); 
					$('statusFriendActivitiesLink').title = status.newFriendActivitiesText; 
				}
				/*
				if (status.newFriend != 0) { 
					$('statusFriend').setHTML(' (' + status.newFriend + ')'); 
					$('statusFriendLink').title = status.newFriendText; 
				}
				*/
			} else {
				$('statusFriendsMain').set('html', '');
				$('onlineFriends').set('html', '');
				$('statusFriendsMainLink').title = '';
			}
			// Channels
			if (status.newChannels != 0) { 
				$('statusChannelsMain').set('html',' (' + status.newChannels + ')');
				$('statusChannelsMainLink').title = status.newChannelsText;
				
				$('statusChannels').set('html',' (' + status.newChannels + ')'); 
				$('statusChannelsLink').title = status.newChannelsText; 
			}
			// Home
			if (status.newHome != 0) { 
				$('statusHomeMain').set('html',' (' + status.newHome + ')');
				$('statusHomeMainLink').title = status.newHomeText;
				
				$('statusStartPage').set('html',' (' + status.newHome + ')'); 
				$('statusStartPageLink').title = status.newHomeText; 
				
				//Change title
				var titleElements = document.title.split('|');
				document.title = 'Zaplife (' + status.newHome + ') |' + titleElements[1];
			} else {
				$('statusHomeMain').set('html','');
				$('statusHomeMainLink').title = '';
				
				$('statusStartPage').set('html',''); 
				$('statusStartPageLink').title = ''; 
				
				//Change title
				var titleElements = document.title.split('|');
				document.title = 'Zaplife |' + titleElements[1];
			}
			
			// Home tabs
			if (status.currentPage == 'home') {
				var subscriptionsBadge = $('subscriptions').getElement('.tabSideMenuNewBadge');
				if (status.newHomeSubscriptions != 0) {
					subscriptionsBadge.set('html', status.newHomeSubscriptions);
					subscriptionsBadge.removeClass('hidden');
				} else {
					subscriptionsBadge.addClass('hidden');
				}
				var friendsBadge = $('friends').getElement('.tabSideMenuNewBadge');
				if (status.newHomeFriends != 0) {
					friendsBadge.set('html', status.newHomeFriends);
					friendsBadge.removeClass('hidden');
				} else {
					friendsBadge.addClass('hidden');
				}
				var photosBadge = $('photos').getElement('.tabSideMenuNewBadge');
				if (status.newHomePhotos != 0) {
					photosBadge.set('html', status.newHomePhotos);
					photosBadge.removeClass('hidden');
				} else {
					photosBadge.addClass('hidden');
				}
				var newsBadge = $('news').getElement('.tabSideMenuNewBadge');
				if (status.newHomeNews != 0) {
					newsBadge.set('html', status.newHomeNews);
					newsBadge.removeClass('hidden');
				} else {
					newsBadge.addClass('hidden');
				}
				var categoriesBadge = $('categories').getElement('.tabSideMenuNewBadge');
				if (status.newHomeCategories != 0) {
					categoriesBadge.set('html', status.newHomeCategories);
					categoriesBadge.removeClass('hidden');
				} else {
					categoriesBadge.addClass('hidden');
				}
				var featuredBadge = $('featured').getElement('.tabSideMenuNewBadge');
				if (status.newHomeFeatured != 0) {
					featuredBadge.set('html', status.newHomeFeatured);
					featuredBadge.removeClass('hidden');
				} else {
					featuredBadge.addClass('hidden');
				}
			}
			
			/*
			//Photos
			if (status.newPhotos != 0) { 
				$('statusPhotosMain').setHTML(' (' + status.newPhotos + ')');
				$('statusPhotosMainLink').title = status.newPhotosText;
				
				$('statusPhotos').setHTML(' (' + status.newPhotos + ')'); 
				$('statusPhotosLink').title = status.newPhotosText; 
			}
			//Blog
			if (status.newBlogComments != 0) {
				$('statusBlogsMain').setHTML(' (' + status.newBlogComments + ')');
				$('statusBlogsMainLink').title = status.newBlogCommentsText;

				$('statusBlogs').setHTML(' (' + status.newBlogComments + ')');
				$('statusBlogsLink').title = status.newBlogCommentsText;
			} 
			*/
			
			// Away status
			if (status.away == 1) {
				$('userStatus').addClass('away');
				$('userStatus').removeClass('online'); 
				$('userStatus').title = status.awayText;
			} else {
				$('userStatus').addClass('online');
				$('userStatus').removeClass('away'); 
				$('userStatus').title = status.awayText;
			}
		}
	}}).send();
	statusUpdate.delay(45 * 1000, currentPage, currentPage);
}


//Hover flash buttons

window.addEvent('domready', function () {
	$$('a.hoverButton').each(function(el){

		el.addEvent('mouseover',function(){
			// actual mouseover action
			this.firstChild.src = this.firstChild.src.replace(/.png/g,'_h.png');
			// effect is optional
			this.tween('opacity',.3,1);
		});
		
		el.addEvent('mouseout',function(){
			// actual mouseover action
			this.firstChild.src = this.firstChild.src.replace(/_h/g,'');
			// effect is optional
			//this.effect('opacity').custom(.3,1);
		});
	
	});
});

// Create the global scroller that is used on various pages
window.addEvent('domready', function () {
	scroller = new Fx.Scroll(window, {offset: {'x': 0, 'y': 0}});
});	

// Scroll on load if # exist in url, activate smoothscroll on anchor links
/*
function scrollOnLoad(scroll) {

	

	//Need to chain this in someway as when channel loads it starts to scroll before thumbs on photo entries has finished loading
	if (selectedEntryId != '' && scroll) {
		//var anchor = window.location.hash.split('#'); 
		scrollToElement('e' + selectedEntryId);
	}
	/*
	if (window.location.hash != '' && scroll) {
		var anchor = window.location.hash.split('#'); 
		new Fx.Scroll(window, {
    		offset: {'x': 0, 'y': 0}
		}).toElement($(anchor[1]));
	}
	*/
	
	/*
	new SmoothScroll({
		offset: {'x': 0, 'y': 0}
	});
	* /
}
*/

//Scrolls to element
function scrollToElement(element) {

	scroller.toElement($(element));

}

//Loader function 

function startLoader(container, location) {

	if (typeof location == "undefined") {
    	location = 'top';
  	}
	
	//Wait image
	var loaderWrapper = new Element('div').setStyles({'width': '100%', 'text-align': 'center'}).inject($(container), location);
	var loaderImg = new Element('img');
	loaderImg.src = webPath + 'images/loading.gif';
	loaderImg.injectInside(loaderWrapper);

}


//Smilie insert

function insertSmilie(theSmilie) { // inserts smilie text
	var field = $(currentSmilieInput);
	//Insert at cursor
	//IE
	if (document.selection) {
		field.focus();
		sel = document.selection.createRange();
		sel.text = theSmilie+" ";
	}
	
	//Mozilla
	else if (field.selectionStart || field.selectionStart == '0') {
		var startPos = field.selectionStart;
		var endPos = field.selectionEnd;
		field.value = field.value.substring(0, startPos)
					+ theSmilie+" "
					+ field.value.substring(endPos, field.value.length);
	} else {
		field.value += theSmilie+" ";
	}
	field.focus();
}

//Toggles smilie tooltip

function toggleSmilies(id, input) {

	//Load html into page if not exist
	if (!$('smiliesTooltip')) {
		loadHtml('smiliesTooltip', 'smilies', 'toggleSmilies(\''+id+'\', \''+input+'\')', 'tooltipLargeLight');
		return false;
	}
	
	//Hide if open
	if ($('smiliesTooltip').style.display == 'block' && currentSmilieInput != input) {
		$('smiliesTooltip').style.display = 'none';
	}
	
	currentSmilieInput = input; //Global variable to determine current smilie input

	toggleTooltip('smilies', 0, 0, 0, id);
}

// Add token to container

function addToken(containerId, id) {
	
	var label = $('selectLabel'+id).get('html');

	var token = new Element('a', {'href': 'javascript:void(0);','class': 'token'});	
	var span1 = new Element('span').inject(token);
	var span2 = new Element('span').inject(span1);
	var span3 = new Element('span').inject(span2);
	var span4 = new Element('span', {'html': label}).inject(span3);
	var span5 = new Element('span', {'class': 'x'}).inject(span4);
	span5.addEvent('click', function(e) {
		this.parentNode.parentNode.parentNode.parentNode.parentNode.destroy();
		return false;
	});
	var input = new Element('input', {'value': id, 'name': 'token_ids[]', 'type':'hidden'}).inject(span4);
	
	token.inject(containerId);
}

// Select a value from a JS dropdown

function selectDropdown(containerId, id) {
	
	var label = $('selectLabel'+id).get('html');
	
	// Set top level label
	$(containerId).getElement('a').set('html', label);
	
	// Set input value
	$(containerId + 'Selected').set('value', id);
}

// Display a notification message

function notify(containerId) {

	var notifyFx = new Fx.Slide(containerId, {
		mode: 'vertical'
	});
	notifyFx.hide();
	$(containerId).removeClass('hidden');
	notifyFx.slideIn();
	notifyFx.slideOut.delay(4000, notifyFx);
}
//Function to load HTML elements such as smilies, popup's and forms.

function loadHtml(id, action, callbackFunction, divClass, vars, loader) {
	//If object already exists
	if ($(id)) { 
		eval(callbackFunction);
		return false;
	}
	if (vars == undefined || vars == '') {
		var vars = ''; 
	} else {
		vars = '&' + vars;
	}
	if (divClass == undefined) {
		var divClass = ''; 
	}
	if (loader == undefined) {
		var loader = false; 
	}	

	var htmlWrapper = new Element('div').set({'id': id, 'class': divClass}).setStyles({'display': 'none'}).inject(document.body);
	if (loader) {
		startLoader(id);
		htmlWrapper.setStyles({'position': 'absolute', 'display': 'block', 'top': window.getScrollTop() + (window.getHeight() / 2), 'left': '50%'});
	 	
	}
		
	var pars = {
		url: webPath + 'ajax_html.php', 
		method: 'get',
		evalScripts: true,
		update: htmlWrapper, // Must use this for html Javascript to be evaluated after div has been populated and not before
		data: 'action=' + action + vars,
		onSuccess: function (responseTree, responseElements, responseHTML, responseJavaScript) {
			if (loader) {
				htmlWrapper.setStyles({'position': '', 'display': 'none', 'top': '', 'left': ''});
			}
			//htmlWrapper.set('html', responseHTML);
			eval(callbackFunction);
		}
	};
	var myAjax = new Request.HTML(pars).send();
}

//Main menu functions

function toggleMenu(id, mode, timer, effect) {
	var timer = timer || '0';
	var effect = effect || '0';
	var dropdownId = id + 'Dropdown';
	
	if ($(dropdownId).innerHTML != '') {
		if (mode == 'on') {
			if (eval('typeof ' + dropdownId + 'Timer != \'undefined\'')) {
				clearTimeout(eval(dropdownId + 'Timer'));
			}
			if (effect == '1') {
				$(dropdownId).setStyles({ display:'', left: $(id).getLeft() - 4 });
				$(dropdownId).tween('opacity', 0, 1);
			} else {
				$(dropdownId).setStyles({ display:'', opacity: 1, left: $(id).getLeft() - 4 });
			}
		} else if (mode == 'off' && timer == '1') {
			eval(dropdownId + 'Timer = setTimeout("toggleMenu(\'' + id + '\', \'off\', \'0\', \'' + effect + '\')", 2000)');
		} else {
			if (effect == '1') {
				new Fx.Tween($(dropdownId), {
					onComplete: function () { 
						$(dropdownId).style.display = 'none'; 
					} 
				}).start('opacity', 1, 0);
			} else {
				$((dropdownId)).setStyles({ display:'none', opacity: 0 });
			}
		}
	}
}

//Simple open window

function openWindow(theURL,winName,features) {
  window.open(theURL,winName,features);
}

//Display popup window

function toggleDialogPopup(id, center, e, windowClick, action, vars) {
	if (typeof action == "undefined") {
    	action = '';
  	}
  	if (typeof vars == "undefined") {
    	vars = '';
  	}
  	
	//e = new Event(e);
	//e.stop();

	//First time load HTML popup
	if (!$(id + 'PopupDialog')) {
		loadHtml(id + 'PopupDialog', action, 'toggleDialogPopup(\''+id+'\', \''+center+'\', \''+e+'\', \''+windowClick+'\')', 'popupDialogWrapper', vars, true);
		return false;
	}
	
	//First time we run after loading html
	if ($(id + 'PopupDialog').style.display == 'none') {
		if (windowClick == 1) {
			//Event to close window when click outside
			$(id + 'PopupDialog').addEvent('click', function(e) {
				e = new Event(e);
				e.stop();
			});
		}
		//$(id).injectInside('popup_dialog_content_' + id);
		$(id + 'PopupDialog').makeDraggable({
			handle: $(id + 'PopupDraggable')
		});
		//$('popup_dialog_' + id).setStyle('display', '');
		//$(id).setStyle('display', '');
		$(id + 'PopupDialog').setStyle("opacity", "0");
		$(id + 'PopupDialog').setStyle("display", "block");
	}
	
	if ($(id + 'PopupDialog').style.opacity == '0') {
		if (center == 1) {
			var left = (window.getWidth() - $(id + 'PopupDialog').getSize().x) / 2;
			var top = (window.getHeight() - $(id + 'PopupDialog').getSize().y) / 2 + window.getScrollTop();
		} else {
			var left = e.target.getLeft() - 2;
			var top = e.target.getTop() + 20;
		}
		if (windowClick == 1) {
			window.addEvent('click', function(e) { toggleDialogPopup (id, center, e, windowClick) });
		}
		$(id + 'PopupDialogCloseLink').addEvent('click', function(e) { toggleDialogPopup (id, center, e, windowClick) });
		$(id + 'PopupDialog').setStyles({ left: left, top: top });
		$(id + 'PopupDialog').tween('opacity',0,1);
	} else {
		window.removeEvents('click');
		$(id + 'PopupDialog').tween('opacity',1,0);
	}
}
	
/*
function showHideColumn() {
	var sideColumn = findObj('sidecolumn');
	var toggleArrow = findObj('togglearrowcolumn');
	
	if (sideColumn.style.display == 'none') {
		sideColumn.style.display = '';
		toggleArrow.src = 'images/arrow_down.gif';
		setCookie('showcolumn', '1', '30');
		//document.cookie = 'showcolumn=1' + "; expires=" + expdate.toGMTString();
		window.scrollTo(0, 0);
	} else {
		sideColumn.style.display = 'none';
		toggleArrow.src = 'images/arrow_left.gif';
		setCookie('showcolumn', '0', '30');
		//document.cookie = 'showcolumn=0' + "; expires=" + expdate.toGMTString();
	}
}


function showHideProfile() {
	var profile = findObj('profile');
	var toggleArrow = findObj('togglearrowprofile');
	
	if (profile.style.display == 'none') {
		profile.style.display = '';
		toggleArrow.src = 'images/arrow_down.gif';
		setCookie('showprofile', '1', '30');
		//document.cookie = 'showprofile=1' + "; expires=" + expdate.toGMTString();
		window.scrollTo(0, 0);
	} else {
		profile.style.display = 'none';
		toggleArrow.src = 'images/arrow_right.gif';
		setCookie('showprofile', '0', '30');
		//document.cookie = 'showprofile=0' + "; expires=" + expdate.toGMTString();
	}
}
*/

//Used to show tooltips on forms and focus the input field

function focusInput(id) {

	if (previousField != '') {
		$(previousField).style.background="#FFFFFF";
		if ($(previousField + 'Tooltip')) {
			$(previousField + 'Tooltip').setStyle("display", "none");
			//Element.hide('tooltip'+previousField);
		}
	}
	previousField = id;		
	$(id).style.background="#CCEBFF";
	showTooltip(id);
}

//Displays the tooltip

function showTooltip(id, offsetX, offsetY, reverse, posId, relative) {
	if (typeof offsetX == "undefined") {
    	var offsetX = 0;
  	}
  	if (typeof offsetY == "undefined") {
    	var offsetY = 0;
  	}
  	if (typeof reverse == "undefined") {
    	var reverse = 0;
  	}
  	if (typeof posId == "undefined") {
    	var posId = '';
  	}
  	if (typeof relative == "undefined") {
    	var relative = '';
  	} else {
  		relative = $(relative);
  	}

	
	//Display the tooltip
	if ($(id + 'Tooltip')) {
		/*
		var Tips2 = new Tips($(id), {
			initialize:function(){
				this.fx = new Fx.Style(this.toolTip, 'opacity', {duration: 500, wait: false}).set(0);
			},
			onShow: function(toolTip) {
				this.fx.start(1);
			},
			onHide: function(toolTip) {
				this.fx.start(0);
			},
			fixed: true
		});
		*/
		//Position the tooltip
		if (posId != '') {
			var triggerPos = $(posId).getPosition(relative);
			var fieldDimensions = $(posId).getCoordinates(relative);
		} else {
			var triggerPos = $(id).getPosition(relative);
			var fieldDimensions = $(id).getCoordinates(relative);
		}
		//alert(triggerPos.x);
		if (reverse == 1) {
			var x = triggerPos.x - 266;
		} else {
			var x = triggerPos.x + fieldDimensions.width;
		}
		var y = triggerPos.y - 43;
		$(id + 'Tooltip').style.left = x+offsetX+"px";
		$(id + 'Tooltip').style.top = y+offsetY+"px";
		$(id + 'Tooltip').setStyle("opacity", "0");
		$(id + 'Tooltip').setStyle("display", "block");
		$(id + 'Tooltip').tween('opacity',1);
		
	}
}

//Hide's the tooltip

function hideTooltip(id) {	
	if ($(id + 'Tooltip')) {
		$(id + 'Tooltip').style.display='none';
	}
}

function toggleTooltip(id, offsetX, offsetY, reverse, posId) {
	if (typeof offsetX == "undefined") {
    	var offsetX = 0;
  	}
  	if (typeof offsetY == "undefined") {
    	var offsetY = 0;
  	}
  	if (typeof reverse == "undefined") {
    	var reverse = 0;
  	}
  	if (typeof posId == "undefined") {
    	var posId = '';
  	}

	if ($(id + 'Tooltip').style.display == 'none') {
		showTooltip(id, offsetX, offsetY, reverse, posId);
	} else {
		hideTooltip(id);
	}

}

//Activate title tooltip, displays title tips on all elements with the titleTooltip class
/*
window.addEvent('domready', function () {
	titleTips = new Tips('.titleTooltip');
});
*/

//Used to display error messages

function doError(id, content) {
	//$(id).injectAfter('<br><span class=\"error\">'+content+'</span>');
	$(id).setStyle('background-color', '#ffff99');
	new Element('span', {  'class': 'error' }).setText(content).injectAfter($(id));
	//new Effect.Highlight(id, {restorecolor: '#ffff99'});
}


function toggleChecked() {

	//set checkboxes
	for (var i = 0; i < document.listform.elements.length; i++) {
		var e = document.listform.elements[i];
		if ((e.disabled == false) && (e.name != 'selectAll') && (e.type == 'checkbox')) {
			e.checked = document.listform.selectAll.checked;
		}
	}
	//set rows
	var tbl  = findObj('list');
    var rows = tbl.getElementsByTagName('tr');
	
	for (var row = 0; row < rows.length; row++) {

		if (document.listform.selectAll.checked) {
			rows[row].className = "listSelected";
		}  else {
			rows[row].className = "list";
		}
    }
}



function selectRow(id)	{

	var row = findObj('row' + id);

	row.removeClass('listUnreadRow');
	row.toggleClass('listSelected');
	
	/*
	if (row.className != "listselected") {
		row.className = "listselected";
	}  else {
		row.className = "list";
	}
	return;

	/*
	if (row.checked) {
		while (row.tagName != "td") {
			row = row.parentNode;  //ie try parentElement
		}
		row.className = "mailselected";

	} else {

		while (row.tagName != "tr") {
			row = row.parentNode;
		}
		row.className = "mail";
	}

	*/
	
}

function showTab(name, id, tot) {
	var i = tot;
	
	while (i > 0) {
		findObj(name + i).style.display = "none";
		findObj(name + i + "_tab").className = "cardtaboff";
		i--;
	}
	
	findObj(name + id).style.display = "block";
	findObj(name + id + "_tab").className = "cardtabon";
}

/*
function moveBox(fbox,tbox, moveAll) {
	var arrFbox = new Array();
	var arrTbox = new Array();
	var arrLookup = new Array();
	var i;
	
	//alert('From:' + fbox + ', To:' + tbox);
	
	for (i = 0; i < tbox.options.length; i++) {
		arrLookup[tbox.options[i].value] = tbox.options[i].text;
		arrTbox[i] = tbox.options[i].value;
	}
	
	var fLength = 0;
	var tLength = arrTbox.length;
	
	for(i = 0; i < fbox.options.length; i++) {
		arrLookup[fbox.options[i].value] = fbox.options[i].text;
	
		if (moveAll == 1) {
			if (fbox.options[i].value != "") {
				arrTbox[tLength] = fbox.options[i].value;
				tLength++;
			}
		} else {
			if (fbox.options[i].selected && fbox.options[i].value != "") {
				arrTbox[tLength] = fbox.options[i].value;
				tLength++;
			} else {
				arrFbox[fLength] = fbox.options[i].value;
				fLength++;
			}
		}
	}
	
	fbox.length = 0;
	tbox.length = 0;
	var c;
	
	for(c = 0; c < arrFbox.length; c++) {
		var no = new Option();
		no.text = arrLookup[arrFbox[c]];
		no.value = arrFbox[c];
		fbox[c] = no;
	}
	
	for(c = 0; c < arrTbox.length; c++) {
		var no = new Option();
		no.text = arrLookup[arrTbox[c]];
		no.value = arrTbox[c];
		tbox[c] = no;
	}

} 
*/

//Tagging functions

function autocompleteTags(id) {
		//tagAjax = new Ajax.Autocompleter('tag_input'+id, 'tag_choices'+id, 'ajax.php?action=tags',  {paramName: "tag_input", minChars: 2});
		
		var tagAjax = new Autocompleter.Ajax.Xhtml($(id), 'ajax.php?action=tags', {
			'postVar': 'tag_input',
			'minLength': '2',
			'selectMode': 'type-ahead', // Instant completion
			'multiple': true // Tag support, by default comma separated
			/*
			'customTarget': $(id + 'Choices'),
			'parseChoices': function(el) {
				var value = el.getFirst().innerHTML;
				//alert(value);
				el.inputValue = value;
				this.addChoiceEvents(el).getFirst().setHTML(this.markQueryValue(value));
			}
			*/
		});
}

//Load cities

function autocompleteCity(container, countryId) {
	cityAjax = new Autocompleter.Ajax.Xhtml($(container), 'ajax.php?action=cities&show=' + countryId, {
		'postVar': 'value',
		'minLength': '3',
		'forceSelect': true,
		'selectMode': 'type-ahead', // Instant completion
		'onRequest': function(el) {
			$(container + 'Pwait').setStyle('display', '');
		},
		'onComplete': function(el) {
			$(container + 'Pwait').setStyle('display', 'none');
		},
		'onSelection': function(el, selected) {
			var liId = selected.id.split('.');
			$(container + 'RegionId').value = liId[1];
			//alert($(container + 'RegionId').value);
		},
		'injectChoice': function(choice) {
			var value = choice.getFirst().innerHTML;
			choice.inputValue = value;
			this.addChoiceEvents(choice.getFirst().set('html', this.markQueryValue(value)));
		}
	});
}


// Loads Zaplife widget

function loadWidget(id) {

	startLoader(id + 'Content');
	//$(id + 'Indicator').setStyle('display', 'block');
	
	var vars = {
		url: 'ajax_widgets.php', 
		method: 'post',
		evalScripts: true,
		data: 'action=' + id,
		onComplete: function (responseTree, responseElements, responseHTML, responseJavaScript) {
			$(id + 'Content').set('html', responseHTML);
			//$(id + 'Indicator').setStyle('display', 'none');
		}
	};
	var myAjax = new Request.HTML(vars).send();
}


//Misc functions

function confirmRedirect (text, url) {
	confirmRedirectUrl = url;
	if(confirm(text)) { 
		//only way to get this working with IE6 is to add a global variable and a timeout?!?!?
		//window.location.href = url;
		setTimeout( "window.location.href = confirmRedirectUrl", 0 );
	}
}

function confirmTask (text, taskCode) {
	if(confirm(text)) { 
		eval(taskCode);
	}
}

function redirect(url) {
	redirectUrl = url;
	setTimeout( "window.location.href = redirectUrl", 0 );
}

//Used to be able to dynamically include JS code

function include(filename, type) {
    // http://kevin.vanzonneveld.net
    // +   original by: mdsjack (http://www.mdsjack.bo.it)
    // +   improved by: Legaev Andrey
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Michael White (http://crestidg.com)
    // +   improved by: OceanicDesigns
    // %        note 1: Force Javascript execution to pause until the file is loaded. Usually causes failure if the file never loads. ( Use sparingly! )
    // *     example 1: include('/pj_test_supportfile_2.js');
    // *     returns 1: 1
 
 	if (type == 'js') {
		var code = document.createElement('script');
		code.setAttribute('type', 'text/javascript');
		code.setAttribute('src', filename);
		code.setAttribute('defer', 'defer');
	} else {
		var code = document.createElement('link');
		code.setAttribute('type', 'text/css');
		code.setAttribute('rel', 'stylesheet');
		code.setAttribute('href', filename);
		//code.setAttribute('defer', 'defer');
	}
    document.getElementsByTagName('HEAD')[0].appendChild(code);
 
    // save include state for reference by include_once
    var cur_file = {};
    cur_file[window.location.href] = 1;
 
    if (!window.php_js) window.php_js = {};
    if (!window.php_js.includes) window.php_js.includes = cur_file;
    if (!window.php_js.includes[filename]) {
        window.php_js.includes[filename] = 1;
    } else {
        window.php_js.includes[filename]++;
    }
 
    return window.php_js.includes[filename];
}

function includeOnce(filename, type) {
    // http://kevin.vanzonneveld.net
    // +   original by: Legaev Andrey
    // +   improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Michael White (http://crestidg.com)
    // +   improved by: OceanicDesigns
    // -    depends on: include
    // *     example 1: include_once('/pj_test_supportfile_2.js');
    // *     returns 1: true
 
 	if (type == undefined) { var type = 'js'; }
 
    var cur_file = {};
    cur_file[window.location.href] = 1;
 
    if (!window.php_js) window.php_js = {};
    if (!window.php_js.includes) window.php_js.includes = cur_file;
    if (!window.php_js.includes[filename]) {
        if(include(filename, type)){
            return true;
        }
    } else{
        return true;
    }
}

//Old functions that should be replaced by mootools instances

function findObj(n, d) {
	var p,i,x;  
	if(!d) d = document; 
	if((p = n.indexOf("?")) > 0 && parent.frames.length) {
    	d = parent.frames[n.substring(p + 1)].document;
    	n = n.substring(0,p);
    }
  	if(!(x = d[n]) && d.all) x = d.all[n];
  	for (i = 0; !x && i < d.forms.length; i++) x = d.forms[i][n];
 	for(i = 0;!x && d.layers && i < d.layers.length; i++) x = findObj(n,d.layers[i].document);
  	if(!x && d.getElementById) x = d.getElementById(n);
  	return x;
}

function setCookie(name,value,days) {
	if (days) {
		var date = new Date();
		date.setTime(date.getTime()+(days*24*60*60*1000));
		var expires = "; expires="+date.toGMTString();
	} else var expires = "";
	document.cookie = name+"="+value+expires+"; path=/";
}

function readCookie(name) {
	var nameEQ = name + "=";
	var ca = document.cookie.split(';');
	for(var i=0;i < ca.length;i++) {
		var c = ca[i];
		while (c.charAt(0)==' ') c = c.substring(1,c.length);
		if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
	}
	return null;
}

function eraseCookie(name) {
	setCookie(name,"",-1);
}


//Mootools Scroller fix	
var zapScroller = new Class({

	Extends: Scroller,
	
	scroll: function(){
		var size = this.element.getSize(), scroll = this.element.getScroll(), pos = this.element.getOffsets(), scrollSize = this.element.getScrollSize(), change = {'x': 0, 'y': 0};
		for (var z in this.page){
			if (this.page[z] < (this.options.area + pos[z]) && scroll[z] != 0)
				change[z] = (this.page[z] - this.options.area - pos[z]) * this.options.velocity;
			else if (this.page[z] + this.options.area > (size[z] + pos[z]) && size[z] + size[z] != scrollSize[z])
				change[z] = (this.page[z] - size[z] + this.options.area - pos[z]) * this.options.velocity;
		}
		if (change.y || change.x) this.fireEvent('change', [scroll.x + change.x, scroll.y + change.y]);
	}
});

