/**
 * @desc    kMagic ENA Registration JavaScript Library
 * @author  kubus media
 * @package ENA
 */



// === ENA REGISTRATION ===========================================================================

/**
 * @desc   fields to enable in login form
 */
var login_fields = new Array(
	'user', 'pass', 'login'
);



/**
 * @desc   fields to enable in user form
 */
var user_fields = new Array(
	0, 1, 
	'formprocessor[surname]', 'formprocessor[forename]', 'formprocessor[title]', 
	'formprocessor[email]', 'formprocessor[job_title]', 'formprocessor[street]', 
	'formprocessor[plz]', 'formprocessor[place]', 'formprocessor[country]', 
	'formprocessor[phone]', 'formprocessor[fax]', 'formprocessor[mobile]', 
	'formprocessor[message]', 'send' ,'formprocessor[paying_method]', 17,18
);



/**
 * @desc   required fields for event only registration
 */
var required_fields_event = new Array(
	'formprocessor[surname]', 'formprocessor[forename]', 'formprocessor[email]', 
	'formprocessor[job_title]', 'formprocessor[street]', 'formprocessor[plz]', 
	'formprocessor[place]', 'formprocessor[country]', 'formprocessor[phone]'
);



/**
 * @desc   required fields for event and membership registration
 */
var required_fields_member = new Array(
	'formprocessor[surname]', 'formprocessor[forename]', 'formprocessor[email]', 
	'formprocessor[job_title]', 'formprocessor[street]', 'formprocessor[plz]', 
	'formprocessor[place]', 'formprocessor[country]', 'formprocessor[phone]', 
	'formprocessor[user]'
);



/**
 * @desc   Shows member area
 * @param  void
 * @return void
 */
function isMember(){
	// enable login fields
	for( var i = 0; i < login_fields.length; i++) {
		enableFormElement( 'login_form', login_fields[i]);
	}

	// disable user fields
	for( var i = 0; i < user_fields.length; i++) {
		disableFormElement( 'user_form', user_fields[i]);
	}

	// show member area and hide non member area
	showById( 'form_area_members');
	hideById( 'form_area_non_members');
}



/**
 * @desc   Shows non member area
 * @param  void
 * @return void
 */
function isNotMember(){
	// enable user fields
	for( var i = 0; i < user_fields.length; i++) {
		enableFormElement( 'user_form', user_fields[i]);
	}

	// disable login fields
	for( var i = 0; i < login_fields.length; i++) {
		disableFormElement( 'login_form', login_fields[i]);
	}


	// show non member area and hide member area
	showById( 'form_area_non_members');
	hideById( 'form_area_members');
}



/**
 * @desc   Shows membership and event registration area
 * @param  void
 * @return void
 */
function registerEventMember(){
	// show membership and event registration text and hide event only
	showById( 'area_non_members_event_and_membership');
	hideById( 'area_non_members_event_only');

	// enable and show username input
	enableFormElement( 'user_form', 'formprocessor[user]');
	showById( 'optional_form_area_non_members_event_and_membership');
}



/**
 * @desc   Shows event only registration area
 * @param  void
 * @return void
 */
function registerEventOnly(){
	// show event only text and hide membership and event registration
	showById( 'area_non_members_event_only');
	hideById( 'area_non_members_event_and_membership');

	// disable and hide username input
	disableFormElement( 'user_form', 'formprocessor[user]');
	hideById( 'optional_form_area_non_members_event_and_membership');
}


/**
 * @desc   Shows credit card payment area
 * @param  void
 * @return void
 */
function paymentbyCC(){

	// show credit card text and hide bill payment
	showById( 'optional_form_area_credit_card_payment');
	hideById( 'optional_form_area_bill_payment');
	errorMessage('');

	// enable and show username input
	//enableFormElement( 'user_form', 'formprocessor[user]');
	//showById( 'optional_form_area_non_members_event_and_membership');
}

/**
 * @desc   Shows bill payment area
 * @param  void
 * @return void
 */
function paymentbyWire(){
	// show bill text and credit card bill payment
	showById( 'optional_form_area_bill_payment');
	hideById( 'optional_form_area_credit_card_payment');
	errorMessage('');

	// enable and show username input
	//enableFormElement( 'user_form', 'formprocessor[user]');
	//showById( 'optional_form_area_non_members_event_and_membership');
}





/**
 * @desc   Checks registration before submitting form
 * @param  void
 * @return void
 */
function checkRegistration(){
	var user_form   = document.forms['user_form'];
	// registration for event only
	if( 
		getRadioValue( user_form.elements['form_selector_non_members']) == 
		'area_non_members_event_only'
	){
		registerEventOnly();
		if( 
			! checkFormElements( 'user_form', required_fields_event) || 
			! getRadioValue( user_form.elements['formprocessor[paying_method]'])
		){
			errorMessage( '<br>Bitte f&uuml;llen Sie alle Pflichtfelder aus! / Please fill out all mandatory fields!<br><br>');
			return false;
		}
		// set additional fields for event only registration
		/*** added specific element call for paying_subject_event in case we have multiple (we always use the first one -> 0) | 15.10.2007 | mpf ***/
        user_form.elements['formprocessor[paying_subject]'].value = 
         user_form.elements['paying_subject_event'].value;

		// set form action for event only registration
		user_form.action = user_form.elements['form_action_event'].value;



	// registration for event and membership
	} else if( 
		getRadioValue( user_form.elements['form_selector_non_members']) == 
		'area_non_members_event_and_membership'
	){
		registerEventMember();

		if( 
			! checkFormElements( 'user_form', required_fields_member) || 
			! getRadioValue( user_form.elements['formprocessor[paying_method]'])
		){
			errorMessage( '<br>Bitte f&uuml;llen Sie alle Pflichtfelder aus! / Please fill out all mandatory fields!<br><br>');
			return false;
		}

		// set additional fields for event and membership registration
		/*** added specific element call for paying_subject_member in case we have multiple (we always use the first one -> 0) | 15.10.2007 | mpf ***/
		user_form.elements['formprocessor[paying_subject]'].value = 
			user_form.elements['paying_subject_member'].value;

		// set form action for event and membership registration
		user_form.action = user_form.elements['form_action_member'].value;



	} else {
		errorMessage( '<br>Bitte w&auml;hlen Sie ein Registrations-Methode! / Please select registration method!<br><br>');
		return false;
	}
	
	
	return checkPayment();

}



/**
 * @desc   Checks payment fields
 * @param  void
 * @return boolean 
 */
function checkPayment(){
	var user_form   = document.forms['user_form'];

// payment checks
	//credit card validation
		if(getRadioValue( user_form.elements['formprocessor[paying_method]']) == 'Credit Card'){
				if( user_form.elements['formprocessor[ccsurname]'].value.length == 0){
					errorMessage( '<br>Bitte f&uuml;llen Sie alle Pflichtfelder aus! / Please fill out all mandatory fields!<br><br>');
					return false;
				}
				if( user_form.elements['formprocessor[ccname]'].value.length == 0){
					errorMessage( '<br>Bitte f&uuml;llen Sie alle Pflichtfelder aus! / Please fill out all mandatory fields!<br><br>');
					return false;
				}

				ccnum_01 = user_form.elements['formprocessor[ccnumber_01]'].value;

				if( ccnum_01.length != 4 || isNaN( ccnum_01)){
					errorMessage( '<br>Bitte f&uuml;llen Sie alle Pflichtfelder aus! / Please fill out all mandatory fields!<br><br>');
					return false;
				}

				ccnum_02 = user_form.elements['formprocessor[ccnumber_02]'].value;

                if( ccnum_02.length != 4 || isNaN( ccnum_02)){
					errorMessage( '<br>Bitte f&uuml;llen Sie alle Pflichtfelder aus! / Please fill out all mandatory fields!<br><br>');
					return false;
				}

				ccnum_03 = user_form.elements['formprocessor[ccnumber_03]'].value;

				if( ccnum_03.length != 4 || isNaN( ccnum_03)){
					errorMessage( '<br>Bitte f&uuml;llen Sie alle Pflichtfelder aus! / Please fill out all mandatory fields!<br><br>');
					return false;
				}

				ccnum_04 = user_form.elements['formprocessor[ccnumber_04]'].value;

				if( ccnum_04.length != 4 || isNaN( ccnum_04)){
					errorMessage( '<br>Bitte f&uuml;llen Sie alle Pflichtfelder aus! / Please fill out all mandatory fields!<br><br>');
					return false;
				}

				if( user_form.elements['formprocessor[ccchecksum]'].value.length == 0){
					errorMessage( '<br>Bitte f&uuml;llen Sie alle Pflichtfelder aus! / Please fill out all mandatory fields!<br><br>');
					return false;
				}

				if( user_form.elements['formprocessor[cctype]'][0].checked == false && user_form.elements['formprocessor[cctype]'][1].checked == false ) {
					errorMessage( '<br>Bitte f&uuml;llen Sie alle Pflichtfelder aus! / Please fill out all mandatory fields!<br><br>');
					return false;
				}

		}

	//wire transfer validation
		if(getRadioValue( user_form.elements['formprocessor[paying_method]']) == 'wire_transfer'){
		}




	return true;
}



// === UTILITES ===================================================================================

/**
 * @desc   Gets value of given radio object
 * @param  radio object to get value of
 * @return value of radio object
 */
function getRadioValue( radioObject) {
	for ( var i = 0; i < radioObject.length; i++){
		if ( radioObject[i].checked){
			return radioObject[i].value;
		}
	}

	return false;
}



/**
 * @desc   Sets value of given radio object
 * @param  radio object to set value of
 * @param  value of radio object to set
 * @return void
 */
function setRadioValue( radioObject, radioValue){
	for( var i = 0; i < radioObject.length; i++){
		radioObject[i].checked = false;

		if( radioObject[i].value == radioValue.toString()) {
			radioObject[i].checked = true;
		}
	}
}



/**
 * @desc   Disables element of form
 * @param  name of form to disable element of
 * @param  name of element to disable
 * @return void
 */
function disableFormElement( form_name, element_name){
	document.forms[form_name].elements[element_name].disabled = true;
	if (document.forms[form_name].elements[element_name].length > 1)
	{
		var subelements = document.forms[form_name].elements[element_name];
		for (var i = subelements.length - 1; i >= 0; i--){
			subelements[i].disabled = true;
		}
	}

}



/**
 * @desc   Enables element of form
 * @param  name of form to enable element of
 * @param  name of element to enable
 * @return void
 */
function enableFormElement( form_name, element_name){
	document.forms[form_name].elements[element_name].disabled = false;
	if (document.forms[form_name].elements[element_name].length > 1)
	{
		var subelements = document.forms[form_name].elements[element_name];
		for (var i = subelements.length - 1; i >= 0; i--){
			subelements[i].disabled = false;
		}
	}
}



/**
 * @desc   Checks list of elements in form for empties
 * @param  name of form to check elements in
 * @param  list of elements of check for empties
 * @return true on no empties, false on one or more
 */
function checkFormElements( form_name, element_list){
	check_form = document.forms[form_name];

	for( var i = 0; i < element_list.length; i++) {
		if( check_form.elements[element_list[i]].value == ""){
			return false;
		}
	}

	return true;
}



/**
 * @desc   Sets class of document element with given id to 'invisible'
 * @param  document element id to hide
 * @return void
 */
function hideById( id){
	var hide_id = document.getElementById( id);
	hide_id.className = "invisible";
}



/**
 * @desc   Sets class of document element with given id to 'visible'
 * @param  document element id to show
 * @return void
 */
function showById( id){
	var show_id = document.getElementById( id);
	show_id.className = "visible";
}



/**
 * @desc   Displays error message in document element with id 'error_message'
 * @param  error message to display
 * @return void
 */
function errorMessage( message){
	var error_message = document.getElementById( 'error_message');
	error_message.innerHTML = message;
}

/* ********************************************************************************************************** */

function checkEmail ( caller ) {
	var str=caller.value;
	var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i;
	if ( filter.test(str) ) {
		var testresults=true;
		caller.className = "";
	} else {
		var testresults=false;
		caller.className = "errorInput";
	}
}


// since this regex driven method lead to problems witu german öäü it is depriciated
//function normalizeInput ( caller ) {
/*** normalize input ***/
//	caller.value = caller.value.replace(/\w+/g, function(a){ return a.charAt(0).toUpperCase() + a.substr(1).toLowerCase();});
//}

function normalizeInput ( caller ) {
/*** normalize input ***/

    return true; /*** disabled feature globaly | 18.04.2008 | mpf ***/

	var val = caller.value;
	var newVal = '';
	val = val.split(' ');
	for(var c=0; c < val.length; c++) {
		newVal += val[c].substring(0,1).toUpperCase() + val[c].substring(1,val[c].length).toLowerCase() + ' ';
	}
	caller.value = newVal.substring(0,(newVal.length-1));
}


function preSwitcher ( caller, curParentEleID, futparEleID ) {
/*** descritption ***/
	if (caller.value=='') {
		inpSwitcher( curParentEleID, futparEleID );
	}
	setCnt(caller);
}

function inpSwitcher (curParentEleID, futparEleID) {
/*** switches between dropdown and input field ***/
	var cParEle = document.getElementById( curParentEleID );
	var fParEle = document.getElementById( futparEleID );

	cParEle.style.display = "none";
	fParEle.style.display = "block";

	if (futparEleID.id == "selector") { fParEle.selectedIndex = 0; }
}

function setCnt ( caller ) {
/*** sets the value for the country to a hidden field ***/
	var destEle = document.getElementById( 'cnt' );
	var destEleTypeLc = document.getElementById( 'cntType' );
	
	destEle.value = caller.value;
	destEleTypeLc.value = caller.type;
}


function reqJobTitle (caller) {
/*** descritption ***/
	if (caller.value=='other') {
		document.getElementById('jobTitleReq').innerHTML = '*';
		document.getElementById('job_title_ext_req').value = '';
	} else {
		document.getElementById('jobTitleReq').innerHTML = '';
		document.getElementById('job_title_ext_req').value = '1';
	}
}


function checkJobTitle (caller) {
/*** descritption ***/
	var jobTitleExtReq = document.getElementById('job_title_ext_req');
	
	if (jobTitleExtReq.value=='' && caller.value == '') {
		caller.className = "errorInput";
	} else {
		jobTitleExtReq.value = '1';
		caller.className = "";
	}
}