﻿function MineUtils_FieldFormatCheck(control, dataFormat, isMandatory)
{							
	var val = document.getElementById(control).value;	
	if (val == '') return !isMandatory;	

	var a;

	if (dataFormat == '<none>') return true;
	
	else if (dataFormat == '<string>')
	{
		for (a = 0; a < val.length; a ++)
			if (!isNaN(val.substring(a, a + 1))) return false;
	}

    //integer.
	else if ((dataFormat.length == 10) && (dataFormat.substr(0, 9) == '<integer>'))
	{
	    var thousandSeparator = dataFormat.substr(9, 1);
	    
		for (a = 0; a < val.length; a ++)
		{
		    var checkSymbol = val.substr(a, 1);
			if ((isNaN(checkSymbol)) && (checkSymbol != thousandSeparator)) return false;
		}
	}

    //decimal.
	else if ((dataFormat.length == 10) && (dataFormat.substr(0, 9) == '<decimal>'))
	{
	    var separator = dataFormat.substr(9, 1);
	    var thousandSeparator = '.';
	    if (separator == '.') thousandSeparator = ',';	    
	
	    var separatorIndex = val.indexOf(separator);
	    var thousandSeparatorIndex = val.indexOf(thousandSeparator);
	    
	    /*
	    Invalid conditions:
	        1) decimal starts with separator.
	        2) allowedSymbol stands after the separator.
	        3) there are more than one separator.
	        4) decimal ends with allowedSymbol.
	    */
	    
	    //alert(separator + ' = ' + separatorIndex + ', ' + thousandSeparator + ' = ' + thousandSeparatorIndex);
	    
	    if ((separatorIndex == 0) ||
	        ((separatorIndex != -1) && (separatorIndex < thousandSeparatorIndex)) ||
	        (separatorIndex != val.lastIndexOf(separator)) ||	        
	        (thousandSeparatorIndex == val.length - 1))
	        return false;
	
		for (a = 0; a < val.length; a ++)
		{
		    var checkSymbol = val.substr(a, 1);
			if ((isNaN(checkSymbol)) && 
			    (checkSymbol != separator) && (checkSymbol != thousandSeparator))
				return false;
		}
	}

	else if (dataFormat == '<numeric>')
	{
		return isNumeric(val);
	}

	else if (dataFormat == '<email>')
	{
		var firstIndex = val.indexOf('@');
		var secondIndex = val.lastIndexOf('.');
		
		if ((firstIndex < 1) ||
		    (secondIndex <= firstIndex + 1) ||
			(firstIndex == val.length -1) ||
			(secondIndex == val.length -1) ||
			(val.indexOf('.@') != -1) &&
			(val.lastIndexOf('@') != firstIndex)) return false;
	}
	
	//Login and password.
	else if ((dataFormat.length > 7) && (dataFormat.substring(0, 7) == '<login>'))
	{
	    var loginSymbols = dataFormat.substring(7, dataFormat.length);
	    val = val.toLowerCase();
	    
	    for (a = 0; a < val.length; a++)
	        if (loginSymbols.indexOf(val.substr(a, 1)) == -1)
	        {
	            //alert(val.substr(a, 1));
	            return false;
	        }
	}

	else
	{
		if (val.length != dataFormat.length) 
			return false;

		for (a = 0; a < dataFormat.length; a ++)
		{
			formatChr = dataFormat.substring(a, a + 1);
			valChr = val.substring(a, a + 1);
			
			if (formatChr == 'd') 
			{
				if (!isNumeric(valChr)) return false;
			}
			else if (formatChr == 's') 
			{
				if (isNumeric(valChr)) return false;
			}
			else if (formatChr != valChr) return false;
		}
	}

	return true;
}

function isNumeric(val)
{
	if ((val.indexOf('.') != val.lastIndexOf('.')) ||
		(val.indexOf(',') != val.lastIndexOf(',')) ||
		(val.substring(0, 1) == '.') ||
		(val.substring(val.length - 1, val.length) == '.') ||
		(val.substring(0, 1) == ',') ||
		(val.substring(val.length - 1, val.length) == ','))
		return false;
		
	var a;
	for (a = 0; a < val.length; a ++)
	{
		ch = val.substring(a, a + 1);
		if ((isNaN(ch)) &&
			(ch != '.') && (ch != ',')) return false;
	}

	return true;
}
