/**
 * NS Vertrektijden
 *
 * @version   1.00.090602
 * @author    LBI Lost Boys
 */
NS(function($){

	var CLASS_DETAILS = 'stationdetails';

	function Vertrektijden() {
		this.form = $('#form-actuele-vertrektijden');
		this.postURL = NS.getProperty('POST_AVT_DETAILS');

		this.drawers = {};

		NS.relateLink(/continue-/i, this.nextFormStep.bind(this));
		NS.relateLink(/drawer-toggle/i, this.rememberDrawer.bind(this));
		
		NS.subscribe('submit', this.handleSubmit.bind(this));
		NS.subscribe('DOMNodeInserted', this.restoreDrawers.bind(this));
		
		var initial = $('#vertrekstation').val();
		if(initial) {
			this.setRefresh();
		}
	}

	Vertrektijden.prototype = {
		Defaults: {
			validateRequired: true,
			validateServer: false,
			replaceInputs: false,
			simulateClick: false
		},

		owns: function(form) {
			return this.form[0] == form;
		},

		prefers: function(setting) {
			return this.Defaults[setting];
		},
		
		handleSubmit:function(e) {
			var form = e.target;
			if(this.form[0] == form) {
				e.preventDefault();
				this.nextFormStep();
			}
		},

		nextFormStep:function(link, rel) {
			if(link && /more/i.test(link.className)) {
				this.refresh();
			} else {
				NS.XHR.sendForm(this.form[0], this.postURL, this.handleResponse.bind(this));
				this.setRefresh();
			}
			return true;
		},

		handleResponse:function(xml) {
			this.form.addClass(CLASS_DETAILS);
			var details = $(xml).find("vertrektijdendetails").text();
			var target = $("#departure-times");
			NS.DOM.write(target, details);
		},

		setRefresh:function () {
			this.metaRefresh = NS.getFormValues(this.form[0]);
			clearInterval(this.refreshTimer);
			this.refreshTimer = setInterval(this.refresh.bind(this), 60000);
		},

		refresh:function() {
			if(this.metaRefresh) {
				NS.XHR.sendAndLoad(this.metaRefresh, this.postURL, this.handleResponse.bind(this));
			} else {
				this.nextFormStep();
			}	
		},

		rememberDrawer: function(link, rel) {
			var item = $(link).closest('li.drawer-item');
			var id = item.attr('id');
			if(id) {
				this.drawers[id] = item.hasClass('opened');
			}
		},

		restoreDrawers: function(e){
			var node = $(e.target);
			for(var i in this.drawers) {
				if(typeof i == 'string' && this.drawers[i] == true) {
					node.find('#' + i).addClass('opened');
				}
			}
		}
	};

	/**
	 * Bind to NS.initialize
	 */
	NS.subscribe('initialize', function(){
		NS.addApplication('vertrektijden', new Vertrektijden());
	});
});


