//Ajax request aanmaken
function createRequest() {
    try {
        request = new XMLHttpRequest();
    } catch (tryMS) {
        try {
            request = new ActiveXObject("Msxml2.XMLHTTP");
        } catch (otherMS) {
            try {
                request = new ActiveXObject("Microsoft.XMLHTTP");
            } catch (failed) {
                request = null;
            }
        }
    }
    return request;
}
//Eventhandler toevoegen met IE compabiliteit.

function addEventHandler(obj, eventName, handler) {
    if (document.attachEvent) {
        obj.attachEvent("on" + eventName, handler);
    } else if (document.addEventListener) {
        obj.addEventListener(eventName, handler, false);
    }
}
//
function getActivatedObject(e) {
    var obj;
    if (!e) {
        // early version of IE
        obj = window.event.srcElement;
    } else if (e.srcElement) {
        // IE 7 or later
        obj = e.srcElement;
    } else {
        // DOM Level 2 browser
        obj = e.target;
    }
    return obj;
}

//Validatie contact form
function versturen(){
    /******************Variabelen invoervelden******************************/
    var veld_name=document.getElementById('from');
    var veld_email=document.getElementById('email');
    var veld_subject=document.getElementById('subject');
    var veld_contents=document.getElementById('contentscontactform');

    var naam=veld_name.value;
    var email=veld_email.value;
    var onderwerp=veld_subject.value;
    var inhoud=veld_contents.value;
    var message="fatal error: please give your correct details. The self destruct \n\
                 sequence has been initiated.";

    var divOutput = document.getElementById('output');
    /******************Testen van getElementById()**************************/
    leegNode(divOutput)
    if (typeof(getElementById)===undefined){
        alert("Your browser can't deal with this form.");
    }
    else {
        /******************Valideren van input veld name************************/
        if ((naam==""||naam==null)||(!isNaN(naam)||naam.charAt(0)=='')){
            divOutput.innerHTML=message;

        }
        /******************Valideren van input veld email***********************/
        else if ((email==""||email==null)||(!isNaN(email)||email.charAt(0)=='')){
            divOutput.innerHTML=message;
        }
        else if (noAtSign( email )) {
            divOutput.innerHTML=message;
        }
        else if (nothingBeforeAt(email)) {
            divOutput.innerHTML=message;
        }
        else if (noLeftBracket(email)) {
            divOutput.innerHTML=message;
        }
        else if (noRightBracket(email)) {
            divOutput.innerHTML=message;
        }
        else if (noValidPeriod(email)) {
            divOutput.innerHTML=message;
        }
        else if (noValidSuffix(email)) {
            divOutput.innerHTML=message;
        }
        //
        /******************Valideren van input veld subject*********************/
        else if ((onderwerp==""||onderwerp==null)||(!isNaN(onderwerp)||onderwerp.charAt(0)=='')){
            divOutput.innerHTML=message;
        }
        /*******************Valideren van input veld contents*******************/
        else if ((inhoud==""||inhoud==null)||inhoud.charAt(0)==''){
            divOutput.innerHTML=message;
        }
        /*******************Inhoud is gevalideerd, het zenden kan beginnen********/
        else {
            var request=createRequest();
            if (request == null){
                alert ("Unable to create request object.");
                return;
            }
            else{
                var url = "../business/sendMail.php?maildata=" + naam + "&email=" + email + "&onderwerp=" + onderwerp + "&inhoud=" + inhoud;
                request.onreadystatechange = registrationProcessed;
                request.open("GET", url, true);
                request.send(null);
            }
        }
    }
}
function registrationProcessed() {
    if (request.readyState == 4) {
        if (request.status == 200) {
            var myArray = new Array();
            myArray = request.responseText;
            document.getElementById('output').innerHTML =
            request.responseText;
        }
    }
}
/**********Onderliggende functies voor het valideren van email**********/
function checkvalidation (formField) {
    if ( checkValidation ( formField ) == true ) {
    }
    return ( false );
}

function stringEmpty (formField) {
    // CHECK THAT THE STRING IS NOT EMPTY

    if ( formField.length < 1 ) {

        return ( true );
    } else {

        return ( false );
    }
}

function noAtSign (formField) {
    // CHECK THAT THERE IS AN '@' CHARACTER IN THE STRING
    if (formField.indexOf ('@', 0) == -1) {
        return ( true )
    } else {
        return ( false );
    }
}
function nothingBeforeAt (formField) {
    // CHECK THERE IS AT LEAST ONE CHARACTER BEFORE THE '@' CHARACTER
    if ( formField.indexOf ( '@', 0 ) < 1 ) {
        return ( true )
    } else {
        return ( false );
    }
}
function noLeftBracket (formField) {
    // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN CHECK FOR LEFT BRACKET
    if ( formField.indexOf ( '[', 0 ) == -1 && formField.charAt (formField.length - 1) == ']') {
        return ( true )
    } else {
        return ( false );
    }
}
function noRightBracket (formField) {
    // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN CHECK FOR RIGHT BRACKET
    if (formField.indexOf ( '[', 0 ) > -1 && formField.charAt (formField.length - 1) != ']') {
        return ( true );
    } else {
        return ( false );
    }
}
function noValidPeriod (formField) {

    // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN WE ARE NOT INTERESTED

    if (formField.indexOf ( '@', 0 ) > 1 && formField.charAt (formField.length - 1 ) == ']')
        return ( false );
    // CHECK THAT THERE IS AT LEAST ONE PERIOD IN THE STRING
    if (formField.indexOf ( '.', 0 ) == -1)
        return ( true );
    return ( false );
}

function noValidSuffix(formField) {
    // IF EMAIL ADDRESS IN FORM 'user@[255,255,255,0]', THEN WE ARE NOT INTERESTED
    if (formField.indexOf('@', 0) > 1 && formField.charAt(formField.length - 1) == ']') {
        return ( false );
    }
    // CHECK THAT THERE IS A TWO OR THREE CHARACTER SUFFIX AFTER THE LAST PERIOD
    var len = formField.length;
    var pos = formField.lastIndexOf ( '.', len - 1 ) + 1;
    if ( ( len - pos ) < 2 || ( len - pos ) > 4 ) {
        return ( true );
    } else {
        return ( false );
    }
}
//TODO submitting the message to the server for sending after validation.
function submitMail(){
    var request = createRequest();
    if (request == null){
        alert ("Unable to create request object.");
        return;
    }

}
// JavaScript library
/********************** DOM functies *********************/
function leegNode(objNode){
    /*verwijdert alle inhoud/children van een Node
	@ objNHode: node, verplicht, de node die geleegd wordt
	*/
    while(objNode.hasChildNodes()){
        objNode.removeChild(objNode.firstChild);
    }
}

/*Datum, tijd functies*/
//globale datum objecten
var vandaag = new Date();

function getVandaagStr(){
    //returnt een lokale datumtijdstring

    var strNu = "Momenteel: " + vandaag.toLocaleDateString() + ", ";
    strNu += vandaag.toLocaleTimeString();
    return strNu;
}
//------------------------------------------------------------------
//------------datum arrays---------------
//dagen volgens getDay() volgorde
var arrWeekdagen=new Array('zondag', 'maandag', 'dinsdag', 'woensdag', 'donderdag', 'vrijdag', 'zaterdag');

//vervang feb dagen voor een schrikkeljaar
var arrMaanden= new Array(['januari', 31], ['februari', 28], ['maart', 31], ['april', 30], ['mei', 31], ['juni', 30], ['juli', 31], ['augustus', 31], ['september', 30], ['oktober', 31], ['november', 30], ['december', 31]);

function isSchrikkeljaar(jaar){
    /*test voor schrikkeljaar
	jaar: number, verplicht
	return: boolean
	*/
    if (!isNaN(jaar)){
        if (jaar%4===0){
            eindwaarde=true;
            if(jaar%100===0){
                eindwaarde=false;
                if(jaar%400===0){
                    eindwaarde=true;
                }
            }
        }
    }
    return eindwaarde;
}
//-----------------------cookies------------------------------
function setCookie(naam, waarde, dagen){
    /*plaatst een cookie

naam: cookienaam;
waarde: de inhoud van het cookie
dagen: optioneel, het aantal dagen dat het cookie geldig blijft vanaf nu
	   indien afwezig wordt het een session cookie
*/
    var verval = "";
    if(dagen){
        var vandaag = new Date();
        var vervalDatum = new Date(vandaag.getTime()+dagen*24*60*60*1000);
        verval = vervalDatum.toUTCString();
    }
    document.cookie = naam + "=" + waarde + ";expires=" + verval;
}
//--------------------------------------------------------------
function getCookie(naam){
    /*leest een cookie

naam: cookienaam
*/
    var zoek = naam + "=";
    if(document.cookie.length>0){
        var begin = document.cookie.indexOf(zoek);
        if (begin!=-1){
            begin +=zoek.length;
            var einde = document.cookie.indexOf(";", begin);
            if (einde==-1){
                einde=document.cookie.length;
            }
            return document.cookie.substring(begin,einde);
        }
    }
}
//--------------------------------------------------------------
function clearCookie(naam){
    /*
verwijdert een cookie

naam: cookienaam
*/
    setCookie(naam,"",-1);
}
//-------------------------------------------------------------
/*******************Validatie of een reeks karakters numeriek is*****************/
function isGetal(waarde){
    //valideert een waarde als Number
    return re_decGetal.test(waarde); //floating point number
}
//----------------------------------------------------------------------
//******************Validatie of een reeks karakters integers zijn****************/
function isInteger(waarde){
    /*
 *    valideert een geheel getal
 *    @waarde string te testen
 *    @return boolean
 */
    return re_integer.test(waarde); //integer
}
/******************ParentNodeZoeker***********************************/
function zoekParent(n,strE){
    /*
	returnt de eerstvolgende parentNode van een bepaald elementtype
	*
	@param n		startnode van wie de parent gezocht wordt
	@param strE		stringelementtype, vb "TR"
	@return Node/null
	*/
    while(n=n.parentNode){ //zolang dit lukt nemen we onmiddelijjk de parentNode
        if(n.nodeName.toLowerCase()==strE.toLowerCase()){
            return n;
        }
    }
    return null;
}
/*****************getElementsByClass******************************************/
function getElementsByClassName(classname) {
    /*zoekt element van een bepaalde CSS class
* @classname: string
* @return: collection (array van nodes)
*/
    var a=[];
    var re=new RegExp('\\b' + classname + '\\b');
    var els=document.getElementsByTagName("*");
    var j=els.length;
    for(var i=0; i<j; i++)
        if(re.test(els[i].className)){
            a.push(els[i]);
        }
    return a;
}
/****************************Regular Expressions********************************/

var re_datum1=/^\d{4}-[0-9]|[0,1,2][0-9]-[0-9]|[0,1,2][0-9]|3[0,1]$/; //yyyy-mm-dd
var re_datum2=/^[0-9]|[0,1,2][0-9]|3[0,1]\/[\d]|1[0,1,2]\/\d{4}$/; // d/m/yyyy
var re_integer=/^[-+]?[0-9]*\.?[0]*$/; //geheel getal
var re_decGetal=/^[-+]?[0-9]*\.?[0-9]+/; //floating point

/***************************isDatum**********************************/
function isDatum(c,re){
    /* test voor datumformaten
     * @c elementNode input/textarea control
     * @re regular expression
     * @return boolean
     */
    if((c.nodeName.toLowerCase()=="textarea")||((c.nodeName.toLowerCase()=="input")&&(c.type=="text"))){
        return re.test(c.value);
    }
    else {
        throw new Error(c.nodeName + ": verkeerd formulier element");
        return false;
    }
}
