/* globale regular expressions */
var g_ReEx_numeric = /^([0-9])+$/
var g_ReEx_email =	/^[^"@;'/"]+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?)$/
var g_ReEx_money = /^[0-9]+([\,][0-9]{1,2})?$/
var g_ReEx_phonenumber = /^(0)([0-9-])+([0-9])$/
var g_ReEx_boolean = /^([0,1]{1})$/
var g_ReEx_dutchzipcode = /^([0-9]{4})([a-zA-Z]{2})$/
var g_ReEx_xmldatetime = /^[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}:[0-9]{2}:[0-9]{2}$/
var g_ReEx_Price = /^[0-9]+([.,]?[0-9]{1,2})?$/

var g_ReEx_Percentage0_100 = /^[0-9]{1,2}[.,]{0,1}[0-9]{0,1}[0-9]{0,1}$/
var g_ReEx_Number0_100 = /^[0-9]{1,2}$/
var g_ReEx_Number999 = /^[0-9]{3,5}$/

var invalidBgColor = '#ff8d8d';
var invalidFontcolor = '#333333';
var validBgColor = '#94e684';
var validFontcolor = '#333333';


/* basis validatie functie*/
var strValidatorMessage = '';
function ValidatorValid(strMsg,blnIsValid,strValidatorID)
{
	Item = document.getElementById(strValidatorID);	
	
	if(!blnIsValid)
	{
		strValidatorMessage +=strMsg+'\n';		
		if(Item != null)
		{		
			Item.style.display = 'inline';
		}	
	}
	else
	{
		if(Item != null)
		{
			Item.style.display = 'none';
		}	
	}
	
  return blnIsValid;
}
 

/*  functie om een reguliere expressie te checken*/
function checkExpression(strValue, strRegExp)
{

	var myRegExp	= new String(strRegExp);
	var intPos		= myRegExp.indexOf('@');
	var blnEmail	= intPos > 0;

	if(blnEmail && trimspaces(strValue) == '')
	{
		//Floris: Expressie is een email, dus niet checken indien leeg (wordt in form object ander altijd aangezien als fout e-mail adres
		return true;
	}
	
	var blnReg = false;
	var filter  = strRegExp;
	if (filter.test(strValue)) {
		blnReg = true;
	};
	return blnReg;
}

/* functie om bij voor en achter een string de lege spaties weg te halen. */
function trimspaces(strValue)
{
	strValue=strValue.replace(/^[\s]+/g,"");
    strValue=strValue.replace(/[\s]+$/g,"");
	return strValue;
};

function removeSpaces(string)
{
	var tstring = "";
	string = '' + string;
	splitstring = string.split(" ");
	for(i = 0; i < splitstring.length; i++)
	{
		tstring += splitstring[i];
	}
	return tstring;
}


function isEmpty(strValue)
{
	var chkEmpty = false;
	if ( trimspaces(strValue) == ''){		
		chkEmpty = true;
	};	
	return chkEmpty;
}

/* functie om een datum te valideren.  */
function isDate(day,month,year) {
 	var today = new Date();
    year = ((!year) ? y2k(today.getYear()):year);
    month = ((!month) ? today.getMonth():month-1);
    if (!day) return false

    var test = new Date(year,month,day);	
	
    if ((year == y2k(test.getYear())) && (month == test.getMonth()) && (day == test.getDate()) ){
        return true;
    } else {
        return false;
	};		
};

/* functie om een xml datum te valideren.  */
function isXMLDate(date) 
{
	var blnResult = true;
	if(checkExpression(date,g_ReEx_xmldatetime))
	{
		var year = parseInt(date.substring(0,4),10);
		var month = parseInt(date.substring(5,7),10);
		var day = parseInt(date.substring(8,10),10);
		var hour = parseInt(date.substring(11,13),10);
		var minutes = parseInt(date.substring(14,16),10);
		var seconds = parseInt(date.substring(17,18),10);
		
		blnResult *= month>0&&month<13;
		blnResult *= day<=daysInMonth(month,year);
		blnResult *= hour>=0&&hour<24;
		blnResult *= minutes>=0&&minutes<60;
		blnResult *= seconds>=0&&seconds<60;
		
	}
	else
	{
		blnResult = false;
	}
	return blnResult==true;
};

function isInteger(s){
	var i;
    for (i = 0; i < s.length; i++){   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function daysInFebruary (year){
	// February has 29 days in any year evenly divisible by four,
    // EXCEPT for centurial years which are not also divisible by 400.
    return (((year % 4 == 0) && ( (!(year % 100 == 0)) || (year % 400 == 0))) ? 29 : 28 );
}

function daysInMonth(month,year) 
{
	var intResult = 31
	if (month==4 || month==6 || month==9 || month==11) {intResult = 30}
	if (month==2) {intResult = daysInFebruary(year)}
	return intResult
}

/* functie om een jaartal in 4 cijfers af te beelden.  */
function y2k(number) { return (number < 1000) ? number + 1900 : number; }

/* functie om de maximum  van een string te controleren   */
function checkMaxLength(strValue, maxLength) 
{
	var varLength = getValueLength(strValue);
	var blnLength = false;	
	if (varLength <= maxLength) {
		blnLength = true;
	};
	return blnLength;
}
/* functie om de minimum  van een string te controleren   */
function checkMinLength(strValue, minLength) 
{
	var varLength = getValueLength(strValue);
	var blnLength = false;	
	if (varLength >= minLength) {
		blnLength = true;
	};
	return blnLength;
}

/* functie om lengte van een string te berekenen */
function getValueLength(strValue) {
	return strValue.length;		
}



// functie voor het bepalen van de kleur van de input field
function ToggleInputFields(fieldname, blnValid)
{
    if(blnValid)
    {
        //alert(blnValid);

        fieldname.style.color = validFontcolor;
        fieldname.style.background = validBgColor;
    }
    else
    {
        fieldname.style.color = invalidFontcolor;
        fieldname.style.background = invalidBgColor;
        //ErrorMsg += fielddescription + " is verplicht <br/>";
    }
}

// functie om te checken of er iets is ingetypt
function validate_text(fieldid, message)
{
    blnValid = false;
    fieldname = document.getElementById(fieldid);
     
    if (fieldname.value == "")
    {
        ToggleInputFields(fieldname, false);
        ShowHideValidationQuickTip(fieldid, message, false);
    }
    else
    {
        ToggleInputFields(fieldname, true);
        ShowHideValidationQuickTip(fieldid, message, true);
        blnValid = true;
    }
    return blnValid;
}

function validate_textarea(fieldid, message)
{
    blnValid = false;
    fieldname = document.getElementById(fieldid);
     
    if (fieldname.innerHTML == "")
    {
        ToggleInputFields(fieldname, false);
        ShowHideValidationQuickTip(fieldid, message, false);
    }
    else
    {
        ToggleInputFields(fieldname, true);
        ShowHideValidationQuickTip(fieldid, message, true);
        blnValid = true;
    }
    return blnValid;
}

function validate_email(fieldname, message, blnRequired)
{
    return validate_regexfield(fieldname, "email", message, blnRequired);
}

function validate_phonenumber(fieldname, message, blnRequired)
{
    return validate_regexfield(fieldname, "phonenumber", message, blnRequired);
}

function validate_postalcode(fieldname, message, blnRequired)
{
    return validate_regexfield(fieldname, "postalcode", message, blnRequired);
}

function validate_regexfield(fieldid, regtype, message, blnRequired)
{
     var blnValid = false;
     fieldname = document.getElementById(fieldid);
     var regex;
     
     switch(regtype)
     {
        case "email":
        regex = g_ReEx_email;
        break;
        case "phonenumber":
        regex = g_ReEx_phonenumber;
        break;
        case "postalcode":
        regex = g_ReEx_dutchzipcode;
        break;
     }

     if(blnRequired && fieldname.value == "")
     {       
        ToggleInputFields(fieldname, false);
        ShowHideValidationQuickTip(fieldid, message, false);
     }
     else if(!blnRequired && fieldname.value == "")
     {
        ToggleInputFields(fieldname, true);
        ShowHideValidationQuickTip(fieldid, message, true);
        blnValid = true;
     }
    else if(!checkExpression(fieldname.value, regex))
     {
        ToggleInputFields(fieldname, false);
        ShowHideValidationQuickTip(fieldid, message, false);
     } 
     else 
     {
       ToggleInputFields(fieldname, true);
        ShowHideValidationQuickTip(fieldid, message, true);
        blnValid = true;
     }
     
     return blnValid;
}

function validate_fileinput(fieldname, extensions, message, blnrequired) 
{
  var blnValid = false;
  var ext = document.getElementById(fieldname).value;
  ext = ext.substring(ext.lastIndexOf(".") + 1);
  ext = ext.toLowerCase();
  
  var count = 0;  
  arrExtensions = extensions.split(",");
  
  for(i=0;i<arrExtensions.length;i++)
  {
    if(ext == arrExtensions[i])
    {
        count++;
    }
  }
  if(blnrequired && ext == "")
  {
    ToggleInputFields(document.getElementById(fieldname), false);
    ShowHideValidationQuickTip(fieldname, message, false);
  }
  else if(!blnrequired && ext == "") 
  {
    ToggleInputFields(document.getElementById(fieldname), true);
    ShowHideValidationQuickTip(fieldname, message, true);
    blnValid = true;
  }
  else if(count > 0)
  {
    ToggleInputFields(document.getElementById(fieldname), true);
    ShowHideValidationQuickTip(fieldname, message, true);
    blnValid = true;
  }
  else
  {
    ToggleInputFields(document.getElementById(fieldname), false);
    ShowHideValidationQuickTip(fieldname, message, false);
  }
  return blnValid;
}


function ShowQuickTip(fieldname, message)
{
    if(document.getElementById("msg_" + fieldname))
    {
        document.getElementById("msg_" + fieldname).style.display = "block";
        document.getElementById("msg_" + fieldname).innerHTML = message;
    }
}
function HideQuickTip(fieldname)
{
    if(document.getElementById("msg_" + fieldname))
    {
        document.getElementById("msg_" + fieldname).style.display = "none";
    }
}

function ShowHideValidationQuickTip(fieldname, message, valid)
{
    if(valid)
    {
        if(document.getElementById("warn_" + fieldname) && document.getElementById("msg_" + fieldname))
        {
            document.getElementById("warn_" + fieldname).style.display = "none";
            document.getElementById("msg_" + fieldname).style.display = "none";
            document.getElementById("msg_" + fieldname).innerHTML = "";
        }
        if(document.getElementById("info_" + fieldname))
        {
            document.getElementById("info_" + fieldname).style.display = "none";
        }
        if(document.getElementById("ok_" + fieldname))
        {
            document.getElementById("ok_" + fieldname).style.display = "block";
        }
        
    }
    else
    {
        if(document.getElementById("info_" + fieldname))
        {
            document.getElementById("info_" + fieldname).style.display = "none";
        }
        if(document.getElementById("ok_" + fieldname))
        {
            document.getElementById("ok_" + fieldname).style.display = "none";
        }
        
        if(document.getElementById("warn_" + fieldname) && document.getElementById("msg_" + fieldname))
        {
            document.getElementById("warn_" + fieldname).style.display = "block";
            
            document.getElementById("warn_" + fieldname).onmouseover = function()
            {
                document.getElementById("msg_" + fieldname).style.display = "block";
                document.getElementById("msg_" + fieldname).innerHTML = message;
            }
            document.getElementById("warn_" + fieldname).onmouseout = function()
            {
                document.getElementById("msg_" + fieldname).style.display = "none";
                document.getElementById("msg_" + fieldname).innerHTML = "";
            }
        }
    }
}

