var pageTracker;
function initialize() {
	// Pageview tracking
	pageTracker = _gat._getTracker("UA-3263331-8");
	// pageTracker._setDomainName("www.tjingo.nl");
	pageTracker._trackPageview();

	var ajax = new AjaxApp({ pageLoader: $('loading'), baseUrl: '/xml/webapp.php' });
	var app = new VkWebApp($('content').readAttribute('type'), ajax);
	VkWebApp.setInstance(app);

	app.classOptions = [
		// Global
		{cssClass: 'input[type=text]', action: fillInputHint, attributes: {} },
		{cssClass: 'textarea', action: fillInputHint, attributes: {} },
		{cssClass: 'input[type=password]', action: fillInputHint, attributes: {} },
		{cssClass: 'input.date', onclick: actionSelectDate, attributes: { } },
		{cssClass: '.window .close', onclick: closeWindow, attributes: { href: '#', title: 'Sluit venster'} },
		{cssClass: 'ul.faqs .question a', onclick: actionFaqToggle },
		{cssClass: '#aanbieders_touroperators', onchange: updateTouroperators, attribute: {} },
		{cssClass: '#aanbieders_countries', onchange: updateCountries, attribute: {} },

		// content disclaimer
		{cssClass: '#disclaimer a', onclick: actionLoadContentDisclaimer, attributes: { href: '#' } },

		// name search
		{cssClass: 'ul a.select_options', onclick: clickSearchNameResult, attributes: {} },

		// login
		{cssClass: 'a.login', onclick: actionLoadLogin, attributes: { title: 'Inloggen' } },
		{cssClass: 'input.login', onclick: actionLogin, attributes: { title: 'Inloggen' } },
		{cssClass: 'a.logout', onclick: actionLogout, attributes: { href: '#', title: 'Uitloggen' } },

		// signup
		{cssClass: 'a.signup', onclick: actionLoadSignup, attributes: { href: '#' } },
		{cssClass: '.cardholder input', onblur: actionSetCardholderInfo, attributes: {} },
		{cssClass: '.cardholder select', onchange: actionSetCardholderInfo, attributes: {} },
		{cssClass: 'input.button.signup', onclick: actionSignUpCardholder, attributes: {} },

		// invite users
		{cssClass: '.button.invite', onclick: actionSendInvites, attributes: {} },

		// request number
		{cssClass: 'a.requestnumber', onclick: actionLoadRequestNumber, attributes: { href: '#', title: 'Login vergeten?' } },
		{cssClass: 'input.requestnumber', onclick: actionRequestNumber, attributes: { title: 'Login opvragen' } },

		// selection options
		{cssClass: '.options select', onchange: actionAddCriteria, attributes: { } },
		{cssClass: '.selectionlist li a', onclick: actionRemoveCriteria, attributes: { href: '#' } },
		{cssClass: '.clear_selection', onclick: actionClearCriteria, attributes: { href: '#' } },

		// search results
		{cssClass: '.accommodations li.accommodation', onclick: actionRedirect.curry('li'), attributes: { } },
		{cssClass: '.select_price', onclick: actionSelectPrice, attributes: {href: '#'} },

		// imagegallery
		{cssClass: '.imagegallery', action: initializeGallery },
		{cssClass: '.imagegallery ul', onclick: actionLoadImage },

		// Price table
		{cssClass: 'table a.pricetable_scroll', onclick: actionPriceTableScroll, attributes: { href: '#'} },
		{cssClass: '.priceoptions select', onchange: actionPriceTableUpdate, attributes: { } },
		{cssClass: 'div.dateslider', action: initializePriceTableSlider.curry(42) },
		{cssClass: 'div.dateslider .months', onclick: actionSetPriceTableSlider },

		// Price breakdown
		{cssClass: '.pick_persons select', onchange: actionSetPersons, attributes: {title: 'Selecteer personen'} },
		{cssClass: '.pick_persons input', onblur: actionSetBirthdate, attributes: { } },

		{cssClass: '.addroom', onclick: actionAddRoom, attributes: {href: '#', title: 'Kamer toevoegen'} },
		{cssClass: '.setroom', onchange: actionSetRoom, attributes: {title: 'Kamer aantal kiezen'} },
		{cssClass: '.removeroom', onclick: actionRemoveRoom, attributes: {href: '#', title: 'Kamer verwijderen'} },

		{cssClass: '.pick_housing input', onclick: actionAssignRoom, attributes: {title: 'Wijs persoon toe'} },

		{cssClass: '.pick_to input', onclick: actionSetTransport.curry('to', 'setTransportTo'), attributes: {title: 'Selecteer transport'} },
		{cssClass: '.pick_to select', onchange: actionSetTransport.curry('to', 'setTransportTo'), attributes: {title: 'Selecteer klasse'} },
		{cssClass: '.pick_from input', onclick: actionSetTransport.curry('from', 'setTransportFrom'), attributes: {title: 'Selecteer transport'} },
		{cssClass: '.pick_from select', onchange: actionSetTransport.curry('from', 'setTransportFrom'), attributes: {title: 'Selecteer klasse'} },
		{cssClass: '.train .toggle a', onclick: actionToggleScheme.curry('toggled'), attributes: { } },

		{cssClass: '.check_price', onclick: actionLoadPriceBreakdown, attributes: {title: 'Bekijk prijsspecificatie'} },
		{cssClass: '.booktrip', onclick: actionStartBookTrip, attributes: {title: 'Deze reis boeken'} },
		{cssClass: '.invoiceroute', onclick: actionRequestInvoice },

		// invoice route
		{cssClass: '.invoicetype input', onclick: actionSubmitForm },
		{cssClass: 'select.touroperator_select', onchange: actionLoadTouroperatorComment },
		{cssClass: '#correct', onclick: actionShowBooksteps },
		{cssClass: '#incorrect', onclick: actionShowDenied },
		{cssClass: '#invoice_reject .back', onclick: actionShowQuestion },
		{cssClass: '#invoice_accept .back', onclick: actionShowQuestion },
		{cssClass: '#rejectoptions a', onclick: actionSelectRejectOption },

		// book route
		{cssClass: '.personinfo input', onblur: actionSetTravelerInfo, attributes: {} },
		{cssClass: '.personinfo select', onchange: actionSetTravelerInfo, attributes: {} },
		{cssClass: '.add_traveler', onclick: actionAddTraveler, attributes: {} },
		{cssClass: '.remove_traveler', onclick: actionRemoveTraveler, attributes: {} },
		{cssClass: '.coupon select', onchange: actionSetCoupon, attributes: {} },
		{cssClass: 'input.travel', onclick: actionSetInsurance, attributes: {} },
		{cssClass: 'input.person', onclick: actionSetInsurancePerson, attributes: {} },
		{cssClass: 'input.cancel', onclick: actionSetInsurance, attributes: {} },

		// dossier
		{cssClass: 'tr.pick_invoice', onclick: actionPickInvoice },
		{cssClass: '#messagehistory li', onclick: toggleMessage }
	];

	app.parseSelectors($('container'));
	// app.parseSelectors($('dossier'));
	// app.parseSelectors($('mainmenu'));
	app.parseSelectors($('popup_window'));
	app.parseSelectors($('messages'));
	// loadCheckMyData.bind(app)();

	// FIX ie dangling selection in search
	if (app.currentPage == 'search') {
		var jar = new CookieJar();
		var cached = jar.get('searchcached');

		if (cached == 1) {
			app.loadContent('loadSelection', $('selection'));
			app.loadContent('loadSearchresults', $('searchresults'));
			app.process();
		}

		jar.put('searchcached', 1);
	}
}

function unloadAll() {
	googlemap = null;
	baseIcon = null;
	carousel = null;
	calendar = null;
	if (GUnload) {
		GUnload();
	}
}

document.observe('dom:loaded', initialize);
document.observe('unload', unloadAll);

/* small section funcs */
// var googlemap = null;
// var baseIcon = null;
var iconImage = null;
var highlightImage = null;
var shadowImage = null;
function initializeGoogleMapBase(element, center) {
	$(element).show();

	if (iconImage == null) {
		iconImage = new google.maps.MarkerImage('http://media.tjingo.nl/www/images/googlemap-icon.png', new google.maps.Size(31, 47), new google.maps.Point(0, 0), new google.maps.Point(16, 45));
		highlightImage = new google.maps.MarkerImage('http://media.tjingo.nl/www/images/googlemap-icon-highlight.png', new google.maps.Size(31, 47), new google.maps.Point(0, 0), new google.maps.Point(16, 45));
		shadowImage = new google.maps.MarkerImage('http://media.tjingo.nl/www/images/googlemap-icon-shadow.png', new google.maps.Size(52, 56), new google.maps.Point(0, 0), new google.maps.Point(16, 45));
	}

	var centerLL = new google.maps.LatLng(0,0);
	var centerZoom = 13;
	if (!Object.isUndefined(center)) {
		centerLL = new google.maps.LatLng(center.lat, center.lng);
		centerZoom = center.zoom;
	}

	var options = {
		zoom: centerZoom,
		scrollwheel: false,
		center: centerLL,
		mapTypeId: google.maps.MapTypeId.HYBRID,
		mapTypeControl: true,
		mapTypeControlOptions: { position: google.maps.ControlPosition.TOP_RIGHT, style: google.maps.MapTypeControlStyle.DEFAULT, mapTypeIds: [google.maps.MapTypeId.ROADMAP, google.maps.MapTypeId.SATELLITE, google.maps.MapTypeId.HYBRID] },
		scaleControl: true,
		scaleControlOptions: { position: google.maps.ControlPosition.BOTTOM_LEFT, style: google.maps.ScaleControlStyle.DEFAULT },
		navigationControl: true,
		navigationControlOptions: { position: google.maps.ControlPosition.TOP_LEFT, style: google.maps.NavigationControlStyle.DEFAULT }
	};

	return new google.maps.Map(element, options);
}

function initializeGoogleMap(element, center, markers) {
	var googlemap = initializeGoogleMapBase(element, center);

	if (markers !== null) {
		for(var i=0, len = markers.length; i<len; ++i) {
			marker = markers[i];
			googleMapAddMarker(googlemap, marker.name, marker.lat, marker.lng);
		}
	}
}

function googleMapAddMarker(googleMap, title, lat, lng) {
	return new google.maps.Marker({
		position: new google.maps.LatLng(lat, lng),
		map: googleMap,
		icon: iconImage,
		shadow: shadowImage,
		title: title
	});
}

var currentMarker = null;
var listContainer = null;
var listMarkers = [];
function initializeGoogleMapList(element, center, markers) {
	var googlemap = initializeGoogleMapBase(element, center);

	if (markers !== null) {
		listContainer = element.up().down('.container');
		var elements = listContainer.select('li');

		for(var i=0, len = markers.length; i<len; ++i) {
			var index = listMarkers.length;

			marker = markers[i];
			var tmpmarker = googleMapAddMarker(googlemap, marker.name, marker.lat, marker.lng);

			google.maps.event.addListener(tmpmarker, 'click', markerSelect.curry(tmpmarker));

			var tmpelement  = elements[index];
			Element.observe(tmpelement, 'click', listItemSelect.curry(tmpelement));

			listMarkers[index] = { marker: tmpmarker, element: tmpelement, content: marker.content, infoWindow: marker.infoWindow };

			if (marker.selected) {
				showInfoWindow(listMarkers[index].marker, listMarkers[index].infoWindow);
				gotoMarker(listMarkers[index]);
			}
		}
	}
}

function listItemSelect(element, event) {
	var listMarker = null;
	for(var i=0,len=listMarkers.length;i < len;++i) {
		if (listMarkers[i].element === element) {
			listMarker = listMarkers[i];
			break;
		}
	}

	showInfoWindow(listMarker.marker, listMarker.infoWindow);
	if (currentMarker != listMarker) {
		gotoMarker(listMarker);
	}

	// Event.stop(event);
}

function markerSelect(marker, event) {
	var listMarker = null;
	for(var i=0,len=listMarkers.length;i < len;++i) {
		if (listMarkers[i].marker === marker) {
			listMarker = listMarkers[i];
			break;
		}
	}

	showInfoWindow(listMarker.marker, listMarker.infoWindow);
	if (currentMarker != listMarker) {
		gotoMarker(listMarker);
		Event.stop(event);
	}
}

function gotoMarker(listMarker) {
	if (listMarker !== null) {
		new Effect.Tween(listContainer, listContainer.scrollTop, Element.positionedOffset(listMarker.element).top - (listContainer.getHeight() * 0.5), { duration: 0.5 }, 'scrollTop');
		listMarker.marker.getMap().panTo(listMarker.marker.getPosition());

		if (currentMarker !== null) {
			Element.toggleClassName(currentMarker.element, 'selected');
			currentMarker.marker.setIcon(iconImage);
			currentMarker.marker.setZIndex(null);
		}

		Element.toggleClassName(listMarker.element, 'selected');
		listMarker.marker.setIcon(highlightImage);
		listMarker.marker.setZIndex(1000);

		currentMarker = listMarker;
	}
}

var infoWindow = null;
function showInfoWindow(marker, content) {
	if (content.length > 0) {
		if (infoWindow != null) infoWindow.close();

		infoWindow = new google.maps.InfoWindow({
			content: content,
			pixelOffset: new google.maps.Size(0, 20)
		});

		infoWindow.open(marker.getMap(), marker);
	}
}

/**
 * Load clicked image
 */
var current = null;
var gallery = null;
function initializeGallery(element) {
	gallery = element;
}

function getGalleryHtml() {
	var galleryHtml = new Element('div', {'class': 'gallery'} );

	var previous = new Element('div', {'class': 'button previous disabled'});
	previous.observe('click', previousImage);
	galleryHtml.appendChild(previous);

	var next = new Element('div', {'class': 'button next disabled'})
	next.observe('click', nextImage);
	galleryHtml.appendChild(next);

	var image = new Element('img', {'id': 'galleryimage'});
	galleryHtml.appendChild(image);
	image.observe('click', function() { this.up('.popup').hide(); } );

	return galleryHtml;
}


function nextImage() {
	showImage(gallery, current.next());
}

function previousImage() {
	showImage(gallery, current.previous());
}

function showImage(gallery, element) {
	if (element) {
		$('galleryimage').src = null;
		$('galleryimage').src = 'http://media.tjingo.nl/imagecache/?type=shrink&width=570&height=386&image=' + element.readAttribute('value');

		current = element;

		var previous = current.previous();
		var next = current.next();

		var galHtml = $('galleryimage').up();
		if (previous) {
			galHtml.down('.previous').removeClassName('disabled');
		}
		else {
			galHtml.down('.previous').addClassName('disabled');
		}

		if (next) {
			galHtml.down('.next').removeClassName('disabled');
		}
		else {
			galHtml.down('.next').addClassName('disabled');
		}
	}
}

function actionLoadImage(event) {
	var element = Event.findElement(event, 'li');

	if (!Object.isUndefined(element)) {
		$('popup_window').show();
		$('popup_window').down('.window').setStyle({ width: '610px', height: '426px', top: '200px'} );
		
		var g = getGalleryHtml();
		$('popup_window').down('.content').update(g);

		showImage(g, element);
	}

	Event.stop(event);
}

/**
 * Initialize help-icons
 */
function initializeHelp(element) {
	// element.style.display = 'inline'; // toggle doesnt work on CSS specified display: none.
	element.addClassName('helpicon');
	element.observe('mouseout', hideHelp);
}

function hideHelp() {
	$('help').hide();
}

/**
 * Set message
 */
function setMessage(message) {
	$('messages').show();
	$('messages').down('.texts').update(message);
}

/**
 * Clear messages
 */
function clearMessages() {
	$('messages').down('.texts').update('');
	$('messages').hide();
}

function actionSubmitForm(event) {
	var element = event.findElement('form');
	element.submit();
}

function actionBookmark(hash, event) {
	Effect.ScrollTo(hash);
	// location.hash = hash;
}

/**
 * Global
 */
function actionFaqToggle(event) {
	var element = event.element().up('li');
	if (element.hasClassName('collapsed')) {
		element.removeClassName('collapsed');
	}
	else {
		element.addClassName('collapsed');
	}

	Event.stop(event);
}

function updateTouroperators() {
	var country = $('aanbieders_countries').value;
	var touroperator = $('aanbieders_touroperators').value;
	var url = "/aanbieders/";
	if(country != -1)
	{
		url += country + '/';
	}
	if(touroperator != -1)
	{
		url += touroperator + '/';
	}
	location.href = url;
}

function updateCountries()
{
	var country = $('aanbieders_countries').value;
	var touroperator = $('aanbieders_touroperators').value;
	var url = "/aanbieders/";
	if(country != -1)
	{
		url += country + '/';
	}
	if(touroperator != -1)
	{
		url += touroperator + '/';
	}
	location.href = url;
}

/**
 * Close button on the popups
 */
function closeWindow(event) {
	Event.element(event).up('.popup').hide();
	Event.stop(event);
}

/**
 * Redirect to option string
 */
function actionRedirect(elementTag, event) {
	location.href = 'http://' + location.hostname + event.findElement(elementTag).readAttribute('value');
	Event.stop(event);
}

function actionAddCriteria(event) {
	var element = event.element();

	var app = VkWebApp.getInstance();
	app.deferAction('addCriteria', cbAddCriteria, {criteria: element.name, value: element.value});
	app.loadContent('loadSelection', $('selection'));
	app.loadContent('loadSearchresults', $('searchresults'));
	app.process();

	Event.stop(event);
}

function cbAddCriteria() {
	// location.href = location.protocol + '//' + location.host + '/zoek-en-boek';
}

function actionRemoveCriteria(event) {
	var element = event.element();

	var app = VkWebApp.getInstance();
	app.deferAction('removeCriteria', cbRemoveCriteria, {criteria: element.readAttribute('type'), value: element.readAttribute('value')});
	app.loadContent('loadSelection', $('selection'));
	app.loadContent('loadSearchresults', $('searchresults'));
	app.process();

	Event.stop(event);
}

function cbRemoveCriteria() {
	// location.href = location.protocol + '//' + location.host + '/zoek-en-boek';
}

function actionClearCriteria(event) {
	var app = VkWebApp.getInstance();
	app.deferAction('clearCriteria', cbClearCriteria, {});
	app.loadContent('loadSelection', $('selection'));
	app.loadContent('loadSearchresults', $('searchresults'));
	app.process();

	Event.stop(event);
}

function cbClearCriteria() {
	// location.href = location.protocol + '//' + location.host + '/zoek-en-boek';
}

/**
 * Pick date in SelectionOptions
 */
function actionPickDate(event) {
	if (event.keyCode == Event.KEY_RETURN) {
		var parts = location.pathname.split(',');
		var subparts = parts[0].split('/');
		subparts.shift(); // url
		subparts.shift(); // /vakantie/
		parts[0] = subparts.pop();

		var date = Date.parse(event.element().value);

		parts[0] = '';
		if (date instanceof Date) {
			parts[0] = date.format('ddmmyyyy');
		}

		subparts[subparts.length] = parts.join(',');
		location.href = 'http://' + location.hostname + '/bestemmingen/' + subparts.join('/');
	}
}

/**
 * Pick price range in SelectionOptions
 */
function actionPickPriceRange(prefix, infix, postfix, event) {
	if (event.keyCode == Event.KEY_RETURN) {
		var parts = location.pathname.split(',');
		var subparts = parts[0].split('/');
		subparts.shift(); // url
		subparts.shift(); // /vakanties/
		parts[0] = subparts.pop();

		var element = event.element().up();
		var min = element.down('input[name=pricemin]').value;
		var max = element.down('input[name=pricemax]').value;

		if (min.length > 0 || max.length > 0) {
			if (min.length==0) min = '0';
			if (max.length==0) max = '9999';

			parts[2] = [prefix, min, infix, max, postfix].join('');
			subparts[subparts.length] = parts.join(',');
			location.href = 'http://' + location.hostname + '/bestemmingen/' + subparts.join('/');
		}
	}
}

 /**
 * Redirects to the vakantie page with the given optionstring in a value attribute.
 */
function actionPickOptionString(event) {
	var element = event.findElement('*[value]');
	if (element != null) {
		location.href = 'http://' + location.hostname + '/vakantie/' + element.readAttribute('value');
		Event.stop(event);
	}
}

function clickSearchNameResult(event) {
	var element = event.element().up('form').down('input[name=accommodationname]');

	// track accommodation search
	pageTracker._trackPageview(location.pathname + '?accommodationname=' + element.value);
}

/**
 * Initialize scal. Scal only needs one "variable", even to show it multiple times.
 */
var calendar = null;
function actionSelectDate(event) {
	var el = Event.element(event);
	var pick = $('datepick');

	var offset = el.cumulativeOffset();
	pick.style.left = offset[0] + 'px';
	pick.style.top = offset[1] + el.getHeight() + 'px';
	pick.show();

	if (calendar == null) {
		var options = Object.extend({
			updateformat: 'dd-mm-yyyy',
			titleformat: 'mmmm yyyy',
			closebutton: '',
			dayheadlength: 2,
			weekdaystart: 0,
			planner: false
		});

		calendar = new scal(pick, Prototype.emptyFunction, options);

		document.observe('click', toggleCalendar);
	}

	// scal
	calendar.updateelement = Prototype.emptyFunction;
	if (el.value!=='' && el.value!==null) {
		var d = Date.parse(el.value);
		if (d instanceof Date) {
			calendar.setCurrentDate(d);
			el.value = d.format('dd-mm-yyyy');
		}
	}
	calendar.updateelement = updateDate.curry(el);
	// calendar.updateelement = el;

	// new CalendarDateSelect( Event.element(event), test );
}

/**
 * Update date callback
 */
function updateDate(el, d) {
	el.activate();
	el.value = d.format('dd-mm-yyyy');
	calendar.toggleCalendar();
	// actionPickDate(el.fire('change'));
	el.focus();
}

/**
 * Toggle calendar show / hide
 */
function toggleCalendar(event) {
	var element = event.element();

	if (!element.hasClassName('date') && !element.up('.scal')) {
		if (calendar instanceof scal) {
			if (calendar.isOpen()) calendar.toggleCalendar();
		}
	}
}

/**
 * Input elements with a hint attribute are "filled" with a hint attribute
 */
function fillInputHint(element) {
	var hint = element.readAttribute('hint');
	if (hint!==null && element.visible()) {
		var hintEl = new Element('SPAN');
		hintEl.addClassName('hint');
		hintEl.update(hint);

		var wrapper = new Element('SPAN');
		wrapper.setStyle( { 'position': 'relative', 'float': element.getStyle('float'), 'display': element.getStyle('display') } );
		// wrapper.setStyle( { 'display': element.getStyle('display') } );

		Element.wrap(element, wrapper);
		wrapper.appendChild(hintEl);

		element.observe('focus', clearHint);
		element.observe('blur', showHint);
		hintEl.observe('click', clearHint);

		if (element.value.length > 0) {
			hintEl.hide();
		}
	}
}

/**
 * Clears the hint in the input field
 */
function clearHint(event) {
	var wrapper = event.element().up();
	wrapper.down('.hint').hide();
	wrapper.down('input').focus();
	Event.stop(event);
}

/**
 * Shows the hint in the input field
 */
function showHint(event) {
	var wrapper = event.element().up();
	if (wrapper.down('input').value.length == 0) {
		wrapper.down('.hint').show();
	}
	Event.stop(event);
}

/**
 * Login
 */
function actionLoadLogin(event) {
	$('popup_window').show();
	$('popup_window').down('.window').setStyle({ width: '350px', height: '135px', top: '200px'} );
	$('popup_window').down('.content').update('');

	var app = VkWebApp.getInstance();
	app.loadContent('loadLoginForm', $('popup_window').down('.content'));
	app.process();

	Event.stop(event);
}

function actionLogin(event) {
	var form = Event.element(event).form;
	var name = form.name;

	var params = {username: form.elements[name + '[username]'].value, password: form.elements[name + '[password]'].value};

	var app = VkWebApp.getInstance();
	app.deferAction('login', cbLogin, params);
	app.loadContent('loadMainmenu', $('mainmenu'));

	if (app.currentPage == 'booktrip') {
		app.loadContent('loadCardholder', 'cardholder');
	}

	app.process();

	Event.stop(event);
}

function cbLogin(value) {
	if (value.state=='fail') {
		setMessage(value.messages.join('<br/>'));
	}
	else {
		// loadCheckMyData.bind(VkWebApp.getInstance())();
		$('popup_window').hide();

		var app = VkWebApp.getInstance();

		if (app.currentPage == 'dossier') {
			window.location.reload();
			// location.href = location.href;
		}
		else {
			setMessage(value.messages.join("<br />"));
		}
	}
}

/**
 * Logout
 */
function actionLogout(event) {
	var app = VkWebApp.getInstance();
	app.deferAction('logout', cbLogout);
	app.loadContent('loadMainmenu', $('mainmenu'));

	if (app.currentPage == 'booktrip') {
		app.loadContent('loadCardholder', 'cardholder');
	}

	app.process();

	Event.stop(event);
}

function cbLogout(value) {
	var app = VkWebApp.getInstance();
	if (app.currentPage == 'dossier') {
		window.location.reload();
		// location.href = location.href;
	}
}

/**
 * Request number
 */
function actionLoadRequestNumber(event) {
	// Event.stop(event);
	$('popup_window').show();
	$('popup_window').down('.window').setStyle({ width: '350px', height: '145px', top: '200px'} );
	$('popup_window').down('.content').update('');

	var app = VkWebApp.getInstance();
	app.loadContent('loadRequestNumberForm', $('popup_window').down('.content'));
	app.process();

	Event.stop(event);
}

function cbShowRequest(element) {
	VkWebApp.getInstance().parseSelectors(element);
}

function actionRequestNumber(event) {
	var form = Event.element(event).form;
	var name = form.name;

	var app = VkWebApp.getInstance();
	app.deferAction('requestNumber', cbRequestNumber, {email: form.elements[name + '[email]'].value});
	app.process();

	Event.stop(event);
}

function cbRequestNumber(value) {
	if (value.state=='fail') {
		setMessage(value.messages.join('<br />'));
		actionLoadLogin(null);
	}
	else {
		if (value.messages.length > 0) setMessage(value.messages.join('<br />'));
	}
}

/**
 * Signup load form
 */
function actionLoadSignup(event) {
	$('popup_window').show();
	$('popup_window').down('.window').setStyle({ width: '765px', height: 'auto', top: '40px'} );
	$('popup_window').down('.content').update('');

	var app = VkWebApp.getInstance();
	app.loadContent('loadSignupWindow', $('popup_window').down('.content'));
	app.loadContent('loadSignupForm', 'signup_content');
	app.process();

	pageTracker._trackPageview(location.pathname + '?signuppopup');

	Event.stop(event);
}

/**
 * Set cardholder info
 */
function actionSetCardholderInfo(event) {
	var element = Event.element(event);
	var parts = (element.name + '[').split('[');
	var name = parts[parts.length-2].split(']')[0];

	if (name.length > 0 && name!='akkoord') {
		var notification = element.up('tr').down('.required');

		// var values = getCardholderInfo(element.form, [name]);
		var options = {};
		options[name] = element.value;

		var app = VkWebApp.getInstance();
		app.loadContent('setCardholder', notification, options );
		app.process();
	}

	Event.stop(event);
}

/**
 * Signup cardholder
 */
function actionSignUpCardholder(event) {
	var element = Event.element(event);
	element.disable(); // disable the submit, so we cannot multi submit the form ;)

	var form = element.form;

	var values = {};
	var elements = $('signup_content').select('.cardholder .summary select,.cardholder .summary input')
	for(var i=0, length = elements.length; i < length; ++i) {
		var myelement = elements[i];
		var parts = (myelement.name + '[').split('[');
		var name = parts[parts.length-2].split(']')[0];
		values[name] = myelement.value;
	}

	var app = VkWebApp.getInstance();
	app.deferAction('setCardholder', null, values );
	app.deferAction('signUp', cbSignUp.curry(element), { agreed: form.elements['signupForm[akkoord]'].checked, emailcheck: form.elements['signupForm[emailcheck]'].value } );
	app.process();

	Event.stop(event);
}

/**
 * Signup callback
 */
function cbSignUp(element, value) {
	element.enable();

	if (value.state=='fail') {
		setMessage(value.messages.join(', '));
	}
	else {
		$('signup_notification').update(value.messages);
		// $('popup_window').down('.signupcontent').update(value.messages);

		var app = VkWebApp.getInstance();
		// app.loadContent('loadInviteForm', 'signup_content');
		app.loadContent('loadSignupThanks', 'signup_content');
		app.process();

		pageTracker._trackPageview(location.pathname + '?signuppopupthankyou');
	}
}

/**
 * Send invites
 */
function actionSendInvites(event) {
	var form = Event.element(event).form;
	var names = [];
	var emails = [];

	for(var i=0;i<5;++i) {
		names[i] = form.elements['inviteForm[name][' + i + ']'].value;
		emails[i] = form.elements['inviteForm[email][' + i + ']'].value;
	}

	var app = VkWebApp.getInstance();
	app.deferAction('sendInvite', cbSendInvite.curry(form), { name: names, email: emails} );
	app.process();

	Event.stop(event);
}

/**
 * Send invite callback
 */
function cbSendInvite(form, value) {
	if (value.state=='fail') {
		setMessage(value.messages.join(', '));
	}
	else {
		for(var i=0;i<5;++i) {
			form.elements['inviteForm[name][' + i + ']'].value = '';
			form.elements['inviteForm[email][' + i + ']'].value = '';
		}

		var app = VkWebApp.getInstance();
		app.loadContent('loadInviteThanks', 'signup_content');
		app.process();

		$('signup_notification').update(value.messages);
		pageTracker._trackPageview(location.pathname + '?invitethankyou');
	}
}

/**
 * get cardholder info from a form
 */
function getCardholderInfo(form, fields) {
	var formname = form.readAttribute('name');

	var items = $H({
		gender: formname + '[gender]',
		initials: formname + '[initials]',
		nameaddition: formname + '[joint]',
		lastname: formname + '[lastname]',
		birthdate: formname + '[birthdate]',
		address: formname + '[address]',
		postalcode: formname + '[postalcode]',
		city: formname + '[city]',
		telephone: formname + '[telephone]',
		email: formname + '[email]'
	});

	if (Object.isUndefined(fields)) fields = ['sex', 'initials', 'joint', 'lastname', 'birthdate', 'address', 'postalcode', 'city', 'telephone', 'email'];

	var values = $H();

	var el;
	var elements = form.elements; // form.getElements();

	items.each(function(pair) {
		el = elements[pair.value];
		if (fields.indexOf(pair.key)>-1) {
			values.set(pair.key, el.value);
		}
	}.bind(this));

	// VkWebApp.getInstance().loadContent('setCardholder', notification, values.toObject() ); // , actionAfter: cbSetCardHolderInfo.bind(this, elements, items)
	return values;
}

/**
 * Initialize Pricetable dateslider
 */
var sliding;
var slider;
function initializePriceTableSlider(monthWidth, element) {
	var factor = monthWidth / 30;
	var months = element.down('.months').select('li');
	var total = 0;
	for(var i=0, len = months.length;i<len;++i) {
		var month = months[i];
		var value = month.readAttribute('value');
		month.setStyle( { width: Math.round(factor * value) + 'px'} );
		total += month.getWidth();
	}

	sliding = false;
	slider = element.down('.slider');
	var sliderValue = Math.round((total * element.readAttribute('value')) / 365);
	slider.setStyle( { 'left': sliderValue + 'px' } );
	slider.observe('mousedown', sliderStartDrag);
	document.observe('mouseup', sliderStopDrag);
	document.observe('mousemove', actionMovePriceTableSlider);
}

/**
 * Start dragging
 */
function sliderStartDrag(event) {
	sliding = true;
	Event.stop(event);
}

/**
 * Stop dragging
 */
function sliderStopDrag(event) {
	if(sliding) {
		sliding = false;
		loadPriceTableForSlider();
	}
}

function actionSetPriceTableSlider(event) {
	sliding = true;
	actionMovePriceTableSlider(event);
	sliding = false;

	loadPriceTableForSlider();
	Event.stop(event);
}

function actionMovePriceTableSlider(event) {
	if (sliding) {
		var element = slider.up('.dateslider').down('ul');
		var offset = element.cumulativeOffset();
		var width = element.getWidth();
		var sliderWidth = slider.getWidth();
		var maxWidth = slider.up('.dateslider').getWidth() - sliderWidth;

		offset.left = event.pointerX() - offset.left - (sliderWidth / 2);

		if (offset.left < 0) offset.left = 0;
		if (offset.left > maxWidth) offset.left = maxWidth;

		slider.setStyle( { left: offset.left + 'px' } );
		Event.stop(event);
	}
}

function loadPriceTableForSlider() {
	var days = Math.round(365 * (slider.offsetLeft / slider.up('.dateslider').down('ul').getWidth()));
	var date = new Date();
	// date.setMonth(1);
	date.setDate(days + 2); // keep borders in mind?

	var string = date.format('ddmmyyyy') + '-';

	date.setDate(days + 16); // keep borders in mind?

	string += date.format('ddmmyyyy');

	var app = VkWebApp.getInstance();
	app.deferAction('setPriceTableOptions', null, { options: [ { name: 'daterange', value: string } ] } );
	app.loadContent('loadPriceTable', $('pricetable') );
	app.process();
}

/**
 * Pricetable dateslider
 */
function actionPriceTableScroll(event) {
	var element = Event.element(event);

	if (element.tagName!='A') element = element.up('a');

	// this.ajax('loadSearchResults', $('searchresults'), {options: [{name: 'daterange', value: element.readAttribute('value')}]});
	var app = VkWebApp.getInstance();
	app.deferAction('setPriceTableOptions', null, { options: [ { name: 'daterange', value: element.readAttribute('value') } ] } );
	app.loadContent('loadPriceTable', $('pricetable') );
	app.process();

	Event.stop(event);
}

function actionPriceTableUpdate(event) {
	var element = Event.element(event);

	var name = element.name.split('[')[1].split(']')[0];

	// this.loadContent('loadSearchResults', $('searchresults'), {options: [{name: name, value: element.value}] });
	var app = VkWebApp.getInstance();
	app.deferAction('setPriceTableOptions', null, { options: [ { name: name, value: element.value } ] } );
	app.loadContent('loadPriceTableOptions', $('priceoptions') );
	app.loadContent('loadPriceTable', $('pricetable') );
	app.process();

	$('bookstep').update('');

	Event.stop(event);
}

/**
 * Select a certain price
 */
function actionSelectPrice(event) {
	var app = VkWebApp.getInstance();

	// Fix this :P
	app.ajax.options.set('pageLoader', $('loading_large'));

	app.deferAction('pickPrice', null, { id: Event.element(event).readAttribute('value') } );
	app.loadContent('loadPriceTable', $('pricetable'));
	app.loadContent('loadBookStep', $('bookstep'));
	app.deferAction('doPriceCheck', cbPriceCheck);
	app.loadContent('loadPickPersons', 'persons');
	app.loadContent('loadPickRoomType', 'roomtype');
	app.loadContent('loadPickTransport', 'transport');
	app.loadContent('loadPickExtra', 'extras');
	app.process();

	Event.stop(event);
}

function cbPriceCheck(value) {
	var app = VkWebApp.getInstance();
	app.ajax.options.set('pageLoader', $('loading'));
	$('loading_large').hide();

	if (value.state=='fail') {
		$('persons').hide();
		$('roomtype').hide();
		$('transport').hide();
		$('extras').hide();

		$('calculateprice').hide();
		$('pricebreakdown').hide();
		$('startbooktrip').hide();
		if (value.action == 'onrequest') {
			setMessage(value.messages.join('<br/>'));
			// $('booktrip_notification').update(value.messages.join('<br/>'));
			// $('booktrip_notification').show();

			$('requestinvoice').show();
		}
		else {
			setMessage(value.messages.join('<br/>'));
			$('requestinvoice').hide();
		}
	}
	else if (value.state=='success') {
		$('persons').show();
		$('roomtype').show();
		$('transport').show();
		$('extras').show();

		$('calculateprice').show();
		$('pricebreakdown').hide();
		$('startbooktrip').hide();
		$('requestinvoice').hide();

	}

	actionBookmark.curry('bookstep').delay(0.2);
}

/**
 * Person picker
 */
function actionSetPersons(event) {
	clearBreakdown();

	var app = VkWebApp.getInstance();
	var form = Event.element(event).form;
	var name = form.name;

	app.deferAction( 'setPersons', null, {adults: form.elements[name + '[adults]'].value, children: form.elements[name + '[children]'].value } );
	app.loadContent('loadPickPersons', $('persons'));
	app.loadContent('loadPickRoomType', $('roomtype'));
	app.loadContent('loadPickTransport', $('transport'));
	app.process();

	Event.stop(event);
}

function actionSetBirthdate(event) {
	clearBreakdown();

	var app = VkWebApp.getInstance();
	var form = Event.element(event).form;
	var name = form.name;

	var adults = {};
	var children = {};

	for(var i=0, len=form.elements.length; i<len; ++i) {
		var element = form.elements[i];
		var parts = element.name.replace(/]/g, '').split('[');
		var value = element.value;

		if (element.tagName == 'INPUT') {
			app.deferAction( 'setPersonsBirthdate', cbSetBirthdate.curry(Element.up(element, 'li').down('.notification')), {index: parts[2], birthdate: value } );
		}
	}

	// this.loadContent('loadPickPersons', $('persons'));
	app.loadContent('loadPickRoomType', $('roomtype'));
	app.loadContent('loadPickTransport', 'transport');
	app.process();

	Event.stop(event);
}

function cbSetBirthdate(element, value) {
	if (value.state=='fail') {
		element.show();
		element.update(value.messages.join('<br/>'));
	}
	else {
		element.hide();
	}
}

/**
 * Room picker
 */
function actionAddRoom(event) {
	clearBreakdown();

	var app = VkWebApp.getInstance();
	app.deferAction( 'addRoom', null, { roomtype: Event.element(event).up('.addroom').readAttribute('value') } );
	app.loadContent('loadPickRoomType', $('roomtype'));
	app.loadContent('loadPickTransport', 'transport');
	app.process();

	Event.stop(event);
}

function actionSetRoom(event) {
	clearBreakdown();

	var app = VkWebApp.getInstance();
	var element = Event.element(event);
	app.deferAction( 'setRoom', null, { roomtype: element.readAttribute('roomtype'), count: element.value } );
	app.loadContent('loadPickRoomType', $('roomtype'));
	app.loadContent('loadPickTransport', 'transport');
	app.process();

	Event.stop(event);
}

function actionRemoveRoom(event) {
	clearBreakdown();

	var app = VkWebApp.getInstance();
	app.deferAction( 'removeRoom', null, { roomindex: Event.findElement(event, 'A').readAttribute('value') } );
	app.loadContent('loadPickRoomType', $('roomtype'));
	app.loadContent('loadPickTransport', 'transport');
	app.process();

	Event.stop(event);
}

/**
 * Room assignment
 */
function actionAssignRoom(event) {
	clearBreakdown();

	var app = VkWebApp.getInstance();
	var element = Event.element(event);
	var radios = element.form.elements[element.name];

	var roomindex = null;
	var personindex = element.name.split('[').pop();
	personindex = personindex.substring(0, personindex.length-1);

	if (!Object.isUndefined(radios.length)) {
		for(var i=0, length = radios.length; i<length; ++i) {
			if (radios[i].checked) {
				roomindex = radios[i].value;
				break;
			}
		}
	}
	else if (radios.checked) { // should always be true in this case.
		roomindex = radios.value;
	}

	if (roomindex !== null) {
		// this.assignRoom(roomindex, personindex);
		app.deferAction('assignRoom', displayAssignmentNotification.curry(element.up('table')), {roomindex: roomindex, personindex: personindex} );
		element.up('tr').down('th').removeClassName('unassigned');
	}

	app.process();
	// Event.stop(event); // SCREW YOU IE
}

function displayAssignmentNotification(table, values) {
	var elements = table.select('td.notification');

	for (var index = 0, len = elements.length; index < len; ++index) {
		var element = elements[index];
		element.update(values[index]);
	}
}

/**
 * Transport picking
 */
function actionSetTransport(name, call, event) {
	clearBreakdown();

	var transportNr = null;
	var transportCode;


	var form = Event.element(event).form;
	var radios = form.elements[form.name + '[' + name + ']'];
	if (!Object.isUndefined(radios.length)) {
		for(var i=0, length = radios.length; i<length; ++i) {
			if (radios[i].checked) {
				transportNr = radios[i].value;
				break;
			}
		}
	}
	else if (radios.checked) { // should always be true in this case.
		transportNr = radios.value;
	}

	transportCode = form.elements[form.name + '[' + name + 'Class]' + '[' + transportNr + ']'].value;

	if (transportNr !== null) {
		var app = VkWebApp.getInstance();
		app.deferAction( call, null, {transportCode: transportCode} );
		app.process();
	}
}

function actionToggleScheme(classname, event) {
	Event.element(event).up('.toggle').toggleClassName(classname);
	Event.stop(event);
}

function clearBreakdown() {
	$('calculateprice').show();
	$('pricebreakdown').hide();
	$('startbooktrip').hide();
	$('booktrip_notification').hide();
	$('requestinvoice').hide();
}

/**
 * Load price breakdown
 */
function actionLoadPriceBreakdown(event) {
	var app = VkWebApp.getInstance();
	app.ajax.options.set('pageLoader', $('loading_large'));
	$('loading').hide();

	$('booktrip_notification').hide();
	$('requestinvoice').hide();

	app.deferAction('doPriceInfo', cbDoPriceInfo);
	app.loadContent('loadPriceBreakdown', $('breakdownsnippet'));
	app.process();

	Event.stop(event);
}

function cbDoPriceInfo(value) {
	var app = VkWebApp.getInstance();
	app.ajax.options.set('pageLoader', $('loading'));
	$('loading_large').hide();

	if (value.state=='success') {
		// Track VPV
		pageTracker._trackPageview(location.pathname + '?prijsopbouw');

		actionBookmark.curry('pricebreakdown').delay(0.2);

		$('calculateprice').hide();
		$('pricebreakdown').show();
		$('startbooktrip').show();
	}
	else if (value.state=='onrequest') {
		setMessage(value.messages.join('<br/>'));
		// $('booktrip_notification').update(value.messages.join('<br/>'));
		// $('booktrip_notification').show();

		$('calculateprice').hide();
		$('requestinvoice').show();
	}
	else if (value.state=='fail') {
		setMessage(value.messages.join('<br/>'));
	}
}

/**
 * Book / invoice
 */
function actionRequestInvoice(event) {
	var element = Event.element(event);
	var value = element.readAttribute('value');

	location.href = '/offerte-aanvraag?action=basedonprice&priceid=' + value;
	Event.stop(event);
}

function actionStartBookTrip(event) {
	location.href = '/boeken?action=start';
	Event.stop(event);
}

function actionSetTravelerInfo(event) {
	var app = VkWebApp.getInstance();

	var element = Event.element(event);
	var name = element.name + '[';
	var splited = name.split('][');
	var fieldname = splited[0].split('[')[1];
	var index = splited[1].split('_')[1];
	var formname = name.split('[')[0];
	var notification = element.up('tr').down('.notification');

	var elements = element.form.elements;
	var options = {travelerid: index};
	options[fieldname] = element.value;

	app.deferAction( 'setTravelerInfo', cbSetTravelerInfo.curry(notification), options);
	app.loadContent( 'loadTravelInsurance', $('travelinsurance'), {});
	app.process();

	Event.stop(event);
}

function cbSetTravelerInfo(notification, value) {
	if (value.state=='fail') {
		notification.update(value.messages.join('<br/>'));
		notification.show();
	}
	else {
		notification.update(value.messages.join('<br/>'));
		notification.hide();
	}
}

function actionAddTraveler(event) {
	var app = VkWebApp.getInstance();
	app.deferAction( 'addTraveler', cbAddTraveler, {});
	app.loadContent('loadTravelInsurance', $('travelinsurance'), {});
	app.process();

	Event.stop(event);
}

function cbAddTraveler(value) {
	if (value.id != null) {
		var personNew = $('invoicecompany').down('.travelers').down('.newperson');
		var person = personNew.cloneNode(true);
		var inputs = person.select('input,select');

		var repl = '[id_' + value.id + ']';
		for(var i=0,len=inputs.length;i<len;i++) {
			inputs[i].name = inputs[i].name.replace("[]", repl);
			inputs[i].show();
		}

		person.className = 'person';
		person.id = 'person_' + value.id;

		// person.select('span.name')[0].update(value.name);

		personNew.up().insertBefore(person, personNew);
		person.show();

		var app = VkWebApp.getInstance();
		app.parseSelectors(person);
	}
}

function actionRemoveTraveler(event) {
	var app = VkWebApp.getInstance();

	var person = event.element().up('.person');

	app.deferAction( 'removeTraveler', cbRemoveTraveler.curry(person), { travelerid: person.id.split('_')[1] } );
	app.loadContent('loadTravelInsurance', $('travelinsurance'), {});
	app.process();

	Event.stop(event);
}

function cbRemoveTraveler(element, value) {
	if (value.removed) {
		element.up().removeChild(element);
	}
}

function actionSetCoupon(event) {
	var app = VkWebApp.getInstance();
	var element = Event.element(event);
	app.deferAction( 'setCoupon', null, { number: element.value } );
	app.loadContent('loadPriceBreakdownInvoice', $('breakdownsnippet'));
	app.process();

	Event.stop(event);
}

function actionSetInsurance(event) {
	var app = VkWebApp.getInstance();
	var element = Event.element(event);

	if (element.value == 'travel') {
		togglePersonTable(element);
	}

	app.deferAction('setInsurance', null, { type: element.value, value: element.checked } );
	app.loadContent('loadPriceBreakdownInvoice', $('breakdownsnippet'));
	app.process();
	// Event.stop(event);
}

function actionSetInsurancePerson(event) {
	var app = VkWebApp.getInstance();
	var element = Event.element(event);

	var parts = (element.name + '[').split('][');
	parts.pop();
	var personIndex = parts.pop();

	app.deferAction('setInsurancePerson', null, { type: 'travel', personIndex: personIndex, value: element.checked } );
	app.loadContent('loadPriceBreakdownInvoice', $('breakdownsnippet'));
	app.process();
	// Event.stop(event);
}

function togglePersonTable(element) {
	if (element.checked) {
		element.up().down('ul').show();
		var elements = element.up().down('ul').select('input');
		for(var i=0, len = elements.length; i < len; i++) {
			elements[i].checked = false;
		}
	}
	else {
		element.up().down('ul').hide();
	}
}

/**
 * Invoice
 */
function actionLoadTouroperatorComment(event) {
	var app = VkWebApp.getInstance();
	app.deferAction('loadTouroperatorComment', cbLoadTouroperatorComment, { touroperator: event.element().value });
	app.process();

	Event.stop(event);
}

function cbLoadTouroperatorComment(value) {
	var element = $('touroperatorcomment');
	element.update(value.comment);

	if (value.comment==null || value.comment.length==0) {
		element.hide();
	}
	else {
		element.show();
	}
}

function actionShowQuestion(event) {
	if ($('invoice_accept').visible()) {
		new Effect.Parallel([
			new Effect.BlindUp($('invoice_accept'), {sync: true }),
			new Effect.Fade($('invoice_accept'), {sync: true })
		], {});
	}

	if ($('invoice_reject').visible()) {
		new Effect.Parallel([
			new Effect.BlindUp($('invoice_reject'), {sync: true }),
			new Effect.Fade($('invoice_reject'), {sync: true })
		], {});
	}

	new Effect.Parallel([
		new Effect.BlindDown($('invoice_choice_state'), {sync: true }),
		new Effect.Appear($('invoice_choice_state'), {sync: true })
	], {});

}

function actionShowBooksteps(event) {
	if ($('invoice_choice_state').visible()) {
		new Effect.Parallel([
			new Effect.BlindUp($('invoice_choice_state'), {sync: true }),
			new Effect.Fade($('invoice_choice_state'), {sync: true })
		], {});
	}

	if ($('invoice_reject').visible()) {
		new Effect.Parallel([
			new Effect.BlindUp($('invoice_reject'), {sync: true }),
			new Effect.Fade($('invoice_reject'), {sync: true })
		], {});
	}

	new Effect.Parallel([
		new Effect.BlindDown($('invoice_accept'), {sync: true }),
		new Effect.Appear($('invoice_accept'), {sync: true })
	], { });
}

function actionShowDenied(event) {
	if ($('invoice_choice_state').visible()) {
		new Effect.Parallel([
			new Effect.BlindUp($('invoice_choice_state')),
			new Effect.Fade($('invoice_choice_state'))
		], {});
	}

	if ($('invoice_accept').visible()) {
		new Effect.Parallel([
			new Effect.BlindUp($('invoice_accept')),
			new Effect.Fade($('invoice_accept'))
		], {});
	}

	new Effect.Parallel([
		new Effect.BlindDown($('invoice_reject')),
		new Effect.Appear($('invoice_reject'))
	], {});
}

function actionSelectRejectOption(event) {
	var element = Event.element(event);

	// $('rejectreason').hide();

	if ($('rejectreason').visible()) {
		new Effect.Parallel([
			new Effect.BlindUp($('rejectreason'), { sync: true } ),
			new Effect.Fade($('rejectreason'), { sync: true })
		], { queue: 'end' });
	}

	$('rejectoptions').down('.answers').hide();

	new Effect.Parallel([
		new Effect.BlindDown($('rejectreason'), { sync: true }),
		new Effect.Appear($('rejectreason'), { sync: true })
	], { queue: 'end', afterSetup: cbSelectRejectOption.curry(element.up('li').readAttribute('value'), element.up('li').readAttribute('subject')) });

	
}

function cbSelectRejectOption(text, subject) {
	$('rejectreason').down('p').update(text);
	$('rejectreason').down('.subject').value = subject;
}

/**
 * Dossier
 */
function actionPickInvoice(event) {
	location.href = 'http://' + location.hostname + event.element().up('tr').readAttribute('value');
}

function toggleMessage(event) {
	var element = Event.findElement(event, 'li');
	var contentEl = element.down('dd.content');
	// var contentSmallEl = element.down('dd.contentsmall');

	if (element.hasClassName('collapsed')) {
		new Effect.Parallel([
			new Effect.Appear(contentEl, { sync: true }),
			new Effect.SlideDown(contentEl, { sync: true })
		], { duration: 1.0, queue: { position: 'end', scope: 'message' + element.id, limit: 1 } } );
		element.removeClassName('collapsed');
	}
	else {
		new Effect.Parallel([
			new Effect.Fade(contentEl, { sync: true } ),
			new Effect.SlideUp(contentEl, { sync: true })
		], { duration: 1.0, queue: { position: 'end', scope: 'message' + element.id, limit: 1 }, afterFinish: toggleCollapsed.curry(element) } );
	}

	// element.toggleClassName('collapsed');

	Event.stop(event);
}

function toggleCollapsed(element, more) {
	element.toggleClassName('collapsed');
}

/**
 * Load disclaimer
 */
function actionLoadContentDisclaimer(event) {
	$('popup_window').show();
	$('popup_window').down('.window').setStyle({ width: '625px', height: 'auto', top: '70px'} );
	$('popup_window').down('.content').update('');

	var app = VkWebApp.getInstance();
	app.loadContent('loadContentDisclaimer', $('popup_window').down('.content'));
	app.process();

	pageTracker._trackPageview(location.pathname + '?contentdisclaimer');

	Event.stop(event);
}
