var TicketForm = Class.create();

TicketForm.prototype = 
{
    initialize : function(Ticket)
    {   
		this.ticket = Ticket;

		this.container;
		
		this.titleBar;
		this.fieldHolder;
		this.titleHolder;
		this.starsHolder;
		this.controlsHolder;
		
		this.formHolder;
		this.formTitleBar;
		
		this.titleNumbers;
		this.titleStars;
		
		this.fields = new Array();
		this.stars = new Array();
		
		this.selectedNumbers = new Array();
		this.selectedStars = new Array();
		
		this.BuildHtml();
    },
	
	BuildHtml : function()
	{
		this.container = Builder.node('div', { className: 'ticket_form' });
		
		this.titleBar = Builder.node('div', { className: 'ticket_form_title_bar' });
		this.fieldHolder = Builder.node('div', { className: 'ticket_form_field_holder' });
		this.titleHolder = Builder.node('h1', { className: 'ticket_form_title_holder' });
		this.starsHolder = Builder.node('div', { className: 'ticket_form_stars_holder' });
		this.controlsHolder = Builder.node('div', { className: 'ticket_form_controls_holder' });
		
		this.container.appendChild(this.titleBar);
		this.container.appendChild(this.fieldHolder);
		this.starsHolder.appendChild(this.titleHolder);
		this.container.appendChild(this.starsHolder);
		this.container.appendChild(this.controlsHolder);
		
		this.titleNumbers = Builder.node('p', { className: 'title_numbers' });
		this.titleStars = Builder.node('p', { className: 'title_stars' });
		this.titleBar.appendChild(this.titleNumbers);
		this.titleBar.appendChild(this.titleStars);

		var btn_random = Builder.node('a', { className: 'btn_random' });
		var btn_delete = Builder.node('a', { className: 'btn_delete' });
		var btn_cancel = Builder.node('a', { className: 'btn_cancel' });
		var btn_apply = Builder.node('a', { className: 'btn_apply' });
		
		this.controlsHolder.appendChild(btn_random);
		this.controlsHolder.appendChild(btn_delete);
		this.controlsHolder.appendChild(btn_cancel);
		this.controlsHolder.appendChild(btn_apply);
		

		this.titleNumbers.innerHTML = GetTranslationValue('numbers');
		this.titleStars.innerHTML = GetTranslationValue('stars');
		this.titleHolder.innerHTML = 'Tipp ' + this.ticket.id;
		btn_random.innerHTML = GetTranslationValue('btnrandomtipp');
		btn_delete.innerHTML = GetTranslationValue('btndelete');
		btn_cancel.innerHTML = GetTranslationValue('btncancel');
		btn_apply.innerHTML = GetTranslationValue('btnapply');
		
		Event.observe(btn_delete, 'click', this.OnClickBtnDelete.bindAsEventListener(this));
		Event.observe(btn_cancel, 'click', this.OnClickBtnCancel.bindAsEventListener(this));
		Event.observe(btn_apply, 'click', this.OnClickBtnApply.bindAsEventListener(this));
		Event.observe(btn_random, 'click', this.OnClickBtnRandom.bindAsEventListener(this));
		
		this.CreateFields();
		for(var i = 0; i < this.fields.length; i++)
		{
			this.fieldHolder.appendChild(this.fields[i]);
		}
		
		this.CreateStars();
		for(var i = 0; i < this.stars.length; i++)
		{
			this.starsHolder.appendChild(this.stars[i]);
		}
	},
	
	CreateFields : function()
	{
		for(var i = 0; i < 50; i++)
		{
			var fieldId = 'form_field' + parseInt(i + 1);
			var formField = Builder.node('div', { className: 'form_field', id: fieldId });
			formField.innerHTML = i + 1;
			this.fields.push(formField);
			
			Event.observe(formField, 'click', this.OnClickField.bindAsEventListener(this));
		}
	},
	
	CreateStars : function()
	{
		for(var i = 0; i < 11; i++)
		{
			var starId = 'form_star' + parseInt(i + 1);
			var star = Builder.node('div', { className: 'form_star', id: starId });
			star.innerHTML = i + 1;
			Event.observe(star, 'click', this.OnClickStar.bindAsEventListener(this));
			
			if(i == 0)
			{
				star.style.margin = '10px 1px 0 13px';
			}
			if(i == 1)
			{
				star.style.margin = '10px 1px 0 1px';
			}
			if(i == 2)
			{
				star.style.margin = '10px 1px 0 1px';
			}
			if((i == 3) || (i == 6))
			{
				star.style.margin = '1px 1px 0 13px';
			}
			if(i == 9)
			{
				star.style.margin = '1px 1px 10px 13px';
			}
			
			this.stars.push(star);
		}
	},
	
	Show : function()
	{
		this.ClearFields()
		this.UpdateNumberFields();
		this.UpdateStarFields();
		
		$('content_center').appendChild(this.container);
	},
	
	ClearFields : function()
	{
		for(var i = 0; i < this.fields.length; i++)
		{
			this.fields[i].style.backgroundColor = '#ffffff';
		}
		
		for(var i = 0; i < this.stars.length; i++)
		{
			this.stars[i].style.backgroundImage = 'url(../images/bg_ticket_star_field_big.gif)';
		}
	},
	
	SetNumberField : function(Num)
	{
		if(this.selectedNumbers.length < 5)
		{		
			for(var i = 0; i < this.selectedNumbers.length; i++)
			{
				if(this.selectedNumbers[i] == Num)
				{
					return;
				}
			}	
			this.selectedNumbers.push(Num);
		}
		this.UpdateNumberFields();
	},
	
	SetStarField : function(Num)
	{
		if(this.selectedStars.length < 2)
		{
			for(var i = 0; i < this.selectedStars.length; i++)
			{
				if(this.selectedStars[i] == Num)
				{
					return;
				}
			}
			this.selectedStars.push(Num);	
		}
		this.UpdateStarFields();
	},
	
	UpdateNumberFields : function()
	{
		this.titleNumbers.innerHTML = GetTranslationValue('numbers');
		for(var i = 0; i < this.selectedNumbers.length; i++)
		{
			if(i > 0)
			{
				this.titleNumbers.innerHTML += '&nbsp;&middot;&nbsp;';
			}
			this.titleNumbers.innerHTML += this.selectedNumbers[i];
			
			var fieldIndex = parseInt(this.selectedNumbers[i] - 1)
			this.fields[fieldIndex].style.backgroundColor = '#999999';
			this.ticket.fields[fieldIndex].style.backgroundColor = '#999999';
		}
	},
	
	UpdateStarFields : function()
	{
		this.titleStars.innerHTML = GetTranslationValue('stars');
		for(var i = 0; i < this.selectedStars.length; i++)
		{
			if(i > 0)
			{
				this.titleStars.innerHTML += '&nbsp;&middot;&nbsp;';
			}
			this.titleStars.innerHTML += this.selectedStars[i];
			
			var starIndex = parseInt(this.selectedStars[i] - 1)
			this.stars[starIndex].style.backgroundImage = 'url(../images/bg_ticket_star_field_big_active.gif)';
			this.ticket.stars[starIndex].style.backgroundImage = 'url(../images/bg_ticket_star_field_active.gif)';
		}
	},
	
	OnClickField : function(Evt)
	{
		var field = Event.findElement(Evt, '.form_field');
		if(field == null)
		{
			return;
		}
		
		var selectedNumber = field.id.replace(/form_field/, '');
		this.SetNumberField(selectedNumber);
	},
	
	OnClickStar : function(Evt)
	{
		var field = Event.findElement(Evt, '.form_star');
		if(field == null)
		{
			return;
		}
		
		var selectedNumber = field.id.replace(/form_star/, '');
		this.SetStarField(selectedNumber);
	},
	
	OnClickBtnApply : function()
	{
		if((this.selectedNumbers.length == 0) && (this.selectedStars.length == 0))
		{
			this.selectedNumbers = new Array();
			this.selectedStars = new Array();
			this.ticket.selectedNumbers  = new Array();
			this.ticket.selectedStars  = new Array();
			
			if((this.container.parentNode != null) && ((this.ticket.isSingle == null) || (this.ticket.isSingle == false)))
			{
				$(this.container).remove();
				return;
			}
		}
	
		if(this.selectedNumbers.length < 5)
		{
			var numbersToAdd = parseInt(5 - this.selectedNumbers.length);
			
			if(numbersToAdd == 1)
			{
				alert(GetTranslationValue('youhaveto') + numbersToAdd + GetTranslationValue('selectfurthernumber'));
			}
			else
			{
				alert(GetTranslationValue('youhaveto') + numbersToAdd + GetTranslationValue('selectfurthernumbers'));
			}
			
			return;
		}
		
		if(this.selectedStars.length < 2)
		{
			var starsToAdd = parseInt(2 - this.selectedStars.length);
			
			if(starsToAdd == 1)
			{
				alert(GetTranslationValue('youhaveto') + starsToAdd + GetTranslationValue('selectfurtherstar'));
			}
			else
			{
				alert(GetTranslationValue('youhaveto') + starsToAdd + GetTranslationValue('selectfurtherstars'));
			}
			
			return;
		}

		this.ticket.selectedNumbers = this.selectedNumbers.clone();
		this.ticket.selectedStars = this.selectedStars.clone();
		this.ticket.isFilled = true;
		if((this.ticket.isSingle != null) && (this.ticket.isSingle == true))
		{
			this.ticket.SubmitCart();
		}
		else
		{
			this.ticket.UpdatePrice();
		}
		
		if(this.container.parentNode != null)
		{
			$(this.container).remove();
		}
	},
	
	OnClickBtnCancel : function()
	{
		this.ticket.ClearFields();
		for(var i = 0; i < this.ticket.selectedNumbers.length; i++)
		{
			var ticketFieldIndex = parseInt(this.ticket.selectedNumbers[i] - 1);
			this.ticket.fields[ticketFieldIndex].style.backgroundColor = '#999999';
		}
		
		for(var i = 0; i < this.ticket.selectedStars.length; i++)
		{
			var ticketStarIndex = parseInt(this.ticket.selectedStars[i] - 1);
			this.ticket.stars[ticketStarIndex].style.backgroundImage = 'url(../images/bg_ticket_star_field_active.gif)';
		}
		
		this.selectedNumbers = this.ticket.selectedNumbers.clone();
		this.selectedStars = this.ticket.selectedStars.clone();
		
		this.titleNumbers.innerHTML = GetTranslationValue('numbers');
		this.titleStars.innerHTML = GetTranslationValue('stars');
		
		$(this.container).remove();
	},
	
	OnClickBtnDelete : function()
	{
		this.ClearFields();
		this.ticket.ClearFields();
		
		this.titleNumbers.innerHTML = GetTranslationValue('numbers');
		this.titleStars.innerHTML = GetTranslationValue('stars');
		
		this.selectedNumbers = new Array();
		this.selectedStars = new Array();
	},
	
	OnClickBtnRandom : function()
	{
		this.OnClickBtnDelete();
		
		while(this.selectedNumbers.length < 5)
		{
			var randomNumber = GetRandom(1, 50);
			this.SetNumberField(randomNumber);
		}
		
		while(this.selectedStars.length < 2)
		{
			var randomNumber = GetRandom(1, 11);
			this.SetStarField(randomNumber);
		}
	}
}
