var core = {
	
	server_time: null,
	server_timezone: null,
	server_timestamp: null,
	login_url: null,
	customer: {},
	dataTableParams: new Object(),
	
	/**
	 * 
	 * @param {string} lang
	 * @param {string} web_root
	 * @param {int} limit_table_rows
	 * @param {int} dns_bulk_limit
	 * @param {int} dns_hosts_limit
	 */
	init : function (web_root, lang, limit_table_rows, dns_bulk_limit, dns_hosts_limit) {
		this.web_root			= web_root;
		this.lang				= lang;
		this.limit_table_rows	= limit_table_rows;
		this.dns_bulk_limit		= dns_bulk_limit;
		this.dns_hosts_limit	= dns_hosts_limit;
		this.login_url			= this.web_root + this.lang + '/customer/login';
		$("body").on("click", ".cardlink", cardlink_handler);
	},
	
	load: function (url) {
		window.location.href = url;
	},
	redirect: function (url) {
		window.location.replace(url);
	},

	company_name : function() {
		document.write(String.fromCharCode(78, 97, 109, 101, 32, 67, 97, 115, 101, 32, 71, 109, 98, 72));
	},
	
	HashTable : function(obj) {

		this.length = 0;
		this.items = {};
		for ( var p in obj) {
			if (obj.hasOwnProperty(p)) {
				this.items[p] = obj[p];
				this.length++;
			}
		}

		this.setItem = function(key, value) {
			var previous = undefined;
			if (this.hasItem(key)) {
				previous = this.items[key];
			} else {
				this.length++;
			}
			this.items[key] = value;
			return previous;
		}

		this.getItem = function(key) {
			return this.hasItem(key) ? this.items[key] : undefined;
		}

		this.hasItem = function(key) {
			return this.items.hasOwnProperty(key);
		}

		this.removeItem = function(key) {
			if (this.hasItem(key)) {
				previous = this.items[key];
				this.length--;
				delete this.items[key];
				return previous;
			} else {
				return undefined;
			}
		}

		this.keys = function() {
			var keys = [];
			for ( var k in this.items) {
				if (this.hasItem(k)) {
					keys.push(k);
				}
			}
			return keys;
		}

		this.values = function() {
			var values = [];
			for ( var k in this.items) {
				if (this.hasItem(k)) {
					values.push(this.items[k]);
				}
			}
			return values;
		}

		this.each = function(fn) {
			for ( var k in this.items) {
				if (this.hasItem(k)) {
					fn(k, this.items[k]);
				}
			}
		}

		this.clear = function() {
			this.items = {}
			this.length = 0;
		}
		
	},
	
	dataTable: new Object(),
	dataTableParams: new Object(),
	
	addDataTableParams : function(key, value){
		if(typeof(key) === 'string') // single param
			this.dataTableParams[key] = value;
		else{ // working with object
			params = key;
			for(var k in params) {
				val = params[k];
				this.dataTableParams[k] = val;
			}
		}
	},
	
	getDataTableParams : function(){
		return this.dataTableParams;
	},
	
	resetDataTableParams : function(){
		this.dataTableParams = new Object();
	},

	getDataTable : function(){
		return this.dataTable;
	},
	
	setUserSessionData : function(data){
		this.customer.session_info = data;
	},
	
	/**
	 * 
	 * @returns {jqXHR}
	 */
	initUserSessionData : function(){
		if (location.hostname === 'parking.nidoma.com') {
			return null;
		}
		url = this.web_root + this.lang + '/service/ajax?act=customer_session';
		result = $.post(url);
		result.done(function(response, status, xhr){
			core.setUserSessionData(response);
		});
		return result;
	},
	
	getUserSessionData : function(){
		if(typeof this.customer.session_info != 'undefined'){
			return this.customer.session_info;
		}
	},
	
	/**
	 * 
	 * @returns {Boolean}
	 */
	isUserLogged : function(){
		if(typeof this.customer.session_info == 'undefined') return false;
		return this.customer.session_info.is_logged;
	},

	/**
	 *
	 * @returns {null|string}
	 */
	getLoginUrl : function(){
		return this.login_url;
	}

};

function close_cardlink(link_id) {
	$('.ui-dialog-' + link_id).dialog('destroy');
}

function cardlink_handler(event) {
	let link = $(event.currentTarget);
	let link_attr_id = link.attr('id') ? '-'+link.attr('id') : '';
	let card_width = link.attr('data-cardwidth') ? link.attr('data-cardwidth') : 500;
	let card_height = link.attr('data-cardheight') ? link.attr('data-cardheight') : 300;
	let md = $('<div class="ui-dialog' + link_attr_id + '"></div>').dialog(
		{
			closeOnEscape: true,
			autoOpen: false,
			model: true,
			title: link.attr('title'),
			width: card_width,
			height: card_height,
			close: function( event, ui ) {
				//uso md perchè è l'oggetto instanziato da jquery che devo distruggere
				try{
					md.dialog('destroy');
				}catch(err){
					md.remove();
				}
			}
		});
	md.load(link.attr('href')).dialog('open');
	return false;
}

/**
 *
 * @param event
 * @return {boolean}
 */
function cardlink_reload_handler(event) {
	let link = $(event.currentTarget);
	let parent_dialog = $('.auth-dialog');
	parent_dialog.dialog('destroy');
	let card_width = link.attr('data-cardwidth') ? link.attr('data-cardwidth') : 500;
	let card_height = link.attr('data-cardheight') ? link.attr('data-cardheight') : 300;
	let md = $('<div class="auth-response"></div>')
		.dialog({
			autoOpen: false,
			title: link.attr('title'),
			width: card_width,
			height: card_height
		});
	md.load(link.attr('href')).dialog('open');
	return false;
}