//Adaptive Image - credit application form functions - Tolway Fixings

//########################################## form validation - new JP js/css validator
//depends on dummy styles set for each input that requires validation - see stylesheet for class definitions
//requires a label element immediately precedes input text element for use within error message
//checkbox value is used within checkbox error messages instead of label
//textareas must be dealt with individually
function app_submit_check(frm) {
	
	var arrErrors=new Array();	//array of error messages
	
	//textarea elements
	if (trim(frm.inf_activities.value) == '') { arrErrors[arrErrors.length] = '"Business activites description" is required.'; frm.inf_activities.focus(); }
	
	//input elements
	var inputs = frm.getElementsByTagName('input'); //collection of the form input elements

	for(var i = 0; i < inputs.length; i++) { //index thru inputs collection
		
		var input = inputs[i];
		if(input.type == 'text') { //input element is text
		
			if(!SkipAsSubFormOff(input)) { //skip input element if part of a disabled sub form
			
				switch(input.className) { //validate based on CSS class name (if any)
					
					case 'jsval_req_any': //required - not empty
						if (trim(input.value) == '') { arrErrors[arrErrors.length] = '"' + GetLabel(input) + '" is required.'; input.focus(); }
						break;
						
					case 'jsval_num': //not required - number
						if (trim(input.value) == '') { break; } //allow empty or drop thru
					case 'jsval_req_num': //required - number
						if (!IsNum(trim(input.value))) { arrErrors[arrErrors.length] = '"' + GetLabel(input) + '" must be a number.'; input.focus(); }
						break;
					
					case 'jsval_int': //not required - integer
						if (trim(input.value) == '') { break; } //allow empty or drop thru
					case 'jsval_req_int': //required - integer
						if (!IsInt(trim(input.value))) { arrErrors[arrErrors.length] = '"' + GetLabel(input) + '" must be a whole number.'; input.focus(); }
						break;
						
					case 'jsval_email': //not required - email address
						if (trim(input.value) == '') { break; } //allow empty or drop thru
					case 'jsval_req_email': //required - email address
						if (!ValidEmail(trim(input.value))) { arrErrors[arrErrors.length] = '"' + GetLabel(input) + '" must be a valid email address.'; input.focus(); }
						break;
						
					case 'jsval_tel': //not required - telephone number
						if (trim(input.value) == '') { break; } //allow empty or drop thru
					case 'jsval_req_tel': //required - telephone number
						if (!IsPhoneNum(trim(input.value))) { arrErrors[arrErrors.length] = '"' + GetLabel(input) + '" must be a valid telephone number.'; input.focus(); }
						break;
						
					default: //no class name or undefined - so accept anything
				
				} //end switch
				
			} //end if
			
		} //end if
		
		else if(input.type == 'checkbox') { //input element is checkbox
			
			if(input.className == 'jsval_req_chk') { //validate required
				if(!input.checked) { arrErrors[arrErrors.length] = '"' + input.value + '" must be checked.'; input.focus(); }
			}
			
		}
		
		else { //input element is something else
			//do nothing
		}
	
	} //end for
	
	//output result
	if (arrErrors.length > 0) {	//errors
		alert('Please correct the following:\n\n   ' + arrErrors.reverse().join('\n   '));
  		return false; //do not submit form
	}
	else { //no errors
		return true; //submit form
	} 
return false; 
}

function GetLabel(obj) { //navigate DOM to get label text for error message
	
	var label = obj.previousSibling; //up tree
	if(label.nodeType == '3') label = label.previousSibling; //skip over text node (non IE)
	if((label.nodeName == 'LABEL') && (label.attributes.length > 0)) { //node is label element with attributes
		
		for(var i = 0; i < label.attributes.length; i++) { //index thru attributes
			
			if((label.attributes.item(i).nodeName == 'for') && (label.attributes.item(i).nodeValue == obj.name)) { //'for' attribute matches input name
				if((label.firstChild.nodeType == '3') && (label.firstChild.nodeValue != '')) { //label text (if exists)
					return(label.firstChild.nodeValue);
				}
				else {
					return('<empty>'); //no label text
				}
				
			} //end if
			
		} //end for
		
	} //end if
	return('<unknown>'); //could not find 'label' element with correct 'for' attribute
}

function SkipAsSubFormOff(obj) { //test if object element is part of a toggle controlled subform and whether the subform is dis/enabled
//NB this only works where each sub form has a preceeding checkbox toggle control and checkbox id is of the form ('chk_'+fieldset id) and subform fieldset has an id

	//determine if object is part of a toggle controlled sub form
	for(var i = 0; obj.nodeName != 'FIELDSET' && obj.nodeName != 'FORM' && i < 5; i++) { //climb tree until fieldset or form found or limit 5
		obj = obj.parentNode;
	}
	if(obj.nodeName == 'FIELDSET') { //definitely fieldset
		
		if(obj.id) { //id exists 
			
			chkboxName = 'chk_' + obj.id; //derive checkbox name from id (the sub form control element)
			if(document.getElementById(chkboxName).checked) { //is sub form enabled?
				return false; //ensure subform element is validated
			}
			else {
				return true; //do skip as subform disabled
			}
		}
	}
	
	return false; //dont skip validation

}

//########################################## event - show/hide non-limited company people and addresses 

//###################### PER 1
function TogglePer1() {
	if (document.forms.frm_credit.chk_per1.checked) {
		document.forms.frm_credit.per1.style.display = "block"; //show per 1
	}
	else {
		document.forms.frm_credit.per1.style.display = "none"; //hide per 1
		document.forms.frm_credit.chk_per2.checked = ""; //uncheck per 2
		TogglePer2(); //action per 2
		document.forms.frm_credit.chk_per1_prev1.checked = ""; //uncheck per 1 prev 1
		TogglePer1Prev1(); //action per 1 prev 1
	}
return;
}
function TogglePer1Prev1() {
	if (document.forms.frm_credit.chk_per1_prev1.checked) {
		document.forms.frm_credit.per1_prev1.style.display = "block"; //show per 1 prev 1
	}
	else {
		document.forms.frm_credit.per1_prev1.style.display = "none"; //hide per 1 prev 1
	}
return;
}

//###################### PER 2
function TogglePer2() {
	if (document.forms.frm_credit.chk_per2.checked) {
		document.forms.frm_credit.per2.style.display = "block"; //show per 2
	}
	else {
		document.forms.frm_credit.per2.style.display = "none"; //hide per 2
		document.forms.frm_credit.chk_per3.checked = ""; //uncheck per 3
		TogglePer3(); //action per 3
		document.forms.frm_credit.chk_per2_prev1.checked = ""; //uncheck per 2 prev 1
		TogglePer2Prev1(); //action per 2 prev 1
	}
return;
}
function TogglePer2Prev1() {
	if (document.forms.frm_credit.chk_per2_prev1.checked) {
		document.forms.frm_credit.per2_prev1.style.display = "block"; //show per 2 prev 1
	}
	else {
		document.forms.frm_credit.per2_prev1.style.display = "none"; //hide per 2 prev 1
	}
return;
}

//###################### PER 3
function TogglePer3() {
	if (document.forms.frm_credit.chk_per3.checked) {
		document.forms.frm_credit.per3.style.display = "block"; //show per 3
	}
	else {
		document.forms.frm_credit.per3.style.display = "none"; //hide per 3
		document.forms.frm_credit.chk_per4.checked = ""; //uncheck per 4
		TogglePer4(); //action per 4
		document.forms.frm_credit.chk_per3_prev1.checked = ""; //uncheck per 3 prev 1
		TogglePer3Prev1(); //action per 3 prev 1
	}
return;
}
function TogglePer3Prev1() {
	if (document.forms.frm_credit.chk_per3_prev1.checked) {
		document.forms.frm_credit.per3_prev1.style.display = "block"; //show per 3 prev 1
	}
	else {
		document.forms.frm_credit.per3_prev1.style.display = "none"; //hide per 3 prev 1
	}
return;
}

//###################### PER 4
function TogglePer4() {
	if (document.forms.frm_credit.chk_per4.checked) {
		document.forms.frm_credit.per4.style.display = "block"; //show per 4
	}
	else {
		document.forms.frm_credit.per4.style.display = "none"; //hide per 4
		document.forms.frm_credit.chk_per4_prev1.checked = ""; //uncheck per 4 prev 1
		TogglePer4Prev1(); //action per 4 prev 1
	}
return;
}
function TogglePer4Prev1() {
	if (document.forms.frm_credit.chk_per4_prev1.checked) {
		document.forms.frm_credit.per4_prev1.style.display = "block"; //show per 4 prev 1
	}
	else {
		document.forms.frm_credit.per4_prev1.style.display = "none"; //hide per 4 prev 1
	}
return;
}
