// JavaScript Document
function checkShipFieldsReq() {
    var arrShippingFields = new Array("shippingName","shippingLastName","shippingPhone","shippingZip","shippingAddressNr","shippingAddress","shippingCity");
    var shipFormHasValues = (document.orderform.hasValues.value.toLowerCase() == "true");
    var hasValue = false;
    var el;
    
    //for (field in arrShippingFields)
    for (var i = 0; i < arrShippingFields.length; i++) {
        if (document.getElementById(arrShippingFields[i]).value.length > 0) {
            hasValue = true;
            break;
        }
    }

    // Only change fields attributes when needed
    if (!shipFormHasValues && hasValue) {
        document.orderform.hasValues.value = "true";
    
        for (var i = 0; i < arrShippingFields.length; i++) {
            el = document.getElementById(arrShippingFields[i]);
            el.className = "required";
            
            if (el.addEventListener) { // Mozilla, Netscape, Firefox
                el.addEventListener('keyup', doValidateRef, false);
                el.addEventListener('blur', doValidateRef, false);
            }
            else if (el.attachEvent) { // IE
                el.attachEvent('onkeyup', doValidateRef);
                el.attachEvent('onblur', doValidateRef);
            }

            doValidate(el);
        }
    } else if (shipFormHasValues && !hasValue) {
        document.orderform.hasValues.value = "false";
    
        for (var i = 0; i < arrShippingFields.length; i++) {
            el = document.getElementById(arrShippingFields[i]);
            el.className = "notrequired";

        if (el.addEventListener) { // Mozilla, Netscape, Firefox
                el.removeEventListener('keyup', doValidateRef, false);
                el.removeEventListener('blur', doValidateRef, false);
            }
            else if (el.attachEvent) { // IE
                el.detachEvent('onkeyup', doValidateRef);
                el.detachEvent('onblur', doValidateRef);
            }
        }
    }
}

function checkShipFieldsReqStart() { // Run when page loads to check if it is a page refresh
    var arrShippingFields = new Array("shippingName","shippingLastName","shippingPhone","shippingZip","shippingAddressNr","shippingAddress","shippingCity");
    var shipFormHasValues = (document.orderform.hasValues.value.toLowerCase() == "true");
    var hasValue = false;
    var el;
    
    //for (field in arrShippingFields)
    for (var i = 0; i < arrShippingFields.length; i++) {
        if (document.getElementById(arrShippingFields[i]).value.length > 0) {
            hasValue = true;
            break;
        }
    }

    // set field class="required" when field has a value
    if (hasValue) {
        document.orderform.hasValues.value = "true";
    
        for (var i = 0; i < arrShippingFields.length; i++) {
            el = document.getElementById(arrShippingFields[i]);
            el.className = "required";
            
            if (el.addEventListener) { // Mozilla, Netscape, Firefox
                el.addEventListener('keyup', doValidateRef, false);
                el.addEventListener('blur', doValidateRef, false);
            }
            else if (el.attachEvent) { // IE
                el.attachEvent('onkeyup', doValidateRef);
                el.attachEvent('onblur', doValidateRef);
            }

            doValidate(el);
        }
    } else {
        for (var i = 0; i < arrShippingFields.length; i++) {
            el = document.getElementById(arrShippingFields[i]);
            el.className = "notrequired";
        }
    }
}

function FormSubmit(theform, obj) {
	var el = new YAHOO.util.Element(obj.id)
			
			//alert(el.id);
			var input_fields = el.getElementsByTagName('input');
			
	var required_fields = el.getElementsByClassName('required');	
	var error_fields = el.getElementsByClassName('error');	
	var form_error = false;
	if (document.getElementById) {
		for (i=0; i<input_fields.length; i++) {
			elem = input_fields[i]
					if (elem.value == 'Voornaam' || 
								elem.value == 'Woonplaats' ||
								elem.value == 'bijv. Amsterdam' ||
								elem.value == 'Postcode' ||
								elem.value == 'Straat + huisnummer' ||
								elem.value == 'Achternaam' ||
								elem.value == 'Type hier de e-mailadressen' ||
								elem.value == '7 cijferige beveilingscode'){
						elem.value='';
					}
		}
		for (i=0; i<required_fields.length; i++) {
			var tempobj = required_fields[i]
			formCheck(tempobj, 'blur');
			if (Dom.hasClass (tempobj,'error')){
				var form_error = true;				
			}								 
			
			/*if (tempobj.type.toLowerCase() == 'submit' || tempobj.type.toLowerCase() == 'button') {
				tempobj.disabled = true;
				tempobj.className = 'dinputsubmit';
			}*/
		}
		var formset = el.getElementsByClassName('required_set','fieldset');
		for(i=0;i<formset.length;i++){
			var valid = false;
			var items = formset[i].getElementsByTagName('input');
			for(j=0;j<items.length;j++){
				if(items[j].checked == true) valid = true;
			}
			
			var items = formset[i].getElementsByTagName('textarea');
			for(j=0;j<items.length;j++){
				if(items[j].value != 'Type hier de e-mailadressen') valid = true;
			}
			
			if(valid){
				YAHOO.util.Dom.removeClass(formset[i],'error');
				YAHOO.util.Dom.addClass(formset[i],'checked');
			}else{
				YAHOO.util.Dom.removeClass(formset[i],'checked');
				YAHOO.util.Dom.addClass(formset[i],'error');
				var form_error = true;
			}
		}
	}
	
	var error_fields = el.getElementsByClassName('error');	
	if(form_error == false && error_fields.length ==0){
		
		obj.submit();
		return true;
	} else {
		var el = new YAHOO.util.Element(obj);
		var form_errormessages = el.getElementsByClassName('form_errormessage');	
		for (i=0; i<form_errormessages.length; i++) {
				form_errormessages[i].className = 'form_errormessage_display';
		}
	}
	
}

function checkRequired(theform) {
	var submits = new Array();
	var reqs = false;
	
	if (document.getElementById) {
		if (!theform)
			return false;
		
		for (i=0; i<theform.length; i++) {
			var tempobj = theform.elements[i];
			
			if (tempobj.className == 'required') {
				reqs = true;
			} else if(tempobj.type) {
				if(tempobj.type.toLowerCase() == 'submit' || tempobj.type.toLowerCase() == 'button') {
					submits[ submits.length ] = i;
				}
			}
		}
		
		// enable the buttons
		if (!reqs) {
			for (i=0; i<submits.length; i++) {
				var j = submits[i];
				var te = theform.elements[j];
				
				if(te.className.substr(0,1) == 'd') {
					te.className = te.className.substr(1);
					te.disabled = false;
				}
			}
		} else {
			for (i=0; i<submits.length; i++) {
				var j = submits[i];
				var te = theform.elements[j];

				te.className = 'dinputsubmit';
				te.disabled = false;
			}
		}
	}
}

function formCheckStart(elem) {
	var elemName = elem.name;
	switch(elemName) {
			case 'zip':
			var re = new RegExp(/^[1-9][0-9]{3}\s?([a-zA-Z]{2})?$/);
			var result = re.test(elem.value);
			if (result) {
				//getPostcode('postcode_check.asp?postcode='+removeSpaces(elem.value));
				formCheck(document.orderform.address);
				formCheck(document.orderform.city);
			}
			break;
	}
	
	// finalize it
	if(!result)
		elem.className = 'required';
	else
		elem.className = 'checked';
}

function formCheck(elem, status) {
	var elemName = elem.name;
	switch(elemName) {
		 case 'login': 
		 case 'team_url':
		 case 'competitie_url':
		 	var re = new RegExp(/^[a-zA-Z][a-zA-Z0-9]*[a-zA-Z0-9]$/);
			var result = re.test(elem.value);
		 	if ((elem.value.length > 0 ||elem.checked) && result)var result = true;
			else var result = false;
			var minlength=5;
		 	break;
		case 'voornaam':
		case 'achternaam':
		case 'naam': case 'shippingName':
			var re = new RegExp(/^[\w\s\.\-\']{2,32}$/);
			var result = re.test(elem.value);
			var minlength = 2;
			break;
		case 'lastName': case 'shippingLastName':
			var re = new RegExp(/^[\w\s\.\-\']{2,32}$/);
			var result = re.test(elem.value);
			break;
		case 'telefoon': case 'shippingPhone':
			var re = new RegExp(/^[0-9-+\s]{10,20}$/);
			var result = re.test(elem.value);
			var minlength = 10;
			break;
		case 'email': case 'email_collega':
			var re = new RegExp(/^[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]@[a-zA-Z0-9][\w\.-]*[a-zA-Z0-9]\.[a-zA-Z][a-zA-Z\.]*[a-zA-Z]$/);
			var result = re.test(elem.value);
			var minlength = 5;
			break;
		case 'wachtwoord':
		case 'password':
			var re = new RegExp(/^[\w\s\.\-\']{4,32}$/);
			var result = re.test(elem.value);
			var minlength = 4;
			break;
		case 'wachtwoord_confirm':
		case 'password_confirm':
			var re = new RegExp(/^[\w\s\.\-\']{4,32}$/);
			var result = re.test(elem.value);
			var minlength = 4;
			if (document.getElementById('wachtwoord').value != elem.value) result = false;
			break;
		case 'adres': case 'shippingAddress':
			var re = new RegExp(/^[\w\s\.\-\']{3,32}$/);
			var result = re.test(elem.value);
			var minlength = 2;
			break;
		case 'addressNr': case 'shippingAddressNr':
			var re = new RegExp(/^[\w\s\.\-\']{1,8}$/);
			var result = re.test(elem.value);
			break;
		case 'zip':
		case 'postcode':
			if (elem.value == 'Postcode' && status == 'load' ) return;
		case 'competitie_postcode_tot':
			// Voor nederland
			var re = new RegExp(/^[1-9][0-9]{3}\s?[a-zA-Z]{2}$/);
			// Voor buiten Nederland
			// var re = new RegExp(/^[1-9][0-9]{3}\s?([a-zA-Z]{2})?$/);
			var result = re.test(elem.value);
            var minlength = 6;
			break;
		case 'code':
			var re = new RegExp(/^[0-9-+\s]{7}$/);
			var result = re.test(elem.value);
			var minlength = 7;
			break;
		case 'woonplaats':
		case 'city': case 'shippingCity': 
			var re = new RegExp(/^[\w\s\.\-\']{2,24}$/);
			var result = re.test(elem.value);
			var minlength = 2;
			break;
		case 'locCountry':
			var re = new RegExp(/^(^[0])$/);
			var result = re.test(elem.selectedIndex);
			break;
		case 'lvw':
				result = elem.checked;
				var minlength=0;
			break;
		default:
			if (elem.value.length > 0 ||elem.checked)var result = true;
			else var result = false;
			var minlength=1;
			
		break;
		
	}
	if (elem.value == 'Voornaam' || 
								elem.value == 'Woonplaats' ||
								elem.value == 'bijv. Amsterdam' ||
								elem.value == 'Achternaam' ||
								elem.value == '7 cijferige beveilingscode'||
								elem.value == 'Type hier de e-mailadressen'
								){
		if (status == 'blur'){
		var result = false;
		} else {
		return;
		}
	}
	
	YAHOO.util.Dom.removeClass(elem,'error');
	YAHOO.util.Dom.removeClass(elem,'checked');
	
	// finalize it
	if(!result && elem.value.length>=minlength){
		YAHOO.util.Dom.addClass(elem,'error');
	}else if (elem.value.length>=minlength){
		YAHOO.util.Dom.addClass(elem,'checked');
	}else if (status == 'blur'){
		YAHOO.util.Dom.addClass(elem,'error');
	} else if (status == 'load' && elem.value.length>0){
		YAHOO.util.Dom.addClass(elem,'error');
	}
	return result
	
}

function doValidateKeyup() {
	formCheck(this, 'keyup');
	checkRequired(document.orderform);	
}

function doValidateblur() {
	//alert(this.value);
	YAHOO.util.Dom.removeClass(this, 'focus'); 
	formCheck(this, 'blur');
	checkRequired(document.orderform);
}

function doValidateFieldset(){
	var fieldset = this;
	do
		fieldset = fieldset.parentNode;
	while(fieldset.tagName!="FIELDSET");
	
	var valid = false;
	var items = fieldset.getElementsByTagName('input');
	for(j=0;j<items.length;j++){
		if(items[j].checked == true) valid = true;
	}
	if(valid){
		YAHOO.util.Dom.removeClass(fieldset,'error');
		YAHOO.util.Dom.addClass(fieldset,'checked');
	}else{
		YAHOO.util.Dom.removeClass(fieldset,'checked');
		YAHOO.util.Dom.addClass(fieldset,'error');
	}
	
}

function doValidateLoad() {
	if (this.length){
		for (i=0; i<this.length; i++) {
			var tempobj = this[i]
			if (tempobj.type !='checkbox')formCheck(tempobj, 'load');
		}
	} else {
	formCheck(this, 'load');
	}
	checkRequired(document.orderform);	
}

function doFocusField(){
	YAHOO.util.Dom.addClass(this, 'focus');
}

function doBlurField(){
	YAHOO.util.Dom.removeClass(this, 'focus');  	
}

function initform_check(){
	limit = document.forms.length+1;
	for (i=0; i<document.forms.length;i++){
		if (document.forms[i]){
			var el = new YAHOO.util.Element(document.forms[i]);
			var formset = el.getElementsByClassName('required_set','fieldset');
			for(a=0;a<formset.length;a++){
				var valid = false;
				var items = formset[a].getElementsByTagName('input');
				for(j=0;j<items.length;j++){
					YAHOO.util.Event.addListener(items[j], "click", doValidateFieldset, items[j]);
				}
			}
			//alert(el.id);
			var required_fields = el.getElementsByClassName('required');	
			if (required_fields.length>0){
				YAHOO.util.Event.addListener(required_fields, "keyup", doValidateKeyup);
				YAHOO.util.Event.addListener(required_fields, "blur", doValidateblur);	
				YAHOO.util.Event.onAvailable(required_fields, doValidateLoad);
				YAHOO.util.Event.addListener(required_fields, "focus", doFocusField);	
			}
			var notrequired_fields = el.getElementsByClassName('notrequired');
			if (notrequired_fields.length>0){
				YAHOO.util.Event.addListener(notrequired_fields, "blur", doBlurField);	
				YAHOO.util.Event.addListener(notrequired_fields, "focus", doFocusField);	
			}
			var submit_buttons = el.getElementsByClassName('form_submit');
			if (submit_buttons.length>0){
				YAHOO.util.Event.addListener(submit_buttons, "click", FormSubmit, document.forms[i]);	
			}
		}
	}
}


// return the value of the radio button that is checked
// return an empty string if none are checked, or
// there are no radio buttons
function getCheckedValue(radioObj) {
	if(!radioObj)
		return "";
	var radioLength = radioObj.length;
	if(radioLength == undefined)
		if(radioObj.checked)
			return radioObj.value;
		else
			return "";
	for(var i = 0; i < radioLength; i++) {
		if(radioObj[i].checked) {
			return radioObj[i].value;
		}
	}
	return "";
}

// set the radio button with the given value as being checked
// do nothing if there are no radio buttons
// if the given value does not exist, all the radio buttons
// are reset to unchecked
function setCheckedValue(radioObj, newValue) {
	if(!radioObj)
		return;
	var radioLength = radioObj.length;
	if(radioLength == undefined) {
		radioObj.checked = (radioObj.value == newValue.toString());
		return;
	}
	for(var i = 0; i < radioLength; i++) {
		radioObj[i].checked = false;
		if(radioObj[i].value == newValue.toString()) {
			radioObj[i].checked = true;
		}
	}
}

YAHOO.util.Event.onDOMReady(initform_check);
 
