/** 
	Skrypty zapewniające walidacje przed submitem na formie.
	@author kpudlik
*/	


/**
 * Walidacja daty
 */
function validate_date(obj,alerttxt)
{
	if (obj.value == null || obj.value == "")
	{
		return true;
	}
	if (obj.value.length != 10)
	{
		showError(alerttxt);
		return false;
	}
	day = obj.value.substring(0,2);
	month = obj.value.substring(3,5);
	year = obj.value.substring(6,10);

	if (!_isInteger(day))
	{
		showError(alerttxt);
		return false;
	}
	if (!_isInteger(month))
	{
		showError(alerttxt);
		return false;
	}
	if (!_isInteger(year))
	{
		showError(alerttxt);
		return false;
	}		
	
	// Is date valid for month?
	if (month==2) 
	{
		// Check for leap year
		if ( ( (year%4==0)&&(year%100 != 0) ) || (year%400==0) ) 
		{
			// leap year
			if (day > 29)
			{ 
				showError('Rok przystępny, luty ma 29 dni.');
				return false; 
			}
		}
		else 
		{ 
			if (day > 28) 
			{ 
				showError('Rok przystępny, luty ma 28 dni.');
				return false; 
			}
		}
	}
	if ((month==4)||(month==6)||(month==9)||(month==11)) 
	{
		if (day > 30) 
		{
			showError('Wybrany miesiąc ma 30dni.'); 
			return false; 
		}
	}
	return true;
}

/**
 * Walidacja wedlug formatu
 * @param obj obiekt który ma być walidowany
 * @param alerttxt tekst który ma być wyświetlony na błędną walidacje.
 * @param format:<br>
 *<li> # - Znak liczbowy od 0 do 9
 *<li> * - Dowolny znak
 *<li> % - Dowolny łancuch znakowy
 * @param length Dopuszczalna długość tekstu
 * @return 
 */
function validate_by_format(obj, alerttxt, format, length)
{
	/*
	alert('format : ' + format);
	--alert('dlugosc : ' + length);
	*/
	
	/** Podany format jest pusty*/
	if (format == null || format == "")
	{
		return false;
	}
	/** Obiekt nie posiada wartości*/
	if (obj.value == null || obj.value == "")
	{
		return true;
	}
	
	/** Sprawdzenie długości */
	if (length != null && length != "")
	{
		if (obj.value.length > length)
		{
			showError(alerttxt + ' Podana wartość jest za długa.');
			return false;
		}
	}
	
	for (i = 0; i < format.length; i++)
	{
		if (format.charAt(i) == '#' && !_isInteger(obj.value.charAt(i)))
		{
			showError(alerttxt + 'Podana wartość nie jest liczbą zgodną z formatem');
			return false;
		}
		else if (format.charAt(i) == '*')
		{
		}
		else if (format.charAt(i) == '%')
		{
			return true;
		}
	}

	return true;
}

function validate_chars_and_not_null(obj, alerttxt)
{
	if(validate_not_null(obj, alerttxt) == false) return false;	
	if(validate_chars(obj, alerttxt) == false) return false;
	
	return true;
}

function validate_not_null(obj, alerttxt)
{
	if(obj.value == null || obj.value == "")
	{	
		showError('Pole \"' + alerttxt + '\" nie może być puste.');
		return false;
	}
	return true;
}

/** 
 * Waidacja czy w tekscie występują znaki specjalne HTML '<' lub '>'.
 */ 
function validate_chars(obj, alerttxt)
{
	if(obj.value != null && obj.value != "" && (obj.value.indexOf("<") > -1 || obj.value.indexOf(">") > -1))
	{
		showError('Pole \"' + alerttxt + '\" nie może zawierać znaków "&lt;" i "&gt".');
		return false;
	}
	return true;
}	


function validate_is_decimal(obj, alerttxt, format, length)
{
	var beforedigit = parseInt(format.charAt(1));
	var afterdigit = parseInt(format.charAt(3));
	if (!/^-?\d{1,2}(\.\d{1,2})?$/.test(obj.value))
	{
		showError('Nieprawidłowa wartość w polu \"' + alerttxt + '\". Podana wartość nie jest liczbą zgodną z formatem.');
		return false;
	}
	return true;
}


/**
 * Metoda walidująca brak wprowadzonych danych do filtrowania przy wyszukiwaniu
 * @param obj String który zawiera pola do walidacji oddzielone ':'
 * @return
 */
function validate_form_not_null(obj)
{
	lvStringArray = obj.split(":");
	for ( i = 0; i < lvStringArray.length; i++) 
	{
		lvObject = document.getElementById(lvStringArray[i]);
		if (lvObject != null)
		{
			if (lvObject.type == 'checkbox')
			{
				if (lvObject.checked == true)
				{
					return true;
				}
			}
			else
			{
				if (lvObject.value != null && lvObject.value != '')
				{
					return true;	
				}
			}
		}
	}
	showError('Wprowadź dane do wyszukiwania');
	return false;
}

function validate_clob_not_null(obj, alerttxt)
{
	if(obj.value == "true")
	{
		showError('Pole \"' + alerttxt + '\" nie może być puste.');
		return false;
	}
	return true;
}

/**
 * Metoda wyświetlająca komunikat o niewybraniu pól w których ma być przeprowadzone wyszukiwanie.
 */
function validation_error_choose_fields()
{
	showError('Wybierz pola dla których ma zostać przeprowadzone wyszukiwanie.');
}

/**
 * Metoda wyświetlająca komunikat o niewybraniu statusów dla których ma być przeprowadzone wyszukiwanie.
 */
function validation_error_choose_status()
{
	showError('Wybierz statusy dla których ma zostać przeprowadzone wyszukiwanie.');
}

/**
 * Metoda wyświetlająca komunikat z błędem - jeśli na formatce istnieje element błędu 
 * (div o id="error_message_div_id") jest on pokazywany a wartość na nim zostaje podmieniona na 
 * aktualny błąd. Jeśli taki element nie istnieje błąd wyświetlany jest w postaci standardowego alertu.
 */
function showError(pmMessage)
{
	var errorDiv = document.getElementById('error_message_div_id');
	
	if(errorDiv != null)
	{
		var errorSpan = document.getElementById('error_message_id');
		if(errorSpan != null)
		{
			errorSpan.innerHTML = pmMessage;
			errorDiv.style.display = 'block';
			window.scroll(0,0);
			return;
		}			
	}	
	
	alert(pmMessage);
}
/**
 * 
 * @param val
 * @return
 */
function _isInteger(val) 
{
	var digits="1234567890";
	for (var i=0; i < val.length; i++) 
	{
		if (digits.indexOf(val.charAt(i))==-1) 
		{ 
			return false; 
		}
	}
	return true;
}

function _getInt(str,i,minlength,maxlength) 
{
	for (var x=maxlength; x>=minlength; x--) 
	{
		var token=str.substring(i,i+x);
		if (token.length < minlength) 
		{ 
			return null; 
		}
		if (_isInteger(token)) 
		{ 
			return token; 
		}
	}
	return null;
}

function removeTag(tag_name)
{			
	var lvWbrArray  = document.getElementsByTagName(tag_name);

	for(var i = 0; i < lvWbrArray.length; i++)
	{
		lvWbrArray[i].parentNode.removeChild(lvWbrArray[i]);
	}
	
	/*
	var lvTdArray = document.getElementsByTagName('td');
	var lvWbrArray;

	for(var i = lvTdArray.length; i > 0 ; i++)
	{
		lvWbrArray = lvTdArray[i].getElementsByTagName('wbr');
		for(var k = lvWbrArray.length; k > 0 ; i++)
		{
			lvTdArray[i].removeChild(lvWbrArray[i]);
		}
	}
	*/
}

function checkBrowserVersion(desired_browser)
{
	var browser = navigator.appVersion;
	for (var i = 0; i < browser.length; i++)
	{
		if (browser.charAt(i) == desired_browser.charAt(0) && (i + 5) < browser.length)
		{
			if (browser.substring(i,i + desired_browser.length) == desired_browser)
			{
				return true;
			}
		}
	}		
	return false;
}