var DailyMania = {


    start: function(){
    
        // JS layers alleen verbergen als JS ingeschakeld is
        var oBody  = document.body;
        oBody.className = oBody.className ? oBody.className + ' js' : 'js';  
    
        DailyMania.pageHit();
        if ($('FormHandler')){
            
            DailyMania.initForm();
            
            if($('datepicker2')){
                DailyMania.calendarX = getOffsetLeft($('datepicker2'));
                DailyMania.calendarY = getOffsetTop($('datepicker2')); 
            }
        
            if($('datepicker')){
                DailyMania.calendarX = getOffsetLeft($('datepicker'));
                DailyMania.calendarY = getOffsetTop($('datepicker')); 
            }
            
                
        }
        
    },
    
    initForm: function(){
    
        
    
        // velden read-only zodat alleen de datepicker gebruikt kan worden
        var readOnly = ['bezorgdatum_dag', 'bezorgdatum_maand', 'bezorgdatum_jaar',
                        'ophaaldatum_dag', 'ophaaldatum_maand', 'ophaaldatum_jaar'];
    
        var i = readOnly.length;
        while(i--){
            if ($(readOnly[i])){
                $(readOnly[i]).readOnly = true;
            }
        }
        
    
        var oForm = $('FormHandler');
        oForm.onsubmit = function(){
        
            var bError = false;
         
            // algemene voorwaarden
            if ($('akkoord_voorwaarden_1')){
                if (!$('akkoord_voorwaarden_1').checked){
                    DailyMania.setSign($('akkoord_voorwaarden_1'), false, 'Wij delen uw informatie niet met derden');    
                    bError = true;
                }
            }
            if ($('akkoord_voorwaarden_2')){
                if (!$('akkoord_voorwaarden_2').checked){
                    DailyMania.setSign($('akkoord_voorwaarden_2'), false, 'Wij delen uw informatie niet met derden');    
                    bError = true;
                }
            }
            
            var aFieldErrors = [];  
            
            var i = DailyMania.fields.length;
            while(i--){
                if($(DailyMania.fields[i].field)){
                    // alle velden valideren
                    var oField        = $(DailyMania.fields[i].field);
                    oField.validator  = DailyMania.fields[i].validator;
                    oField.melding    = DailyMania.fields[i].melding;
                    
                    var bValidated = DailyMania.validate(oField, oField.validator, oField.melding);
                    if (!bValidated){
                        aFieldErrors.push(oField);
                        bError = true;
                    } 
                }
            }
            
           
            
            if (bError){
                // geen submit
                // focus naar eerste veld met error
                try {
                    aFieldErrors[aFieldErrors.length-1].focus();
                } catch(e){}
                
                return false;
            }  else {
                return true;
            }
        
        }
          
        // algemene voorwaarden validatie  
        if ($('akkoord_voorwaarden_1')){
            $('akkoord_voorwaarden_1').onclick = function(){
                if (this.checked){
                    DailyMania.setSign($('akkoord_voorwaarden_1'), true, 'Wij delen uw informatie niet met derden');    
                } else {
                    DailyMania.setSign($('akkoord_voorwaarden_1'), false, 'Wij delen uw informatie niet met derden');
                }
            }
        }
        if ($('akkoord_voorwaarden_2')){
            $('akkoord_voorwaarden_2').onclick = function(){
                if (this.checked){
                    DailyMania.setSign($('akkoord_voorwaarden_2'), true, 'Wij delen uw informatie niet met derden');    
                } else {
                    DailyMania.setSign($('akkoord_voorwaarden_2'), false, 'Wij delen uw informatie niet met derden');
                }
            }
        }
    
        // veld validatie
        DailyMania.fields = [       {"field":   "voornaam",             "validator":    "notEmpty",     "melding" : "Vul uw voornaam in"},
                                    {"field":   "achternaam",           "validator":    "notEmpty",     "melding" : "Vul uw achternaam in"},
                                    {"field":   "email",                "validator":    "email",        "melding" : "Dit e-mailadres is niet geldig"},
                                    
                                    {"field":   "geboortedatum_dag",    "validator":    "birthDay",     "melding" : "Dit is geen geldige datum"},  
                                    {"field":   "geboortedatum_maand",  "validator":    "birthMonth",   "melding" : "Dit is geen geldige datum"},  
                                    {"field":   "geboortedatum_jaar",   "validator":    "birthYear",    "melding" : "Dit is geen geldige datum"},  
                                    
                                    {"field":   "telefoon",             "validator":    "telefoon",     "melding" : "Dit telefoonnummer is niet geldig"},  
                                    
                                    {"field":   "f_straat",             "validator":    "notEmpty",     "melding" : "Vul uw straat in"},
                                    {"field":   "f_huisnummer",         "validator":    "notEmpty",     "melding" : "Vul uw huisnummer in"},
                                    {"field":   "f_postcode",           "validator":    "postcode",     "melding" : "Dit is geen geldige postcode"},
                                    {"field":   "f_plaats",             "validator":    "notEmpty",     "melding" : "Vul uw woonplaats in"}, 
                                    
                                    {"field":   "b_straat",             "validator":    "notEmpty",     "melding" : "Vul uw straat in"},  
                                    {"field":   "b_huisnummer",         "validator":    "notEmpty",     "melding" : "Vul uw huisnummer in"},
                                    {"field":   "b_postcode",           "validator":    "postcode",     "melding" : "Dit is geen geldige postcode"},
                                    {"field":   "b_plaats",             "validator":    "notEmpty",     "melding" : "Vul uw woonplaats in"} 
                                    
                                  ];
                      
        var i = DailyMania.fields.length;
        while(i--){
            if ($(DailyMania.fields[i].field)){
                var oField          = $(DailyMania.fields[i].field);
                oField.validator    = DailyMania.fields[i].validator;
                oField.melding      = DailyMania.fields[i].melding;
                
                oField.onblur = function(){
                    // validate on blur
                    DailyMania.validate(this, this.validator, this.melding);
                }
            }
            
        }
        
        // config voor YUI calendar
        var shortMonths     = ["Jan", "Feb", "Mar", "Apr", "Mei", "Jun", "Jul", "Aug", "Sep", "Okt", "Nov", "Dec"];
        var longMonths      = ["Januari", "Februari", "Maart", "April", "Mei", "Juni", "Juli", "Augustus", "September", "Oktober", "November", "December"];
        var weekdaysC       = ["Z", "M", "D", "W", "D", "V", "Z"];
        var weekdaysShort   = ["Zo", "Ma", "Di", "Wo", "Do", "Vr", "Za"];
        var weekdaysMed     = ["Zon", "Maa", "Din", "Woe", "Don", "Vrij", "Zat"];
        var weekdaysLong    = ["Zondag", "Maandag", "Dinsdag", "Woensdag", "Donderdag", "Vrijdag", "Zaterdag"];
        
        // YUI calendar widget
        if ($('calendar')){
            DailyMania.cal = new YAHOO.widget.Calendar("calendar");   

            DailyMania.cal.cfg.setProperty("selected", bezorgDatumDefault,false); 
            DailyMania.cal.cfg.setProperty("mindate", bezorgDatumStart,false); 
            DailyMania.cal.cfg.setProperty("maxdate", bezorgDatumEind,false); 
            
            // Date labels
            DailyMania.cal.cfg.setProperty("MONTHS_SHORT",   shortMonths);   
            DailyMania.cal.cfg.setProperty("MONTHS_LONG",    longMonths);   
            DailyMania.cal.cfg.setProperty("WEEKDAYS_1CHAR", weekdaysC);   
            DailyMania.cal.cfg.setProperty("WEEKDAYS_SHORT", weekdaysShort);   
            DailyMania.cal.cfg.setProperty("WEEKDAYS_MEDIUM",weekdaysMed);   
            DailyMania.cal.cfg.setProperty("WEEKDAYS_LONG",  weekdaysLong);   

            DailyMania.cal.selectEvent.subscribe(function (p_sType, p_aArgs) {   
       
                 var aDate;   
           
                 if (p_aArgs) {   
                            
                     aDate = p_aArgs[0][0];   
                            
                     $('bezorgdatum_maand').value = aDate[1];   
                     $('bezorgdatum_dag').value = aDate[2];   
                     $('bezorgdatum_jaar').value = aDate[0];   
           
                 }    
                 // hide
                 $('calendar_container').style.cssText = 'position: absolute; left:-1000px;';    
            
            });   
            
            // disable alle zondagen
            DailyMania.cal.addWeekdayRenderer(1, DailyMania.cal.renderBodyCellRestricted);
            // disable alle zaterdagen 
            DailyMania.cal.addWeekdayRenderer(7, DailyMania.cal.renderBodyCellRestricted); 

            // disable restricties (1e kerstdag, nieuwjaar, etc)
            var i = bezorgDatumRestrict.length;
            while(i--){
                DailyMania.cal.addRenderer(bezorgDatumRestrict[i], DailyMania.cal.renderBodyCellRestricted);
            }

            DailyMania.cal.render();  
        }
        
        if($('calendar2')){
            // YUI calendar widget
            DailyMania.cal2 = new YAHOO.widget.Calendar("calendar2");   

            DailyMania.cal2.cfg.setProperty("selected", ophaalDatumDefault,false); 
            DailyMania.cal2.cfg.setProperty("mindate", ophaalDatumStart,false); 
            DailyMania.cal2.cfg.setProperty("maxdate", ophaalDatumEind,false); 

            // Date labels
            DailyMania.cal2.cfg.setProperty("MONTHS_SHORT",   shortMonths);   
            DailyMania.cal2.cfg.setProperty("MONTHS_LONG",    longMonths);   
            DailyMania.cal2.cfg.setProperty("WEEKDAYS_1CHAR", weekdaysC);   
            DailyMania.cal2.cfg.setProperty("WEEKDAYS_SHORT", weekdaysShort);   
            DailyMania.cal2.cfg.setProperty("WEEKDAYS_MEDIUM",weekdaysMed);   
            DailyMania.cal2.cfg.setProperty("WEEKDAYS_LONG",  weekdaysLong);   

            DailyMania.cal2.selectEvent.subscribe(function (p_sType, p_aArgs) {   
       
                 var aDate;   
           
                 if (p_aArgs) {   
                            
                     aDate = p_aArgs[0][0];   
                            
                     $('ophaaldatum_maand').value = aDate[1];   
                     $('ophaaldatum_dag').value = aDate[2];   
                     $('ophaaldatum_jaar').value = aDate[0];   
           
                 }    
                 $('calendar_container2').style.cssText = 'position: absolute; left:-1000px;';    
            
            });   

            // disable zondagen
            // op zondag geopend!!
            //DailyMania.cal2.addWeekdayRenderer(1, DailyMania.cal2.renderBodyCellRestricted); 

            // disable restricties
            var i = ophaalDatumRestrict.length;
            while(i--){
                DailyMania.cal2.addRenderer(ophaalDatumRestrict[i], DailyMania.cal2.renderBodyCellRestricted);
            }
            
            DailyMania.cal2.render(); 
        }       
        
        // datepicker knop
        if ($('datepicker')){
            $('datepicker').onclick = function(e){
                DailyMania.displayDatePicker();
                stopClick(e);
            }
        }
        if ($('datepicker2')){
            $('datepicker2').onclick = function(e){
                DailyMania.displayDatePicker2();
                stopClick(e);
            }
        }
        
        // prevent default click on document
        if($('calendar_container')){
            $('calendar_container').onclick = function(e){
               stopClick(e);
            }
        }
        // prevent default click on document
        if($('calendar_container2')){ 
            $('calendar_container2').onclick = function(e){
               stopClick(e);
            }
        }
        
        if($('bezorgdatum_dag')){
            // open de calendar wanneer één van de velden voor de datum focus heeft 
            $('bezorgdatum_dag').onclick    = 
            $('bezorgdatum_maand').onclick  = 
            $('bezorgdatum_jaar').onclick   = 
            $('bezorgdatum_dag').onfocus    =
            $('bezorgdatum_maand').onfocus  =
            $('bezorgdatum_jaar').onfocus   =
            function(e){
                DailyMania.displayDatePicker(); 
                stopClick(e);     
            }
        }
        
        if($('ophaaldatum_dag')){
            // open de calendar wanneer één van de velden voor de datum focus heeft 
            $('ophaaldatum_dag').onclick    = 
            $('ophaaldatum_maand').onclick  = 
            $('ophaaldatum_jaar').onclick   = 
            $('ophaaldatum_dag').onfocus    =
            $('ophaaldatum_maand').onfocus  =
            $('ophaaldatum_jaar').onfocus   =
            function(e){
                DailyMania.displayDatePicker2(); 
                stopClick(e);     
            }
        }
        
        
        // sluit calendar wanneer buiten de calendar geklikt wordt
        document.onclick = function(){
             DailyMania.hideDatePicker();
             DailyMania.hideDatePicker2();
        }
        
        // swap thuizbezorgen / ophalen bij invullen
        if($('levering_4')){
            $('levering_4').onclick = function(){
                if (this.checked){
                    // zelf ophalen
                    $('ophaaldatum_div').style.display = 'block';
                    $('tnt_tekst').style.display = 'none';
                    $('bezorgkosten1').style.display = 'none';
                    $('bezorgkosten2').style.display = 'none';
                    $('bezorgdatum_div').style.display = 'none';
                    $('bezorg_adres_wijkt').style.display = 'none'; 
                    $('bezorgadres_container').style.display = 'none'; 
                    $('totaal_prijs_value').innerHTML = productPrijs;  
                    // bezorgadres kan niet afwijken bij zelf ophalen
                    $('bezorg_adres_wijkt_af_1').checked = false;
                }
            }
        }
        // swap thuisbezorgen / ophalen on load zodat een refresh de juiste waarden laat zien
        if($('levering_4')){ 
            if ($('levering_4').checked){
                $('ophaaldatum_div').style.display = 'block'; 
                $('tnt_tekst').style.display = 'none';    
                $('bezorgkosten1').style.display = 'none';
                $('bezorgkosten2').style.display = 'none';
                $('bezorgdatum_div').style.display = 'none';   
                $('bezorg_adres_wijkt').style.display = 'none';     
                $('bezorgadres_container').style.display = 'none'; 
                $('totaal_prijs_value').innerHTML = productPrijs;
                 
            } else {
                $('ophaaldatum_div').style.display = 'none';  
            }
        }
        
        if($('levering_3')){
            // update totaalprijs
            $('levering_3').onclick = function(){
                // thuisbezorgen
                if (this.checked){
                    $('ophaaldatum_div').style.display = 'none'; 
                    $('tnt_tekst').style.display = 'block';    
                    $('bezorgdatum_div').style.display = '';
                    $('bezorgkosten1').style.display = '';
                    $('bezorgkosten2').style.display = '';
                    $('bezorg_adres_wijkt').style.display = 'block';     
                    $('totaal_prijs_value').innerHTML = totaalPrijs;  
                }
            }
        }
        
        if($('bezorg_adres_wijkt_af_1')){
            // swap bezorgadres bij invullen
            $('bezorg_adres_wijkt_af_1').onclick = function(){
                if (this.checked){
                    //$('iframe2').style.clear = 'none';
                    $('bezorgadres_container').style.display = 'block';
                    //$('iframe2').style.clear = 'both';
                } else {
                    $('bezorgadres_container').style.display = 'none'; 
                }
            }
        }
        
        if($('bezorg_adres_wijkt_af_1')){
            // swap bezorgadres on load
            if ($('bezorg_adres_wijkt_af_1').checked){
                $('bezorgadres_container').style.display = 'block';    
            }
        }
        
        
        
    },
    // absolute positie
    displayDatePicker : function(){
        if($('calendar_container')){
            //$('calendar_container').style.cssText = 'position: absolute; top: ' + DailyMania.calendarY + 'px; left:' + (DailyMania.calendarX + 30) + 'px;';
            $('calendar_container').style.cssText = 'position: absolute; top: ' + 743 + 'px; left:' + (951 + 30) + 'px;';
        }
    },
    // absolute positie
    displayDatePicker2 : function(){
        if($('calendar_container2')){
            //$('calendar_container2').style.cssText = 'position: absolute; top: ' + DailyMania.calendarY + 'px; left:' + (DailyMania.calendarX + 30) + 'px;';
            $('calendar_container2').style.cssText = 'position: absolute; top: ' + 743 + 'px; left:' + (951 + 30) + 'px;';
        }
    },
    
    hideDatePicker : function(){
        if($('calendar_container')){
            $('calendar_container').style.cssText = 'position: absolute;left:-1000px;'; 
        }
    },
    hideDatePicker2 : function(){
         if($('calendar_container2')){
            $('calendar_container2').style.cssText = 'position: absolute;left:-1000px;'; 
         }
    },
        
    // custom validators
    emailValidator      : /^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i,
    postcodeValidator   : /^[0-9]{4}[A-Z]{2}$/,
    telefoonValidator   : /^[0]{1}[1-9]{1}[0-9]{8}$/,
    
    validate: function(oInput, sValidator, sMelding){
    
        
    
        // bezorgadres alleen valideren als deze afwijkt en alleen bij bezorging
        if (oInput.id.substr(0, 2) == 'b_'){
        if($('levering_4'))
            if ($('levering_4').checked){
                // zelf ophalen
                return true;
            }
            
            
            if($('bezorg_adres_wijkt_af_1')){
                if (!$('bezorg_adres_wijkt_af_1').checked){
                    // bezorgadres wijkt niet af
                    return true;
                }
            }
            
        }
        
        
    
        
        bValidated = false;
    
        switch(sValidator){
        
            case 'notEmpty': bValidated = (oInput.value != ''); 
                break;
            case 'email' : bValidated = DailyMania.emailValidator.test(oInput.value);
                break;
            case 'birthDay' : 
                if (Number(oInput.value) > 0){
                    // 08 => 8, 03 => 3 alleen bij nummers!
                    oInput.value = Number(oInput.value); 
                }
                bValidated =  oInput.value > 0 && oInput.value <= 31;
                // maand + jaar nog niet ingevuld? return, nu nog geen error
                if (bValidated && $('geboortedatum_maand').value == '' && $('geboortedatum_jaar').value == ''){
                    return true;
                }
                break;
            case 'birthMonth' : 
                if (Number(oInput.value) > 0){   
                    // 08 => 8, 03 => 3 alleen bij nummers!  
                    oInput.value = Number(oInput.value); 
                }
                bValidated =  oInput.value > 0 && oInput.value <= 12;  
                // jaar nog niet ingevuld? return, nu nog geen error
                if (bValidated && $('geboortedatum_jaar').value == ''){
                    return true;
                }
                break;
            case 'birthYear' : bValidated = (Number(oInput.value) == parseInt(oInput.value)) && oInput.value > 1900 && oInput.value <= 1998;        
                break;
            case'postcode': oInput.value = oInput.value.replace(/ /gi, '').toUpperCase(); bValidated = DailyMania.postcodeValidator.test(oInput.value);     
                break;
            case'telefoon': oInput.value = oInput.value.replace(/[^0-9]/gi, ''); bValidated = DailyMania.telefoonValidator.test(oInput.value);     
                break;    
            //default: alert('error validating fields!');  
            //    break;  
        }
        
        if (!bValidated && !oInput.onkeyup){
            // niet door validatie heengekomen, voeg validatie toe aan keyup
            oInput.onkeyup = function(){
                DailyMania.validate(this, this.validator, this.melding);    
            }
        }
        DailyMania.setSign(oInput, bValidated, sMelding);
        return bValidated;
    
    },
    
    
    //   Toon afbeelding validated / not validated op de regel van het opgegeven veld
    setSign : function(oInput, bValidated, sMelding){
    
        var targetClassName = 'line';
        var oParent = oInput.parentNode;
        while(oParent.className != targetClassName){
            // target de div waarin de volledige regel van dit veld staat
            oParent = oParent.parentNode;
        }
        // regel waaraan img toegevoegd wordt
        var oLine = oParent;
        var aImages = oLine.getElementsByTagName('img');
        var i = aImages.length;
        // eventuele bestaande afbeeldingen verwijderen
        while(i--){
            aImages[i].parentNode.removeChild(aImages[i]);
        }
        var aB = oLine.getElementsByTagName('b');
        var i = aB.length;
        // eventuele bestaande meldingen verwijderen
        while(i--){
            if (aB[i].className == 'error'){
                aB[i].parentNode.removeChild(aB[i]);
            }
        }
        
        // afbeelding toevoegen
        var img = document.createElement('img');
        img.src = 'images/correct.gif';
        img.title = 'Dit veld is correct ingevuld';
        if (!bValidated){
            img.className = 'error';
            img.src = 'images/incorrect.gif';  
            img.title = sMelding;
            
            // foutmelding in tekst
            var b = document.createElement('b');
            b.innerHTML = ' &nbsp;' + sMelding;
            b.className = 'error';
            
        }
        
        oLine.appendChild(img);
        if (!bValidated){
            oLine.appendChild(b);
        }
        
    },
    
    
    /**
     *  pageHit: statistieken
     *
     */ 
    pageHit: function(){
        p = escape(document.location.href);
        rfr = escape(document.referrer);
        if (rfr == "undefined"){ rfr = "";}
        sx = screen.width;
        sy = screen.height;
        sc = (navigator.appName.indexOf("Microsoft") > -1) ? screen.colorDepth : screen.pixelDepth;
        src = 'stats.php?p=' + p + '&rfr=' + rfr + '&sx=' + sx + '&sy=' + sy + '&sc=' + sc;
        src = '<img style="position:absolute;left:-10px;top:-10px;" src="' + src + '" width="1" height="1" border="0" alt="" />';
        document.getElementById('counter').innerHTML = src;    
    }


}

/*
General functies
*/
function $(id){
    return document.getElementById(id);
}

function stopClick(e){
    if (!e){
        var e = window.event;
    }
    e.cancelBubble = true;
    if (e.stopPropagation){
        e.stopPropagation();
    }
}

function getOffsetTop(el){
    var offsetTop = 0;
    do {
      offsetTop += el.offsetTop
    } while ((el = el.offsetParent));
    return offsetTop;
}
function getOffsetLeft(el){
    var offsetLeft = 0;
    do {
      offsetLeft += el.offsetLeft
    } while ((el = el.offsetParent));
    return offsetLeft;
}


// DOMready ipv onload vanwege trage iframes
YAHOO.util.Event.onDOMReady(function() {
    DailyMania.start();
});



function openOverlay() {
	document.getElementById('madnessOverlay').style.display = 'block';
	document.getElementById('madnessUitleg').style.display = 'block';
}

function closeOverlay() {
	document.getElementById('madnessOverlay').style.display = 'none';
	document.getElementById('madnessUitleg').style.display = 'none';
}