﻿var ie7 = ($.browser.msie && $.browser.version < 8);

// JScript source code
var oneMinute = (1000 * 60);
var intervals = {};intervals['yyyy'] = {units: 1000 * 60 * 60 * 24 * 365, measure: 'year'};intervals['m'] = {units: 1000 * 60 * 60 * 24 * 30, measure: 'month'};intervals['d'] = {units: 1000 * 60 * 60 * 24, measure: 'day'};
intervals['Q'] = {units: intervals["m"].units * 3, measure: 'quarter'};intervals['H'] = {units: oneMinute * 60, measure: 'hour'};intervals['N'] = {units: oneMinute, measure: 'minute'};intervals['S'] = {units: 1000, measure: 'second'};

/*
	object definition
*/
String.isNullOrEmpty	= function(value){return (value == null || value.length == 0);}
String.toLower			= function(value){return value.toLowerCase();}
String.toUpper			= function(value){return value.toUpperCase();}
String.toDate			= function(value, format)
{
	var ci = Sys.CultureInfo.CurrentCulture;
	var defaultFormat = String.format('yyyy-MM-dd HH{0}mm{0}ss', ci.dateTimeFormat.TimeSeparator);
	return Date._parseExact(value, (format != null ? format : defaultFormat), ci);
}

Date.difference = _dateDiff;
Date.format = function()
{
	var format = (arguments.length > 1 ? arguments[0] : 'dd/mm/yy');
	var value = (arguments.length > 1 ? arguments[1] : arguments[0]);
	
	// turn string value to date
	var dp = (typeof(value) == 'string' ? String.toDate(value, 'yyyy-MM-dd') : value);
	
	return $.datepicker.formatDate(format, dp);
}

Date.parseJSON = function(value, format)
{
	//return Date._parseExact(value, (format != null ? format : 'yyyy-MM-dd HH:mm:ss'), Sys.CultureInfo.CurrentCulture);
	return String.toDate(value, format);
}

Sys.StringBuilder.prototype.appendFormat = function()
{
	var args = [];
	for(var i = 0; i < arguments.length; i++)
		args.push(arguments[i]);
	
	var format = args.shift();
	this.append(String.format(format, args));
}

function validate_selection(caller)
{
	var c = $(caller);
	var valid = c.attr('valid');
	var def = c.attr('_defaultValue');
	
	if(c.val().length > 0 && c.val() != def && valid.toString() != 'true')
	{
		var data = $(caller).data('_autocomplete');
		var request = c.val();
		var r = /^.*\s\(([A-Z]{3})\)\s.*$/gi;
		var flag = '';

		if(r.test(request))
		{
			request = request.replace(r, '$1');
			flag = '&s=yes';
		}
		else
		{
			r = /^.*\((.*\,?){1,5}\)$/gi;
			if(r.test(request))
			{
				request = request.substring(0, request.indexOf('('));
				flag = '';
			}
		}

		$.ajax(
		{
			url: data.url
			,dataType: 'json'
			,data: 'd2=&q=' + escape(request) + flag + '&rnd=' + Math.random()
			,success: function(data)
			{
				var out = {label: '', value: ''};
				
				if(data.length > 0)
				{
					// matches found
					var item = Array.take(data, 1).pop();
					if(typeof(item.value) == 'undefined')
						out =
						{
							label: (request.charCodeAt(0) > 912 ? item.rNm : item.rNm + ' - ' + item.rAb)
							,value: item.rId
						}
					else
						out = item;
				}
				_response(out);
			},
			error: function(ex, t, h)
			{
				// do nothing
			}
		});
	}
	
	function _response(item)
	{
		if(item != null)
		{
			if(item.value == null || item.value.length == 0)
			{
				item.label = String.format('{0} "{1}"', ferries_resources.DidNotFound, c.val());
				item.value = '';
			}

			// set label
			c.val(item.label)
				.next('input[type=hidden]')
				.val(item.value);
			
			$(this).attr('valid', true);
		}
	}
}

function init_common_searchbox()
{
	var items = $('#searchbox').find('a[_menu=yes]');
	items.click(function(index)
	{
		var active = $('#searchbox').find('a[class$=selected]');
		var caller = this;
		
		var afterClick = function()
		{
			var queue = window['searchbox-afterClick'];
			if(queue != null)
			{
				if(typeof(queue) == 'function')
					queue();
				else if($.isArray(queue))
				{
					// execute all events
					for(var i = 0, len = queue.length; i < len; i++)
						queue[i]();
				}
			}
		}

		if(caller != active.get(0))
		{
			active.next('div').slideUp('fast', function()
			{
				active.removeClass('selected');
			});
			
			$(caller).addClass('selected')
					.next('div')
					.slideDown('fast', afterClick);
		}
	});
	
	$('#searchbox')
		.find('input:radio:checked')
		.click();

	if($.browser.msie && $.browser.version < 8)
	{
		var sp = $('[_passengers=yes]').find('select');
		var home = (location.pathname.toLowerCase().indexOf('/home') > -1);
		
		sp.each(function()
		{
			if(!home)
			{
				$(this)
					.wrap('<div class="ie7-select-container" />')
					.parent().width(35)
					.parent()
					.css('padding', '3px 1px 3px 1px');
			}
			else
			{
				$(this)
					.wrap('<div class="ie7-select-container" />')
					.parent().css(
					{
						margin: '0px !important'
						,padding: '0px !important'
					})
					.parent().width(33)
					.css('padding', '2px 1px 2px 1px');
			}
		});
	}
}

/* Ferries Search Box */
function toggle_route(caller)
{
	var single_route = (caller.id == 'rt2' || caller.id == 'at2' || caller.id.endsWith('_oneWay'));
	$(caller).closest('[_search]')
		.find('.dates').first().each(function()
		{
			var target = null;
			
			if(this.tagName.toUpperCase() == 'TABLE')
			{
				$(this).find('tr').each(function()
				{
					var current = $(this).find('td')
						.last();
					target = current.add(current.parent().prev().find('td:last'));
				});
			}
			else
				target = $(this).find('input:text:last')
							.parent().parent();
			
			// toggle
			if(target != null)
				toggle_target(single_route, target);
		});
}

function toggle_target(hide, target)
{
	if($.browser.msie && $.browser.version < 8)
		$.fx.off = true;

	if(hide)
		target.css('visibility', 'hidden');
	else
	{
		var dates = target.closest('[_search]').find('.dates').find('input[type=text],[scope=route-to]');
		var from = dates.first().datepicker('getDate');
		if(from != null)
		{
			var to = dates.last().datepicker('getDate');
			if(to != null)
			{
				if(from > to)
				{
					from.setDate(from.getDate() + 3);
					dates.last().datepicker('setDate', from);
				}
			}
		}
		target.css('visibility', 'visible');
	}
}

function toggle_train(caller)
{
	var oneWay = caller.id.endsWith('_oneWay');
	var to = $(caller).closest('[_search]').find('.dates').find('[scope=train-to]');
	if(oneWay)
		to.hide();
	else
		to.slideDown('fast');
}

function toggle_ktel(caller)
{
	var oneWay = caller.id.endsWith('_oneWay');
	
	var to = $(caller).closest('[_search]').find('.dates').find('[scope=route-to]');
	
	if(oneWay)
		to.hide();
	else
		to.show();
}

function search_ferries()
{
	var arguments = [];
	var missingTo = false;
	var box = $('div[_searchbox=yes]').find('#ferries-search');
	if(box.size() == 0)
		box = $('div[_searchbox=yes]').find('[_search=ferries]');

    var _index = $('div[_searchbox=yes] div[_search]').index($('[_search=ferries]'));
	var fromRegion = box.find('.regions').find('input[id^=from]').filter(function()
	{
		return (this.value.length > 0);
	});
	
	var toRegion = box.find('.regions').find('input[id^=to]').filter(function()
	{
		return (this.value.length > 0);
	});
	
	var args = {valid: true, message: null};
	var _return = box.find('input[id=rt1]').is(':checked');
	
	if(fromRegion.size() != 2 || toRegion.size() != 2)
	{
		args.valid = false;
		args.message = ferries_resources.FillAllTheFields;
		
		missingTo = (toRegion.size() != 2);
	}
	else
	{
		arguments.push(['fr', fromRegion.last().val()]);
		arguments.push(['tr', toRegion.last().val()]);
	}
	
	if(args.valid)
	{
		var dates = box.find('.dates').find('input[_datepicker]');
		var dateFrom = $.datepicker.formatDate('dd/mm/yy', dates.first().datepicker('getDate'));
		var dateTo = $.datepicker.formatDate('dd/mm/yy', dates.last().datepicker('getDate'));
		
		var dateFromISO = $.datepicker.formatDate('yy/mm/dd', dates.first().datepicker('getDate'));
		var dateToISO = $.datepicker.formatDate('yy/mm/dd', dates.last().datepicker('getDate'));
		
		var from_isValid = is_valid_date(dateFrom);
		var to_isValid = is_valid_date(dateTo);
		
		var message = null;
		if((dateFrom == null || dateFrom.length == 0) && (dateTo == null || dateTo.length == 0))
			message = ferries_resources.FillDatesFromTo;
		else if(dateFrom == null)
			message = ferries_resources.FillDateFrom;
		else if(dateTo == null)
			message = ferries_resources.FillDateTo;
		else if(!from_isValid && !to_isValid)
			message = ferries_resources.FillValidDatesFromTo;
		else if(_return && dateFromISO > dateToISO)
			message = ferries_resources.DepartureDateMustBeGreaterThanArrival;
		else if(!from_isValid)
			message = ferries_resources.FillValidDateFrom;
		else if(!to_isValid)
			message = ferries_resources.FillValidDateTo;
		
		if(message != null)
		{
			args.valid = false;
			args.message = message;
		}
		else
		{
			arguments.push(['ddt', $.datepicker.formatDate('yy-mm-dd', dates.first().datepicker('getDate'))]);
			arguments.push(['adt', $.datepicker.formatDate('yy-mm-dd', dates.last().datepicker('getDate'))]);
		}
	}
	
	if(!args.valid)
	{
//		alert_message(ferries_resources.Caution, args.message,
//		{
//			buttons:
//			{
//				'OK': function() {$(this).dialog('close');}
//			}
//		});
        
        $('a.listRaiser[toloader='+ missingTo +']').click();
	}
	else
	{
		arguments.push(['ret', _return.toString().toLowerCase()]);
		arguments.push(['hv', box.find('input[id=vehicle]').is(':checked').toString().toLowerCase()]);
		
		var out = $.map(arguments, function(item, index) {
			return item[0] + '=' + item[1];
		});

        var clicktags = [];
        if ($('input[type=hidden][name=ClickTag]').size() > 0)
            clicktags = $('input[type=hidden][name=ClickTag]').val().split('|');
	    var clicktag = clicktags[clicktags.length > 1 ? _index : 0];
		var qparams = $('input[type=hidden][name=QParams]').val();
        var query = out.join('&');
		var url = self != top && clicktag != null && clicktag.length > 0 ? 'http://r.viva.gr/' + clicktag : _urlMappings.itineraries + '?' + query;

		if (self != top)
        {
//		    if (typeof (qparams) != 'undefined' && qparams != '')
//		        convertToForm(url + qparams, query, '_parent');
//		    else
		        convertToForm(url, query, '_parent');
		}
		else {
		    try {
		        if (_availability != null && _availability != undefined)
		            _availability.cancelAjaxRequests(true);
		    } catch (ex) { }

		    document.location.href = url;
		}
	}
}

/* Air */
function flightCriteria()
{
	this.from		= {value: null, label: null};
	this.to			= {value: null, label: null};
	
	this.oneWay		= false;
	this.departDate	= null;
	this.returnDate	= null;
	this.flexible	= false;
	
	this.passengers =
	{
		adults: 1
		,children: 0
		,babiesNoSeat: 0
		,babiesWithSeat: 0
	};
	
	this.direct		= false;
	this.cabinType	= 'any';
	this.airlines	= null;
}

flightCriteria.create = function(opt)
{
	var out = null;

	if(opt != null)
	{
		out = new flightCriteria();

		// from value
		if (typeof (opt.from) == 'object')
			out.from = opt.from;
		else
			out.from.value = opt.from;

		// to value
		if (typeof (opt.to) == 'object')
			out.to = opt.to;
		else
			out.to.value = opt.to;

		out.oneWay = opt.oneWay;
		out.departDate = (typeof (opt.departure) == 'string' ? Date.parseJSON(opt.departDate, 'yyyy-MM-dd') : opt.departDate);
		if (!out.oneWay)
			out.returnDate = (typeof (opt.returnDate) == 'string' ? Date.parseJSON(opt.returnDate, 'yyyy-MM-dd') : opt.returnDate);

		// other options
		out.flexible = opt.flexible;
		out.passengers = opt.passengers;
		out.direct = opt.direct;
		out.cabinType = opt.cabinType;

		if(opt.airlines != null && $.isArray(opt.airlines))
			out.airlines = opt.airlines;
	}

	return out;
}

flightCriteria.prototype =
{
	toQueryString: function()
	{
		var sb = new Sys.StringBuilder();
		sb.append(String.format('from={0}', this.from.value));
		sb.append(String.format('&to={0}', this.to.value));
		sb.append(String.format('&oneWay={0}', this.oneWay.toString().toLowerCase()));
		
		sb.append(String.format('&depart={0}', Date.format('yy-mm-dd', this.departDate)));
		
		if(!this.oneWay)
			sb.append(String.format('&return={0}', Date.format('yy-mm-dd', this.returnDate)));
			
		sb.append(String.format('&flexi={0}', this.flexible.toString().toLowerCase()));
		sb.append(String.format('&passengers={0};{1};{2};{3}', this.passengers.adults, this.passengers.children, this.passengers.babiesNoSeat, this.passengers.babiesWithSeat));
		sb.append(String.format('&direct={0}', this.direct.toString().toLowerCase()));
		sb.append(String.format('&cabinType={0}', this.cabinType.toLowerCase()));
		if(this.airlines != null)
			sb.append(String.format('&airlines={0}', this.airlines.join(';')));
		
		return sb.toString();
	}
}

function getFlightCriteria()
{
	// reads all search information from searchbox
	var box = $('div[_searchbox=yes]').find('[_search=air]');
	var criteria = new flightCriteria();
	
	var regions = box.find('.regions').find('input[_autocomplete]');
	criteria.from = {value: regions.first().next('input[type=hidden]').val(), label: regions.first().val()};
	criteria.to = {value: regions.last().next('input[type=hidden]').val(), label: regions.last().val()};
	
	var dates = box.find('.dates').find('input[_datepicker]');
	criteria.oneWay = !box.find('#at1').is(':checked');
	criteria.flexible = box.find('#flexible').is(':checked');
	
	criteria.departDate = dates.first().datepicker('getDate');
	criteria.returnDate = dates.last().datepicker('getDate');
	
	var passengers = box.find('[_passengers=yes]').find('select');
	criteria.passengers =
	{
		adults: parseInt(passengers.get(0).value)
		,children: parseInt(passengers.get(1).value)
		,babiesNoSeat: parseInt(passengers.get(2).value)
		,babiesWithSeat: parseInt(passengers.get(3).value)
	}
	
	criteria.direct = box.find('#directFlights').is(':checked');
	criteria.cabinType = box.find('#cabinType').val();

	var more = box.find('div[role=air-more-criteria]');
	var airlines = more.find('select[name^=airline]:visible');
	var values = [];
	airlines.each(function()
	{
		var value = $(this).val();
		if(value != null && value != '0' && value.length > 0)
			values.push(value);
	});

	if(values != null && values.length > 0)
	{
		var out = [];
		for(var i = 0; i < values.length; i++)
		{
			var airline = values[i];
			if(Array.indexOf(out, airline) == -1)
				out.push(airline);
		}

		// set airlines
		criteria.airlines = out;
	}
	
	return criteria;
}

function search_flights()
{
	var arguments = [];
	var box = $('div[_searchbox=yes]').find('[_search=air]');
	var _index = $('div[_searchbox=yes] div[_search]').index($('[_search=air]'));

	var criteria = getFlightCriteria();
	var args = {valid: true, message: null, options: null};
	
	if(String.isNullOrEmpty(criteria.from.value) || String.isNullOrEmpty(criteria.from.label)
		|| String.isNullOrEmpty(criteria.to.value) || String.isNullOrEmpty(criteria.to.label)
			|| (!criteria.oneWay && (String.isNullOrEmpty(criteria.departDate) || String.isNullOrEmpty(criteria.returnDate)))
				|| (criteria.oneWay && String.isNullOrEmpty(criteria.departDate)))
	{
		args.valid = false;
		args.message = ferries_resources.FillInAllFields;
	}
	
	// start validation now
	if(args.valid)
	{
		var departure = Date.format('yy/mm/dd', criteria.departDate);
		var _return = Date.format('yy/mm/dd', criteria.returnDate);
		
		if(!criteria.oneWay)
		{
			if(departure > _return)
			{
				args.valid = false;
				args.message = ferries_resources.DepartureDateMustBeGreaterThanArrival;
			}

			var diff = Date.difference({interval: 'm', date1: criteria.departDate, date2: criteria.returnDate});
			if(diff.difference > 10)
			{
				args.valid = false;
				args.message = air_resources.After10MonthsDepartureNotification;
			}
		}
	}
	
	if(args.valid)
	{
		var total = (criteria.passengers.adults + criteria.passengers.children + criteria.passengers.babiesNoSeat + criteria.passengers.babiesWithSeat);
		var max = $.extend({}, {mpf: 4}, __viva);

		if(total > max.mpf)
		{
			args.valid = false;
			args.message = String.format(air_resources.PassengersThresholdNotification, max.mpf);
			args.options =
			{
				height: 120
			}
		}
		
		if(criteria.passengers.babiesNoSeat > criteria.passengers.adults)
		{
			var _buttons = {};

			_buttons[air_resources.No] = function(){$(this).dialog('close');}
			_buttons[air_resources.Yes] = function()
			{
				var box = $('div[_searchbox=yes]').find('[_search=air]');
				var passengers = box.find('[_passengers=yes]').find('select');
				var withSeat = criteria.passengers.babiesNoSeat - criteria.passengers.adults;
				
				passengers.eq(2).val(criteria.passengers.adults);
				passengers.eq(3).val(withSeat);
				
				$(this).dialog('close');
				
				// call again this method to ensure form is valid before redirect
				search_flights();
			}
			
			args.valid = false;
			args.message = air_resources.MoreBabiesThanAdultsNotification;

			args.options =
			{
				buttons: _buttons
			}
		}
	}

	if(!args.valid)
	{
		if(args.options == null) // create options fi empty
			args.options = {};

		if(args.options.buttons == null)
		{
			args.options =
			{
				height: 140
				,buttons:
				{
					OK: function(){$(this).dialog('close');}
				}
			};
		}

		// show
		alert_message(ferries_resources.Caution, args.message, args.options);
	}
	else
	{
	    var clicktags = [];
        if ($('input[type=hidden][name=ClickTag]').size() > 0)
            clicktags = $('input[type=hidden][name=ClickTag]').val().split('|');
	    var clicktag = clicktags[clicktags.length > 1 ? _index : 0];
		var qparams = $('input[type=hidden][name=QParams]').val();
		var url = self != top && clicktag != null && clicktag.length > 0 ? 'http://r.viva.gr/' + clicktag : String.format('{0}?{1}', _urlMappings.flights, criteria.toQueryString());

		if (self != top)
		{
//		    if (typeof(qparams) != 'undefined' && qparams != '')
//		        convertToForm(url + qparams, criteria.toQueryString(), '_parent');
//		    else
		        convertToForm(url, criteria.toQueryString(), '_parent');
		}
		else {
		    try {
		        if (_availability != null && _availability != undefined)
		            _availability.cancelAjaxRequests(true);
		    } catch (ex) { }

			document.location.href = url;
		}
	}
}

function toggle_criteria(caller)
{
	var target = $('div.more-criteria-container').first();
	$(caller).parent().hide('fast');
	target.slideDown('fast');

	var s = target.find('select[id^=airline]:first');
	var airlines = window['airlines'];
	var onLoad = function(data)
	{
		if(s.data('bind') == null)
		{
			// add new children
			s.append(window['airline-options-list'].join(''));
		}
	};

	if(airlines == null)
	{
		// load airlines
		loadAirlines(onLoad);
	}
	else
		onLoad(airlines);
}

function loadAirlines(callback)
{
	var onLoad = function(data)
	{
		// save items
		var items = [];
		$.each(data, function(index, item)
		{
			var item = String.format('<option value="{0}">{1}</option>', item.c, item.n);
			items.push(item);
		});

		// save data
		window['airlines'] = data;
		window['airline-options-list'] = items;

		// callback
		callback(data);
	}

	$.loadScript('/cmstemplates/vivatravelaspx/data/air/airlines.ashx', onLoad);
}

function air_validate(from, to, direction)
{
	var same = (from.hidden.val().toLowerCase() == to.hidden.val().toLowerCase());
	if(same)
	{
//		var dButtons = {};
//		dButtons[ferries_resources.OK] = function()
//		{
//			$(this).dialog('close');
//		}

//		alert_message(ferries_resources.Caution, air_resources.SameDepartureArrivalAirportNotification
//		,{
//			height: 150
//			,buttons: dButtons	
//			,close: function()
//			{
//              document.body.style.overflow = 'auto';
				var fields = (direction == 'from' ? to : (direction == 'to' ? from : null));
				if(fields != null)
				{
					fields.textbox.val('');
					fields.hidden.val('');
					
					setTimeout(function()
					{
						fields.textbox.focus();
					}, 10);
				}
//			}
//		});
	}
}

function doValidateHotels()
{
	var destination = $('input#b_destination');//.val();
	if (destination.val().length > 0 && destination.val() != destination.attr('_defaultValue'))
	{
		//$('input#doHotelsSearch').click();
		var container = destination.closest('[role=hotel-search]');
		var elements = container.find('input[type=hidden],input[type=text],input[type=checkbox]').filter(function()
		{
			return !$(this).hasClass('hasDatepicker');
		});
		
		$.each(elements, function()
		{
		});

		//var url = '/hotels?' + $.param(elements, true);
		var url = _urlMappings.hotels_booking + '?' + $.param(elements);
		var qparams = $('input[type=hidden][name=QParams]').val();

		if (self != top)
		{
		    if (typeof (qparams) != 'undefined' && qparams != '')
		        convertToForm(url + qparams, '', '_parent');
		    else
			    convertToForm(url, '', '_parent');
		}
		else
			document.location.href = url;
	}
	else
	{
		alert_message(ferries_resources.Caution, ferries_resources.PleaseFillTheDestinationNotification,
		{
			buttons:
			{
				'OK': function(){$(this).dialog('close');}
			}
		});
		return false;
	}
}

function convertToForm(url, queryString, target)
{
	var qu = {};
	
	if (queryString != null)
	{
		var pairs = queryString.split('&');
		for(var i=0; i < pairs.length; i++ )
		{
			var pair = pairs[i].split('=');
			qu[pair[0]] = pair[1];
		}
	}

    var fields = [];
    if (url.indexOf('/r.viva.gr') > -1)
    {
        fields.push('<input type="hidden" name="params" value="' + escape(queryString) + '" />');
    }
    else
    {
	    for(var i in qu)
	    {
		    fields.push('<input type="hidden" name="' + i + '" value="' + qu[i] + '" />');
	    }
    }

	// push form to page and submit
    var form = $('<form method="post" action="' + url + '" target="' + (target || '_blank') + '">' + fields.join('') + '</form>');

	$('body').append(form);

	try {
	    if (_availability != null && _availability != undefined)
	        _availability.cancelAjaxRequests(true);
	} catch (ex) { }

	form.submit();
	$('body').remove(form);
}

function _dateDiff(args)
{
	var out = {difference: null, name: null};
	var time1 = args.date1.getTime();
	var time2 = args.date2.getTime();
	var adjust = null;

	if(time2 > time1)
		adjust = (args.date2.getTimezoneOffset() - args.date1.getTimezoneOffset()) * oneMinute;
	else
		adjust = (args.date1.getTimezoneOffset() - args.date2.getTimezoneOffset()) * oneMinute;
		
	if(typeof(intervals[args.interval]) != 'undefined')
	{
		if(typeof(intervals[args.interval].units) == 'undefined')
			alert('Interval is invalid!');
		else
		{
			var diff = Math.abs(time2 - time1) - adjust;
			var timeDiff = Math.floor(diff / intervals[args.interval].units);
			if(timeDiff > 1)
				var rname = intervals[args.interval].measure + "s";
			else
				var rname = intervals[args.interval].measure;
			out = {difference: parseInt(timeDiff), name: rname};
		}
	}
	return out;
}

function HandleDestinationsModalClosing()
{
	// hide when escape pressed
	$(document).keyup(function(e)
	{
		if(e.keyCode == 27){HandleDestinationsUnblock();}
	});
	
	// hide when user clicks outside of modal
	$('.blockOverlay').click(HandleDestinationsUnblock);
	
	// hide when close clicked
	$('.ui-titlebar-custom-close').click(HandleDestinationsUnblock);
}

function HandleDestinationsUnblock()
{
	$.unblockUI(
	{
		onUnblock: function(){} 
	});
}

function setDestination(direction, label, value)
{
    var box = $('div[_searchbox=yes]').find('#ferries-search');
	if(box.size() == 0)
		box = $('div[_searchbox=yes]').find('[_search=ferries]');

	if (direction == 'to')
	{
		box.find('.regions').find('input[type^=text][id^=to]').val(label);
		box.find('.regions').find('input[type=hidden][id^=to]').val(value);
	}
	else
	{
		box.find('.regions').find('input[type^=text][id^=from]').val(label);
		box.find('.regions').find('input[type=hidden][id^=from]').val(value);
	}

	HandleDestinationsUnblock();
}

function search_cars()
{
    var url = _urlMappings.cars_booking;

    if (self != top)
    {
        //convertToForm(url, '', '_parent');
        window.open(url);
    }
    else
    {
        try {
            if (_availability != null && _availability != undefined)
                _availability.cancelAjaxRequests(true);
        } catch (ex) { }
    
        document.location.href = url;
    }
}

function search_taxi()
{
    var url = _urlMappings.taxi_home.toString();

    if (self != top)
        convertToForm(url, '', '_parent');
    else {

        try {
            if (_availability != null && _availability != undefined)
                _availability.cancelAjaxRequests(true);
        } catch (ex) { }
        
    
        document.location.href = url;
    }
}

function LoadDestinationsList(fillTo)
{
    fillTo = (fillTo == 'true');
    var value = (!fillTo ? $('#toRegionValue'):$('#fromRegionValue')).val();
	var url = '/cmstemplates/vivatravelaspx/data/ferries/destinations.ashx';
	var args = String.format('from={0}&loadTo={1}', value, fillTo);

	$.ajax(
	{
		url: url
		,dataType: 'xml'
		,data: args
		,success: function(data)
		{
			if(data != null && data.documentElement != null)
			{
				var root = data.documentElement;
				var initials = root.getAttribute('initials');
				var html = (window.ActiveXObject ? root.firstChild.text : root.firstChild.textContent);
				var slider = $('#slider');
				slider.find('ul:first').empty().append(html);

//				slider.sliderNav(
//				{
//					items : initials.split(',')
//					,arrows: false
//					,sidebar: !ie7
//				});
				
				// set event handler for elements
				slider.find('a[_value]').each(function()
				{
					var link = $(this);
					$(this).parent().click(function()
					{
						var label = link.html();
						var value = link.attr('_value');
						setDestination((fillTo ? 'to' : 'from'), label, value);
					});
				});

				// create list
				create_destinationList(slider, fillTo, value);
			}
		},
		error: function(ex, t, h)
		{
			// do nothing
			alert('error');
		}
	});
}

function create_destinationList(slider, fillTo, portid)
{
	var header = new Sys.StringBuilder();
	header.append('<table cellpadding="0" cellspacing="0" width="100%" class="dltb">');
	header.append('<tr>');
	header.append(String.format('<td><h3>{0}</h3></td>', ferries_resources.HarborsList));
	header.append('<td align="right"><a class="ui-titlebar-custom-close ui-corner-all" href="javascript:" title="close"></a></td>');
	header.append('</tr>');
	header.append('</table>');

	if (portid.length > 0)
	{
	    var fromto = (fillTo ? ferries_resources.FromCapitalTheFirst.toLowerCase() : ferries_resources.To) + ' ';
	    var port = (!fillTo ? $('#toRegion', '[_search=ferries]') : $('#fromRegion', '[_search=ferries]')).val().replace(/ς/g, '');
	    var msg = ferries_resources.OnlyPortsWithItineraries + ' ' + fromto + port;
        var filter = String.format('<input type="checkbox" id="portfilter" checked="checked" onclick="toggle_avports();" /><label for="portfilter">{0}</label>', msg);
        header.append(String.format('</div><div class="port-filter">{0}', filter));
        $('li[_filtered], li[_pfiltered]').hide();
    }

	$.blockUI(
	{
		theme:     true 
		,title:    header
		,message:  $('#HrbList')
		,themedCSS: { top: '100px' }
		,overlayCSS:
		{ 
			cursor: 'default',
			backgroundColor: '#000', 
			opacity: 0.6 
		}
    });

	var dg = $('.ui-dialog-content');

	dg.css('padding', '0px');
	
	if(dg.width() > 0)
	    $('#HrbList').css('width', dg.width());
	
	HandleDestinationsModalClosing();
}

function toggle_avports() {

    var parents = $('li[_pfiltered]');
    var childs = $('li[_filtered]');

    $('.port-filter').toggleClass('dsbl');

    if (parents.attr('_pfiltered') == 'true')
        parents.attr('_pfiltered', 'false').show();
    else
        parents.attr('_pfiltered', 'true').hide();

    if (childs.attr('_filtered') == 'true')
        childs.attr('_filtered', 'false').show();
    else
        childs.attr('_filtered', 'true').hide();
}

function campaignReadyBookingPanel() {
    // Set active tab
    var searchType = $.url.param("stype"),
        hasType = true;

    if(searchType.length == 0)
    {
        searchType = 0;
        hasType = false;
    }
    
    if (searchType.length != 0)
    {
        var searchRaiser = $('div#main-tabs ul:first li a').eq(searchType);
        var panel = $('div.tabContainer div[_panel=yes]').eq(searchType);
        var fromInput = panel.find('input#fromRegion[type^=text]');
        var fromInputHidden = panel.find('input#fromRegion' + (searchType == 1 ? 'Value' : 'Hidden') + '[type=hidden]');
        var toInput = panel.find('input#toRegion[type^=text]');
        var toInputHidden = panel.find('input#toRegion' + (searchType == 1 ? 'Value' : 'Hidden') + '[type=hidden]');

        if (searchRaiser.size() == 0 && hasType)
        {
            searchRaiser = $('#searchbox').find('a[_menu=yes]').eq(searchType);
            panel = $('#searchbox').find('div[_search]').eq(searchType);
            fromInput = panel.find('input#' + (searchType == 1 ? 'fromRegion' : 'airFrom') + '[type^=text]');
            fromInputHidden = panel.find('input#' + (searchType == 1 ? 'fromRegionValue' : 'airFromValue') + '[type=hidden]');
            toInput = panel.find('input#' + (searchType == 1 ? 'toRegion' : 'airTo') + '[type^=text]');
            toInputHidden = panel.find('input#' + (searchType == 1 ? 'toRegionValue' : 'airToValue') + '[type=hidden]');
        }

        if(searchRaiser.size() > 0)
            searchRaiser.click();

        var focusFlag = 0;

        // Set from
        var fromRegion = $.url.param("from");

        if(typeof(_fromRegionName) != 'undefined')
        {
            if (fromRegion != '' && _fromRegionName != '') {
                fromInput.focus();

                fromInput.val(_fromRegionName);
                fromInputHidden.val(fromRegion);

                focusFlag += 1;
            }
        }

        // Set to
        var toRegion = $.url.param("to");

        if(typeof(_toRegionName) != 'undefined')
        {
            if (toRegion != '' && _toRegionName != '') {
                toInput.focus();

                toInput.val(_toRegionName);
                toInputHidden.val(toRegion);

                focusFlag += 1;
            }
        }

        // Set focus (flag equals 1 when one of two inputs is empty)
        if (focusFlag == 1 && fromRegion != '')
            toInput.focus();
        else if (toRegion != '')
            fromInput.focus();

        // if both inputs filled, focus on search button
        if (focusFlag == 2)
            panel.find('a[id$=Search]').focus();
    }
}

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
$(document).ready(function()
{
    init_common_searchbox();
    campaignReadyBookingPanel();
});


function add_filter_airline(caller)
{
	var list = window['airline-options-list'];
	var add = function()
	{
		var divs = $(caller).parent().parent().find('div[role]:hidden');
		divs.first()
			.find('select')
			.empty();
		
		divs.first()
			.slideDown('fast', function()
			{
				$(this).find('select')
					.append('<option value="0">-</option>')
					.append(window['airline-options-list'].join(''));
			});
	};

	if(list == null)
		loadAirlines(add);
	else
		add();
}

function remove_filter_airline(caller)
{
	var div = $(caller).closest('div[role]');
	div.slideUp('fast', function()
	{
		var divs = $(this).parent().find('div[role]');
	});
}

/* train search here */
function getTrainSearchCriteria()
{
	var box = $('div[_searchbox=yes]').find('[_search=train]');
	var criteria = {};
	
	var regions = box.find('.regions').find('input[_autocomplete]');
	criteria.from = {value: regions.first().next('input[type=hidden]').val(), label: regions.first().val()};
	criteria.to = {value: regions.last().next('input[type=hidden]').val(), label: regions.last().val()};
	
	var dates = box.find('.dates').find('input[_datepicker]');
	criteria.oneWay = !box.find('[scope=one-way]').is(':checked');
	criteria.departDate = dates.first().datepicker('getDate');
	criteria.returnDate = dates.last().datepicker('getDate');
	
	var compact = (box.find('.dates').hasClass('train-dates-compact') || box.find('.dates').attr('compact') == 'yes');
	criteria.compact = compact;

	if(!compact)
	{
		var fields = box.find('.dates').find('[scope$=from]');
		criteria.typeFrom = fields.filter('select').val();
		criteria.timeFrom = fields.filter('input').timeEntry('getTime');

		fields = box.find('.dates').find('[scope$=to]');
		criteria.typeTo = fields.filter('select').val();
		criteria.timeTo = fields.filter('input').timeEntry('getTime');
	}

	criteria.direct = box.find('#directTrain').is(':checked');
	criteria.trainTypes = [];
	$.each(box.find('div[scope=train-types]').find('input[type=checkbox]:checked'), function(index, item)
	{
		criteria.trainTypes.push(item.value);
	});

	var passengers = box.find('[scope=train-passengers]').find('select');
	criteria.passengers =
	{
		adults: parseInt(passengers.get(0).value)
		,children: parseInt(passengers.get(1).value)
		,students: parseInt(passengers.get(2).value)
		,largefamily: parseInt(passengers.get(3).value)
	}

	return criteria;
}

function search_trains()
{
	var arguments = [];
	var box = $('div[_searchbox=yes]').find('[_search=train]');
	var _index = $('div[_searchbox=yes] div[_search]').index($('[_search=train]'));

	var criteria = getTrainSearchCriteria();
	var args = {valid: true, message: null, options: null};

	if(String.isNullOrEmpty(criteria.from.value) || String.isNullOrEmpty(criteria.from.label)
		|| String.isNullOrEmpty(criteria.to.value) || String.isNullOrEmpty(criteria.to.label)
			|| (!criteria.oneWay && (String.isNullOrEmpty(criteria.departDate) || String.isNullOrEmpty(criteria.returnDate)))
				|| (criteria.oneWay && String.isNullOrEmpty(criteria.departDate)))
	{
		args.valid = false;
		args.message = ferries_resources.FillInAllFields;
	}
	
	// start validation now
	if(args.valid)
	{
		var departure = Date.format('yy/mm/dd', criteria.departDate);
		var _return = Date.format('yy/mm/dd', criteria.returnDate);

		if(!criteria.oneWay)
		{
			if(departure > _return)
			{
				args.valid = false;
				args.message = ferries_resources.DepartureDateMustBeGreaterThanArrival;
			}
			else if(departure == _return && !args.compact)
			{
				// we have to compare these two dates
			}
		}
	}

	if(args.valid)
	{
		var passengers = criteria.passengers.adults + criteria.passengers.children + criteria.passengers.students + criteria.passengers.largefamily;
		if(passengers < 1)
		{
			args.valid = false;
			args.message = 'Πρέπει να επιλέξετε τουλάχιστον 1 επιβάτη';
		}
	}

	if(!args.valid)
	{
		if(args.options == null) // create options fi empty
			args.options = {};

		if(args.options.buttons == null)
		{
			args.options =
			{
				height: 140
				,buttons:
				{
					OK: function(){$(this).dialog('close');}
				}
			};
		}

		// show
		alert_message(ferries_resources.Caution, args.message, args.options);
	}
	else
	{
        var clicktags = [];
        if ($('input[type=hidden][name=ClickTag]').size() > 0)
            clicktags = $('input[type=hidden][name=ClickTag]').val().split('|');
	    var clicktag = clicktags[clicktags.length > 1 ? _index : 0];
		var qparams = $('input[type=hidden][name=QParams]').val();
		var url = self != top && clicktag != null && clicktag.length > 0 ? 'http://r.viva.gr/' + clicktag : String.format('{0}?{1}', _urlMappings.trains_search, trainSearchToQueryString(criteria));

		if (self != top)
		{
//		    if (typeof(qparams) != 'undefined' && qparams != '')
//		        convertToForm(url + qparams, trainSearchToQueryString(criteria), '_parent');
//			else
				convertToForm(url, trainSearchToQueryString(criteria), '_parent');
		}
		else {
		    try {
		        if (_availability != null && _availability != undefined)
		            _availability.cancelAjaxRequests(true);
		    } catch (ex) { }
		
			document.location.href = url;
		}
	}
}

function trainSearchToQueryString(args)
{
	var sb = new Sys.StringBuilder();
	sb.append(String.format('from={0}', escape(args.from.value)));
	sb.append(String.format('&to={0}', escape(args.to.value)));
	sb.append(String.format('&oneWay={0}', args.oneWay.toString().toLowerCase()));
		
	sb.append(String.format('&depart={0}', Date.format('yy-mm-dd', args.departDate)));
		
	if(!args.compact)
		sb.append(String.format('&departType={0};{1}', args.typeFrom, args.timeFrom.localeFormat('HH:mm')));

	if(!args.oneWay)
	{
		sb.append(String.format('&return={0}', Date.format('yy-mm-dd', args.returnDate)));
		if(!args.compact)
			sb.append(String.format('&returnType={0};{1}', args.typeFrom, args.timeFrom.localeFormat('HH:mm')));
	}

	sb.append(String.format('&direct={0}', args.direct.toString().toLowerCase()));
	sb.append(String.format('&passengers={0};{1};{2};{3}', args.passengers.adults, args.passengers.children, args.passengers.students, args.passengers.largefamily));

	if(args.trainTypes != null && args.trainTypes.length > 0)
		sb.append(String.format('&trainTypes={0}', args.trainTypes.join(';')));

	return sb.toString();
}

/* KTEL */
function getKtelSearchCriteria()
{
	var box = $('div[_searchbox=yes]').find('[_search=ktel]');
	var criteria = {};
	
	var regions = box.find('.regions').find('select');
	criteria.from = regions.first().val();
	criteria.to = regions.eq(1).val();
	
	var dates = box.find('.dates').find('input[_datepicker]');
	criteria.oneWay = !box.find('[scope=one-way]').is(':checked');
	criteria.departDate = dates.first().datepicker('getDate');
	criteria.returnDate = dates.last().datepicker('getDate');
	
	var compact = box.find('.dates').hasClass('train-dates-compact');
	criteria.compact = compact;

	var passengers = box.find('[scope=ktel-passengers]').find('select');
	criteria.passengers =
	{
		full: parseInt(passengers.get(0).value)
		,half: parseInt(passengers.get(1).value)
		,students: parseInt(passengers.get(2).value)
	}

	return criteria;
}

function search_ktel()
{
	var arguments = [];
	var box = $('div[_searchbox=yes]').find('[_search=ktel]');
	var _index = $('div[_searchbox=yes] div[_search]').index($('[_search=ktel]'));

	var criteria = getKtelSearchCriteria();
	var args = {valid: true, message: null, options: null};
	
	if(String.isNullOrEmpty(criteria.from) || criteria.from == '0'
		|| String.isNullOrEmpty(criteria.to) || criteria.to == '0'
			|| (!criteria.oneWay && (String.isNullOrEmpty(criteria.departDate) || String.isNullOrEmpty(criteria.returnDate)))
				|| (criteria.oneWay && String.isNullOrEmpty(criteria.departDate)))
	{
		args.valid = false;
		args.message = ferries_resources.FillInAllFields;
	}
	
	if(args.valid)
	{
		if(criteria.from == criteria.to)
		{
			args.valid = false;
			args.message = 'Ο σταθμός αναχώρησης πρέπει να είναι διαφορετικός από στον σταθμό προορισμού';
		}
	}

	// start validation now
	if(args.valid)
	{
		var departure = Date.format('yy/mm/dd', criteria.departDate);
		var _return = Date.format('yy/mm/dd', criteria.returnDate);
		
		if(!criteria.oneWay)
		{
			if(departure > _return)
			{
				args.valid = false;
				args.message = ferries_resources.DepartureDateMustBeGreaterThanArrival;
			}
		}
	}

	if(args.valid)
	{
		var passengers = criteria.passengers.full + criteria.passengers.half + criteria.passengers.students;
		if(passengers < 1)
		{
			args.valid = false;
			args.message = 'Πρέπει να επιλέξετε τουλάχιστον 1 επιβάτη';
		}
	}

	if(!args.valid)
	{
		if(args.options == null) // create options fi empty
			args.options = {};

		if(args.options.buttons == null)
		{
			args.options =
			{
				height: 140
				,buttons:
				{
					OK: function(){$(this).dialog('close');}
				}
			};
		}

		// show
		alert_message(ferries_resources.Caution, args.message, args.options);
	}
	else
	{
        var clicktags = [];
        if ($('input[type=hidden][name=ClickTag]').size() > 0)
            clicktags = $('input[type=hidden][name=ClickTag]').val().split('|');
	    var clicktag = clicktags[clicktags.length > 1 ? _index : 0];
		var qparams = $('input[type=hidden][name=QParams]').val();
		var url = self != top && clicktag != null && clicktag.length > 0 ? 'http://r.viva.gr/' + clicktag : String.format('{0}?{1}', _urlMappings.ktel_search, ktelSearchToQueryString(criteria));

		if (self != top)
		{
//		    if (typeof(qparams) != 'undefined' && qparams != '')
//		        convertToForm(url + qparams, ktelSearchToQueryString(criteria), '_parent');
//			else
				convertToForm(url, ktelSearchToQueryString(criteria), '_parent');
		}
		else {

		    try {
		        if (_availability != null && _availability != undefined)
		            _availability.cancelAjaxRequests(true);
		    } catch (ex) { }
		
			document.location.href = url;
		}
	}
}

function ktelSearchToQueryString(args)
{
	var sb = new Sys.StringBuilder();
	sb.append(String.format('from={0}', escape(args.from)));
	sb.append(String.format('&to={0}', escape(args.to)));
	sb.append(String.format('&oneWay={0}', args.oneWay.toString().toLowerCase()));
		
	sb.append(String.format('&depart={0}', Date.format('yy-mm-dd', args.departDate)));

	if(!args.oneWay)
	{
		sb.append(String.format('&return={0}', Date.format('yy-mm-dd', args.returnDate)));
	}
	 
	sb.append(String.format('&passengers={0};{1};{2}', args.passengers.full, args.passengers.half, args.passengers.students));

	return sb.toString();
}

function validate_destinations(caller)
{
	var to = $(caller).closest('.regions').find('select:last');
	var value = $(caller).val().toString();
	if (value != '0')
	{
		var url = String.format('/cmstemplates/vivatravelaspx/data/ktel/destinations.ashx?from={0}', value);
		var destinations = (window['destinations-cache'] || (window['destinations-cache'] = {}));

		var handler = function(result)
		{
			var selection = to.val();
			to.empty();

			var sb = new Sys.StringBuilder('<option value="0"></option>');
			$.each(result, function()
			{
				sb.append(String.format('<option value="{0}">{1}</option>', this.id, this.name));
			});

			to.append(sb.toString());
			to.val(selection);

			to.attr('disabled', false);

			destinations[value] = result;
		};

		to.attr('disabled', true);
		if(destinations[value] == null)
		{
			$.when($.getJSON(url))
			.then(handler);
		}
		else
			handler(destinations[value]);
	}
}
