var mbtest_input = new MBTest_input();
var mbtest_choice = new MBTest_choice();
var mbtest_submit = new MBTest_submit();

$(document).ready(function()
{

});

function MBTest_submit()
{
	this.check = function()
	{
		$('input').each( function (i) 
		{
			if($(this).attr('id') == 'submit')
				return;
			
			//alert('id - ok - ' + $(this).val());
		
		});
		document.submit.submit();
	}
}

function MBTest_choice()
{
	this.change = function(elem, id)
	{
		var podpytania = $(elem).attr('podpytania').split(' ');
		var gets = new Object();
		for(var i = 0; i < podpytania.length - 1; i++)
			gets['nr' + i] = podpytania[i];
		
		$.get("ajax.php", gets, function(data) 
		{
			$("#a" + id + "place").html(data);
		});
	}
}

function MBTest_input()
{
	this.check = function(elem, mask)
	{
		var value = $(elem).val();
		
		for(var i = value.length; i > 0; i--)
		{
			var char = value.substr( i - 1 , 1);
			var charsRest = value.substr( 0 , i - 1);
			var charMask = mask.substr( i - 1 , 1);
			
			if(!validate(char, charMask))
				$(elem).val(charsRest);
		}
	}
	
	this.checkMultiply = function(elem, variant)
	{
		this.checkMultiplyElement(elem, variant);
	}
	
	this.checkMultiplySubElement = function(elem, variant)
	{
		checkMSubElem(elem, variant);
	}
	
	this.checkMultiplyElement = function(elem, variant)
	{
		checkMElem(elem, variant);
		this.checkMultiplySubElement(elem, variant);
	}
	
	function checkMSubElem(elem, variant)
	{
		var elem1 = elem;
		
		if($(elem).attr('class').split('-').length == 2)
			elem = $('.' + $(elem).attr('class') + '-1');
		
		var value = $(elem).val();
		var tmp = $(elem).attr('class').split('element').join('');
		var indexOf = tmp.indexOf('-');
		var element = tmp.substr(0, indexOf);
		tmp = tmp.substr(indexOf + 1, tmp.length);
		indexOf = tmp.indexOf('-');
		var subelement = tmp.substr(0, indexOf);
		var subsubelement = tmp.substr(indexOf + 1, tmp.length);
		
		var id_parent = $(elem).parent().parent().parent().parent().attr('id');
		
		var multiply = 0;
		var val;
		
		$('#' + id_parent + ' > * > tr > td > input').each( function (i) 
		{
			if($(this).attr('class').substr(0, 11) == 'element' + element + '-' + subelement + '-')
			{
				val = Number($(this).val());
				if(val == '' || isNaN(val))
					val = 0;
				multiply += Number(val);
			}		
		});
		
		$('#' + id_parent + ' > * > tr > td > input').each( function (i) 
		{
			if($(this).attr('class') == 'element' + element + '-' + subelement)
			{
				if($(this).attr('class') == $('.element' + element + '-' + subelement).attr('class'))
				{
					var correct = true;
					switch(variant)
					{
						case '=':
							if(multiply != $(this).val())
								correct = false;
						break;
						default:
							if(multiply > $(this).val())
								correct = false;
						break;
					}
					
					if(!correct)
						$(this).css("background-color", "red");
					else
						$(this).css("background-color", "white");
				}
			}
		});
		
		if($(elem1).attr('class').split('-').length == 3)
		{
			$('#' + id_parent + ' > * > tr > td > input').each( function (i) 
			{
				if($(this).attr('class') == 'element' + element + '-' + subelement)
					checkMSubElem(this, $(this).attr('variant'));
			});
		}
	}
	
	function checkMElem(elem, variant)
	{
		var value = $(elem).val();
		var tmp = $(elem).attr('class').split('element').join('');
		var indexOf = tmp.indexOf('-');
		var element = tmp.substr(0, indexOf);
		var subelement = tmp.substr(indexOf + 1, tmp.length);
		
		var id_parent = $(elem).parent().parent().parent().parent().attr('id');
		
		var multiply = 0;
		var val;
		
		if($(elem).attr('class').split('-').length == 1)
			element = subelement;
			
		
		$('#' + id_parent + ' > * > tr > td > input').each( function (i) 
		{
			if($(this).attr('class').substr(0, 9) == 'element' + element + '-' && $(this).attr('class').split('-').length == 2)
			{
				val = Number($(this).val());
				if(val == '' || isNaN(val))
					val = 0;
				multiply += Number(val);
			}
			
		});
		
		$('#' + id_parent + ' > * > tr > td > input').each( function (i) 
		{
			
			if($(this).attr('class') == 'element' + element)
			{
				if($(this).attr('class') == $('.element' + element).attr('class'))
				{
					var correct = true;
					switch(variant)
					{
						case '=':
							if(multiply != $(this).val())
								correct = false;
						break;
						default:
							if(multiply > $(this).val())
								correct = false;
						break;
					}
					
					if(!correct)
						$(this).css("background-color", "red");
					else
						$(this).css("background-color", "white");
				}
			}
		});
		
		if($(elem).attr('class').split('-').length == 2)
		{
			$('#' + id_parent + ' > * > tr > td > input').each( function (i) 
			{
				if($(this).attr('class') == 'element' + element)
					checkMElem(this, $(this).attr('variant'));
			});
		}
	}
	
	function validate(char, charMask)
	{
		switch(charMask.toLowerCase())
		{
			case 'x':
				if(char.match(/\D/) == null)
					return false;
				else
					return true;
			break;
			case '9':
				if(char.match(/[0-9]/) == null)
					return false;
				else
					return true;
			break;
			case '8':
				if(char.match(/[0-8]/) == null)
					return false;
				else
					return true;
			break;
			case '7':
				if(char.match(/[0-7]/) == null)
					return false;
				else
					return true;
			break;
			case '6':
				if(char.match(/[0-6]/) == null)
					return false;
				else
					return true;
			break;
			case '5':
				if(char.match(/[0-5]/) == null)
					return false;
				else
					return true;
			break;
			case '4':
				if(char.match(/[0-4]/) == null)
					return false;
				else
					return true;
			break;
			case '3':
				if(char.match(/[0-3]/) == null)
					return false;
				else
					return true;
			break;
			case '2':
				if(char.match(/[0-2]/) == null)
					return false;
				else
					return true;
			break;
			case '1':
				if(char.match(/[0-1]/) == null)
					return false;
				else
					return true;
			break;
			case '0':
				if(char.match(/0/) == null)
					return false;
				else
					return true;
			break;
			case '-':
				if(char.match(/-/) == null)
					return false;
				else
					return true;
			break;
			break;
			case ' ':
				if(char.match(/ /) == null)
					return false;
				else
					return true;
			break;
			case ',':
				if(char.match(/,/) == null)
					return false;
				else
					return true;
			break;
			case '.':
				if(char.match(/./) == null)
					return false;
				else
					return true;
			break;
			default:
				return true;
			break;
		}
	}
}