/*
 * Used to validate forms.
 *
 * Author: J.Brinkman - TAB Den haag
 * Version: 0.5
 * Date: 28-09-2010
 */

window.onload = function() {init();} 


function init() { 
	document.getElementById('aanvraagnummer').style.display = "none"; 
}
	

/*
 * Returns true if it is a valid emailaddresss.
 */
function isValidEmail(str) {
   return (str.indexOf(".") > 0) && (str.indexOf("@") > 0);
}


/*
 * Returns true if it is a valid email addresss.
 */
function isValidPhoneNumber(str) {
    var chars = " -+()0123456789";
    for (var i = 0; i < str.length; ++i) {
        if (chars.indexOf(str.charAt(i)) == -1) {
            return false;
        }
    }
    return true;
}

function removeAllOptions(selectbox)
{
 var i;
 for(i=document.getElementById('klantnummertype').options.length-1;i>=0;i--)
 {
  document.getElementById('klantnummertype').remove(i);
 }
}

function addOption_klantenlist(selectbox){
var nummertype = new Array("Relatienummer","BSN","KvK","UBN","Geen");

if (document.getElementById('onderwerp').value == "Gecombineerde opgave") {
	//Toon alleen eerste element, als Gecombineerde opgave is geselecteerd,
	//dus Relatienummer in listbox klantennummerlistbox: nummertype[0]
  document.getElementById('klantnummertype').options.add(new Option(nummertype[0],nummertype[0]));
  
  //Op verzoek van Bert textbox+label alleen tonen als onderwerp gecombineerde opgave is geselecteerd
  document.getElementById('aanvraagnummer').style.display = "inline";
  
 }else{
 	//Als ander item bij onderwerp is geselecteerd alles uit array tonen
	 for (var i=0; i < nummertype.length;++i){
    document.getElementById('klantnummertype').options.add(new Option(nummertype[i],nummertype[i]));
   }
   //Op verzoek van Bert v Loon textbox+label Aanvraagnummer alleen tonen als onderwerp gecombineerde opgave is geselecteerd
   document.getElementById('aanvraagnummer').style.display = "none";
 }	
}

function setKlantnummer(){
//Leeg eerst alle huidige items van listbox Klantnummer:
 removeAllOptions();	
//Daarna vullen van listbox Klantnummer afhankelijk van wat er bij listbox onderwerp is geselecteerd:
 addOption_klantenlist();	
}

/*
 * Removes old warning messages.
 */
function remove_warnings(labels) {
    for (var i = 0; i < labels.length; ++i) {
        if (labels[i] != undefined && labels[i] != null) {
            var labelText = labels[i].innerHTML;
            if (labelText.indexOf("*") > -1) {
                labels[i].className = "";
                if (labels[i].previousSibling &&
                    labels[i].previousSibling.className == "foutmelding") {
                    labels[i].parentNode.removeChild(labels[i].previousSibling);
                }
            }
        }
    }
    var warn = document.getElementById("warn");
    if (warn != null) {
        warn.parentNode.removeChild(warn);
    }
}



/*
 * Trim strings.
 */
function trim(value) {
  value = value.replace(/^\s+/,'');
  value = value.replace(/\s+$/,'');
  return value;
}



/*
 * Retrieve first form input node when given a label node. Searches through siblings/children.
 * Return null when not found.
 */
function getFirstFormInput(node) {
    if (node.nodeType != 1) {
        return null;
    }
    // Parameter node?
    if (node.tagName.toUpperCase() == "INPUT" ||
        node.tagName.toUpperCase() == "TEXTAREA" ||
        node.tagName.toUpperCase() == "SELECT") {
        return node;
    }
    // Child node?
    var cNodes = node.childNodes;
    for (var i = 0; i < cNodes.length; ++i) {
        var cNode = getFirstFormInput(cNodes[i]);
        if (cNode != null) {
            return cNode;
        }
    }

    // Sibling node?
    var sNode = node.nextSibling;
    while (sNode != undefined) {
        var fNode = getFirstFormInput(sNode);
        if (fNode != null) {
            return fNode;
        }
        sNode = sNode.nextSibling;   
    }
    return null;
}


/*
 * Takes an input type as parameter and returns true if it is empty, otherwise
 * return false.
 */
function input_empty(inputType) {
    if (inputType.tagName.toUpperCase() == "INPUT" && inputType.type.toUpperCase() == "TEXT") {
        return trim(inputType.value) == "";
    }
    else if (inputType.tagName.toUpperCase() == "TEXTAREA") {
        return trim(inputType.value) == "";
    }
    else if (inputType.tagName.toUpperCase() == "SELECT") {
    	return inputType.selectedIndex == 0;
    }
    else if (inputType.tagName.toUpperCase() == "INPUT" && inputType.type.toUpperCase() == "RADIO") {
        inputType = inputType.parentNode;
        var cNodes = inputType.childNodes;
        for (var i = 0; i < cNodes.length; ++i) {
            if (cNodes[i].nodeType == 1 && cNodes[i].nodeName.toUpperCase() == "INPUT") {
                if (cNodes[i].checked) {
                    return false;
                }
            }
        }
        return true;
    }
    return false;
}



/*
 * This function adds a warning message before a label.
 * And the label will be colored red.
 */
function addWarning(pNode, label, message) {
    label.className = "foutmarkering";
    var new_element = document.createElement('p');
    new_element.className = "foutmelding";
		new_element.innerHTML = "<strong class='waarschuwingsteken'>!</strong>" + message;
		pNode.insertBefore(new_element, label);
}



/*
 * Find all label tags, and check if they are required by checking if the
 * label contains an asterisk (*). If so, check if the corresponding form
 * field is not empty. Generate a standard error message in the label and
 * a global error message next to the send button.
 */
function validate_form(form) {
    var valid = true;
    var item = "";
    var arr = form.getElementsByTagName("label");
    remove_warnings(arr);
    for (var x = 0; x < arr.length; ++x) {
        if (arr[x] != undefined && arr[x] != null) {
            item = arr[x].firstChild.nodeValue;
            // If label contains an asterisk (*) it is required.
            if (item.indexOf("*") > -1) {
                // Get the first associated input tag.
                var inputType = getFirstFormInput(arr[x]);
                if (inputType == null) {
                    continue;
                }
                if (input_empty(inputType)) {
								    if (item.match("Aanspreekvorm") != null) {
								    	  addWarning(inputType.parentNode.parentNode, arr[x], "U heeft geen aanspreekvorm ingevuld.");
								    } else if (item.match("Geslacht") != null) {
								    		addWarning(inputType.parentNode.parentNode, arr[x], "U heeft geen geslacht ingevuld.");
								    		
								    } else {
									      addWarning(inputType.parentNode, arr[x], "U heeft geen " + item.toLowerCase().substring(0, item.indexOf("*")) + " ingevuld.");
									  }
										
                    valid = false;
                }
                
                else if (item.match("mailadres") != null && !isValidEmail(inputType.value)) {
                    // Email not correct.
                    addWarning(inputType.parentNode, arr[x], "U heeft geen geldig " + item.toLowerCase() + " ingevuld.");
                    valid = false;
                }
                else if (item.match("elefoonnummer") != null && !isValidPhoneNumber(inputType.value)) {
                    // Phone number not correct.
                    addWarning(inputType.parentNode, arr[x], "U heeft geen geldig " + item.toLowerCase() + " ingevuld.");
                    valid = false;
                }
            }
        }
    }
    if (!valid) {
        var warning = document.createElement('p');
				warning.id = "warn";
				warning.className = "foutmelding";
				warning.innerHTML = "<strong class='waarschuwingsteken'>!</strong>Een aantal verplichte velden is nog niet of niet juist ingevuld.";
        form.insertBefore(warning, form.firstChild);
    }
    return valid;
}
