function SinfonSkype() {
	this.name = 'SinfonSkype'
	this.checkUserName()
	this.categories = Array()
	this.dati = Array()
	this.addElements()
	this.bind()
	this.first = true
	this.firstExecuter = new PeriodicalExecuter(this.firstCheck.bind(this), .5)
	this.executer = new PeriodicalExecuter(this.check.bind(this), 5)
}

SinfonSkype.prototype.add = function(type, id, name, userName) {
	var item = Object()
	item.id = id
	item.name = name
	item.type = type
	item.userName = userName
	this.dati.push(item)
}

SinfonSkype.prototype.addCategory = function(id, title, nota, nr) {
	var item = new Element('div')
	var c = new Element('div')
	item.setStyle({display: 'none'})
	var h2 = new Element('h2')
	h2.setStyle({margin: '0', padding: '25px 0 10px 0'})
	h2.insert(title)
	var container = new Element('div')
	container.addClassName('container')
	if (nota) {
		var p = new Element('p')
		p.innerHTML = nota
		container.insert(p)
	}

	var div1 = new Element('div')
	div1.id = 'div-' + id + '-1'
	if (nr == 2) {
		div1.setStyle({float: 'left', paddingRight: '100px'})
	}
	container.insert(div1)
	if (nr == 2) {
		var div2 = new Element('div')
		div2.id = 'div-' + id + '-2'
		container.insert(div2)
	}
	c.insert(h2)
	c.insert(container)
	item.insert(c)

	this.categories.push(item)
	$('elements').insert(item)
}

SinfonSkype.prototype.addElements = function() {
	this.add('applicativo-1', 'assistente.applicativo.sinfon.1', 'assistente applicativo sinfon 1', 'diana')
	this.add('applicativo-1', 'assistente.applicativo.sinfon.2', 'assistente applicativo sinfon 2', 'renata')
	this.add('applicativo-1', 'assistente.applicativo.sinfon.3', 'assistente applicativo sinfon 3', 'anna')
	this.add('applicativo-2', 'assistente.applicativo.sinfon.4', 'assistente applicativo sinfon 4', 'jempsale')
	this.add('applicativo-2', 'assistente.applicativo.sinfon.6', 'assistente applicativo sinfon 6', 'margherita')
	this.add('applicativo-2', 'assistente.applicativo.sinfon.7', 'assistente applicativo sinfon 7', 'elisa')
	this.add('tecnico-1', 'assistente.tecnico.sinfon.1', 'assistente tecnico sinfon 1', 'ambrogio')
	this.add('tecnico-1', 'assistente.tecnico.sinfon.2', 'assistente tecnico sinfon 2', 'pietro')
	this.add('tecnico-2', 'assistente.tecnico.sinfon.3', 'assistente tecnico sinfon 3', 'stefano')
	//this.add('tecnico-2', 'assistente.tecnico.sinfon.3', 'assistente tecnico sinfon 3', 'stefano')
	//this.add('commerciale-1', 'renatalisetto', 'Renata Lisetto', 'renata.lisetto@sinfon.it')
	this.addCategory('applicativo', 'Assistenza applicativa', 'Per servizi di assistenza di carattere applicativo (quindi relativi al prodotto SINFON STUDIO):', 2)
	this.addCategory('tecnico', 'Assistenza tecnica', 'Per servizi di assistenza di carattere tecnico (quindi relativi a pc e stampanti):', 2)
	//this.addCategory('commerciale', 'Commerciale', '', 1)
}

SinfonSkype.prototype.checkUserName = function() {
	this.userName = $('username').innerHTML
}

SinfonSkype.prototype.isCurrentUser = function(item) {
	return this.userName != '' && this.userName == item.userName
}

SinfonSkype.prototype.bind = function() {
	this.dati.each(function(item) {
		var div = $('div-' + item.type)
		var p = new Element('p')
		p.id = item.id
		p.rel = item.userName
		p.addClassName('item')
		p.setStyle({color: '#c3d0d5'})
		if (this.isCurrentUser(item)) {
			p.addClassName('currentUser')
		}
		var a = new Element('a', {href: 'skype:' + item.id + '?add'})
		var aImg = new Element('img', {src: '/modules/private/contatti/add.png', alt: 'Aggiungimi alla lista dei contatti'})
		a.insert(aImg)
		aImg.setStyle({marginRight: '8px'})
		var statusImg = new Element('img', {src: '/modules/private/contatti/presente.png', alt: 'Contatto online'})
		statusImg.setStyle({marginRight: '4px', opacity: '0.3'})
		statusImg.addClassName('status-img')
		p.insert(statusImg)
		p.insert(a)
		p.insert(' ')
		p.insert(item.name)
		div.insert(p)
	}.bind(this))
	this.categories.each(function(item) {
		Effect.BlindDown(item, { queue: 'end', duration: .2})
	}.bind(this))
}

SinfonSkype.prototype.setOnline = function(items) {
	$$('.item').each(function(item) {
		var online = items.indexOf(item.rel) >= 0
		if (online) {
			new Effect.Morph(item, { style: { color: '#334c55' }, duration: .2 })
			new Effect.Appear(this.getStatusImg(item), { duration: .2 })
		} else {
			new Effect.Morph(item, { style: { color: '#c3d0d5' }, duration: .2 })
			new Effect.Fade(this.getStatusImg(item), { duration: .2, to: .3 })
		}
		if (this.first) {
			if (item.hasClassName('currentUser')) {
				item.insert(' ')
				var theTitle = online ? 'offline' : 'online'
				var a = new Element('a', { href: '#'})
				a.id = 'toggle-button'
				a.insert('Passa ' + theTitle)
				a.setStyle({display: 'none'})
				Effect.Appear(a, { queue: 'end', duration: .2})
				item.insert(a)
				Event.observe(a, 'click', function(event) {
					Event.stop(event)
					this.toggleStatus(item)
				}.bind(this))
			}
		}
	}.bind(this))
	this.first = false
}

SinfonSkype.prototype.toggleStatus = function(item) {
	var online = $('toggle-button').innerHTML == 'Passa online'
	new Ajax.Request('/modules/private/contatti/setOnline.php?value=' + online, {
		onSuccess: function(response) {
			el = $('toggle-button')
			if (online) {
				el.innerHTML = el.innerHTML.gsub('Passa online', 'Passa offline')
				new Effect.Morph(item, { style: { color: '#334c55' }, duration: .2 })
				new Effect.Appear(item.down(0), { duration: .2 })
			} else {
				el.innerHTML = el.innerHTML.gsub('Passa offline', 'Passa online')
				new Effect.Morph(item, { style: { color: '#c3d0d5' }, duration: .2 })
				new Effect.Fade(item.down(0), { duration: .2, to: .3 })
			}
		}
	})
}

SinfonSkype.prototype.getStatusImg = function(item) {
	return item.down(0)
}

SinfonSkype.prototype.check = function() {
	new Ajax.Request('/modules/private/contatti/checkOnline.php', {
		onSuccess: function(response) {
			this.setOnline(response.responseText.evalJSON())
		}.bind(this)
	})
}

SinfonSkype.prototype.firstCheck = function() {
	this.firstExecuter.stop()
	this.check()
}

Event.observe(window, 'load', function(event) {
	if ($('elements')) {
		new SinfonSkype()
	}
})

