//Ajax Sync
(function($) {
	
	var ajax = $.ajax;
	
	var pendingRequests = {};
	
	var synced = [];
	var syncedData = [];
	
	$.ajax = function(settings) {
		// create settings for compatibility with ajaxSetup
		settings = jQuery.extend(settings, jQuery.extend({}, jQuery.ajaxSettings, settings));
		
		var port = settings.port;
		
		switch(settings.mode) {
		case "abort": 
			if ( pendingRequests[port] ) {
				pendingRequests[port].abort();
			}
			return pendingRequests[port] = ajax.apply(this, arguments);
		case "queue": 
			var _old = settings.complete;
			settings.complete = function(){
				if ( _old )
					_old.apply( this, arguments );
				jQuery([ajax]).dequeue("ajax" + port );;
			};
		
			jQuery([ ajax ]).queue("ajax" + port, function(){
				ajax( settings );
			});
			return;
		case "sync":
			var pos = synced.length;
	
			synced[ pos ] = {
				error: settings.error,
				success: settings.success,
				complete: settings.complete,
				done: false
			};
		
			syncedData[ pos ] = {
				error: [],
				success: [],
				complete: []
			};
		
			settings.error = function(){ syncedData[ pos ].error = arguments; };
			settings.success = function(){ syncedData[ pos ].success = arguments; };
			settings.complete = function(){
				syncedData[ pos ].complete = arguments;
				synced[ pos ].done = true;
		
				if ( pos == 0 || !synced[ pos-1 ] )
					for ( var i = pos; i < synced.length && synced[i].done; i++ ) {
						if ( synced[i].error ) synced[i].error.apply( jQuery, syncedData[i].error );
						if ( synced[i].success ) synced[i].success.apply( jQuery, syncedData[i].success );
						if ( synced[i].complete ) synced[i].complete.apply( jQuery, syncedData[i].complete );
		
						synced[i] = null;
						syncedData[i] = null;
					}
			};
		}
		return ajax.apply(this, arguments);
	};
	
})(jQuery);

// Check / Uncheck all Categories
$(document).ready(function(){
	$('#uncheckAll').click(function() { $('#catID :checkbox').removeAttr('checked'); return false; });
	$('#checkAll').click(function() { $('#catID :checkbox').attr('checked','true'); return false; });
});

//Hover / Click on Event Item in Lists
function clickable_events(){
$('.evitem').click(function(){
	window.location = $(this).contents().find('a').attr('href');
});
$('.evitem').hover(
  function(){
		 $(this).contents().find('a').css({color:'#2B798E'});
		 $(this).css({cursor:'pointer',background:'#fbfbfb'});
  },
	function(){
		 $(this).contents().find('a').css({color:'#C62323'});
		 $(this).css({cursor:'default',background:'#ffffff'});
	});
}

$(document).ready(function(){
	
	clickable_events();
	
	//Mini Calendar
	var reloadCalendar = function(e)  {
		$("#month a#previous, #month a#next").unbind();
		$("#month a#previous, #month a#next").click(function(){ return false; });
		var $url = $(this).attr('href').match(/http:\/\/.*?\/(el\/)?(\d{2}-\d{2}-\d{4})/)[2];
		$("#cal div#month").css('opacity','0.5');
		$("#cal table").css('opacity','0.5');
		$("#cal").css('background','url(/images/loading.gif) no-repeat 96% 2%');
		 $.ajax({
			type: "GET",
			url: "/"+langurl+"minical/",
			data: "theDate="+$url+"&ajax=1",
			success: function(msg){
				$("#cal div#month").remove();
				$("#cal table").remove();
				$("#cal").append(msg);
				$("#month a#previous, #month a#next").click(reloadCalendar);
				$("#cal").css('background','');
			}
		 });	 
		return false;
	};
	$("#month a#previous, #month a#next").click(reloadCalendar);
	
	
	//Search Results
	if(lang == 'el'){
		criteriatext = 'Εκδηλώσεις που πληρούν κριτήρια';
	} else {
		criteriatext = 'Events matching your criteria';	
	}	
	var delay;
	var $data;
	var reloadSearch = function(e) {
		var $parentForm = $(this).parents("form");
		var $paraNum = $(this).parents("form").siblings("p[id*=eventNum]");
		
		var aj = function(){
			var $newData = $parentForm.serialize();
			if($data != $newData) {
				$data = $newData;
				$paraNum.html(criteriatext+" <strong class='loading'>&nbsp;</strong>");
				$.ajax({
					type: "POST",
					url: "/includes/searchAjax.php",
					data: $data,
					mode: "abort",
					success: function(msg){
							$paraNum.html(criteriatext+" <strong>"+msg+"</strong>");
					}
				 });
			}
		};

		if(e.type == 'keyup'){
			clearTimeout(delay);
			delay = setTimeout(aj, 770);	
		} else {
			aj();
		}
		
	};
	
	$("form#eventSearch :input:not(#keyword):not(:checkbox)").change(reloadSearch);
	$("form#eventSearch :checkbox").click(reloadSearch);
	$("form#eventSearch #keyword").keyup(reloadSearch);
	
	//Trigger Change when links to select/deselect event categories is clicked
	$("form#eventSearch a.eventMain").click(reloadSearch);
	
	//For Quick Search
	$("form#quickSearchForm :input:not(#keyword)").change(reloadSearch);
	$("form#quickSearchForm #keywordqs").keyup(reloadSearch);
	
	//Exact Dates
	if(lang == 'el'){
		viewtext = '(δες τις ημερομηνίες)';
		hidetext = '(κρύψε τις ημερομηνίες)';
	} else {
		viewtext = '(view exact dates)';
		hidetext = '(hide exact dates)';		
	}
	$exactDatesLoaded = 0;
	$('a#exactDates').click(function() { 
		if($("a#exactDates").text() == viewtext){
			if($exactDatesLoaded){
				$('#exactDatesDiv').show();
				$('a#exactDates').text(hidetext);
			} else {
				$("a#exactDates").css('background','url(/images/loading.gif) no-repeat 100% 0');
				$.ajax({
					type: "GET",
					url: $(this).attr('href'),
					data: "ajax=1",
					success: function(msg){
						$("a#exactDates").after('<div id="exactDatesDiv">'+msg+'</div>');
						$("a#exactDates").css('background','');
						$('a#exactDates').text(hidetext);
						$exactDatesLoaded = 1;
					}
				 });
			}
		} else {
			$('a#exactDates').text(viewtext); 
			$('#exactDatesDiv').hide();
		}
	return false; 
	});
	
	//Save Date Select
	$saveDateLoaded = 0;
	$('a#toggleDateSelect').click(function() { 
		if($saveDateLoaded){
			if($('div#saveDateSelect').css('display') == 'none'){
				$('#saveDateSelect').show();
			} else {
				$('#saveDateSelect').hide();
			}
		} else {
			var offset = $('a#toggleDateSelect').offset();
			$("a#toggleDateSelect").parents('h3').after('<div id="saveDateSelect"></div>');
			$('#saveDateSelect').css({left:"320px", top:offset.top+20});
			$("#saveDateSelect").css('background','white url(/images/loading.gif) no-repeat 50% 50%');
			$.ajax({
				type: "GET",
				url: $(this).attr('href'),
				data: "ajax=1&saveEvent=1&lang="+lang,
				success: function(msg){
					$("#saveDateSelect").append(msg);
					$("#saveDateSelect").css('background','white');
					$saveDateLoaded = 1;
					$('#saveDateSelect a').click(function() { 
						$('a#toggleDateSelect').prev('span').text($(this).attr('title'));
						$href = $(this).attr('href');
						$('#saveLinks a').attr('href', function() {
							return $(this).attr('href').replace(/date=.*/g, 'date='+$href);	
						}); 
						$('#saveDateSelect').hide();
						return false;
					});
				}
			 });
		}
	return false; 
	});
	$(document).click(function(){
		$('#saveDateSelect').hide();
	});
	// target="_blank" XHTML Strict
	$('.targetBlank').attr('target','_blank');	
	//CSS Styling
	$('legend').each(function(index){
		$(this).replaceWith('<h2 class="legend">' + $(this).text() + '</h2>');
	});
	
	//correct small-caps in Greek
	$letters = { 'ά':'α', 'έ':'ε', 'ή':'η', 'ί':'ι', 'ό':'ο', 'ύ':'υ', 'ώ':'ω', 'ΐ':'ϊ' };
	$("h2,h3").each(function (i) {
		if ($(this).css('font-variant') == "small-caps") {			
			$(this).text($(this).text().replace(/./g, function (match) {
				return $letters[match] || match;
			}));
			/*
			var noTonos = $(this).text();
			jQuery.each($letters, function(a, b) {
				$search = new RegExp(a, 'gi');
				noTonos = noTonos.replace($search, b);
			});
			$(this).text(noTonos);*/
		} 
	});

	// CSS Corrections for old browsers
	$('input:checkbox, input:radio').css({border:"none", background:"none"});
	
	//Category Menu drop down (more...)
	ddmenuitem = 0;
	function categorymenu_open()
	{
		if(ddmenuitem) { categorymenu_close(); return false; }
		ddmenuitem = $(this).parent().find('ul').eq(0).css('visibility', 'visible');
		ddmenuitem = $(this).parent().find('ul').eq(0).css('z-index', '1000');
		return false;}
	
	function categorymenu_close()
	{	if(ddmenuitem) ddmenuitem.css('visibility', 'hidden');
		ddmenuitem = 0;
	}
	
	$(document).ready(function()
	{	$('#categorymenu > li.morecat > a').bind('click', categorymenu_open);});
	
	document.onclick = categorymenu_close;
	
});

// Custom Alert
function EValert(msg, errElem, errClass){
	$("div.everror").remove();
	$("div.formerror").removeClass("formerror");
	window.scroll(0,180);
	$("h1").eq(0).after('<div class="'+errClass+'">'+msg+'</div>').hide().slideDown("slow");
	$.each(errElem, function(elem, val) {
		$("#"+elem).parents("div").eq(0).addClass("formerror");
	});
}