function validateForm(form)
{
    if(!document.getElementById || !document.createTextNode) {return;}

    var errID = 'formErr';
	var errMsg = 'Ett eller flera obligatoriska fält markerade med stjärna * är tomma. Fyll i dem och försök igen';
    var errDateMsg = 'Tidigaste datum som kan anges är sju dagar från beställning.\nAnges inget datum aktiveras partnerskapet vid mottagen betalning.';
    var errEmailMsg = 'Fel i e-postadress.';
	var bErr = false;
	var bDate = true;

    //Check required fields
	if(document.getElementById('required')) {

		//Check for shader
        if(document.getElementById('gift')) {
            if(!document.getElementById('shader')) {
                document.getElementById('required').value += ',gift_surname,gift_lastname';
                if (document.getElementById('gift_date_year').value != '' && document.getElementById('gift_date_month').value != '' && document.getElementById('gift_date_day').value != '') {
                    bDate = validateDate(document.getElementById('gift_date_year').value, document.getElementById('gift_date_month').value, document.getElementById('gift_date_day').value);
                    if (!bDate) {
                        alert(errDateMsg);
                        return false;
                    }
                }
            } else {
                document.getElementById('required').value.replace(',gift_surname,gift_lastname', '');
            }
        }

        var reqfields = document.getElementById('required').value.split(',');

        if (document.getElementById(errID)) {
			var errElement = document.getElementById(errID);
			errElement.parentNode.removeChild(errElement);
		}

		for(var i = 0; i < reqfields.length; i++) {
			//Check if the field does exists
			var f = document.getElementById(reqfields[i]);
			if(!f.type) {continue;}
			//Check the field according to its type
			switch(f.type.toLowerCase()) {
				case 'text':
					if (f.value == '' && f.getAttribute('rel') != 'email') {addError(f)}
					if (f.getAttribute('rel') == 'email' && !checkEmailAddress(f.value)) {
                        addError(f);
                    } else if (f.getAttribute('rel') == 'email' && checkEmailAddress(f.value)) {
                        var verifyfield = document.getElementById(reqfields[i + 1]);

                        if ((verifyfield.getAttribute('rel') == 'email_repeat') && (f.value != verifyfield.value)) {
                            addError(verifyfield, errEmailMsg);
                        }
                    }
					break;
				case 'textarea':
					if (f.value == '') {addError(f)}
					break;
				case 'checkbox':
					if (!f.checked) {addError(f)}
					break;
				case 'select-one':
					if (!f.selectedIndex && f.selectedIndex == 0) {addError(f)}
					//if ((!f.selectedIndex && f.selectedIndex == 0) || f.value == null || f.value == '') {addError(f)}
					break;
			}
		}
		//return !document.getElementById(errID);
		return !bErr;
	}

	function addError(field, msg)
	{
	    if (!bErr) {
            msg = (!msg) ? errMsg : msg;
			alert(msg);
			bErr = true;
		}

	    /*
		if (!document.getElementById(errID)) {
		    //Create error message and insert before form
            var errElement = document.createElement('div');
			errElement.id = errID;
			var newp = document.createElement('p');
			newp.appendChild(document.createTextNode(errMsg))
			errElement.appendChild(newp);
			form.parentNode.insertBefore(errElement, form)
		}
		*/
	}

    function validateDate(year, month, day) {
        var date = new Date(year, month - 1, day);
        var currentDate = new Date();
        var currentDate = new Date(currentDate.getFullYear(), currentDate.getMonth(), currentDate.getDate() + 7);

        if (date < currentDate) {
            return false;
        }

        return true;
    }

	function checkEmailAddress(str)
	{
		return str.match(/^[\w-]+(\.[\w-]+)*@([\w-]+\.)+[a-zA-Z]{2,7}$/);
	}
	return false;
}
