//**
// * Functions for TrustWorks
// * @version $Id: functions.js 41 2008-06-11 00:32:32Z maros $
// * @author Martin Adamec
// */

var ride = 'i1 i2 i3 i4';
var family = 'i5 i6 i7 i8';
var timeoff = 'i9 i10 i11 i12';
var job = 'i13 i14 i15 i16';
var clothes = 'i17 i18 i19 i20';
var music = 'i21 i22 i23 i24';
var food = 'i25 i26 i27 i28';
var lid = 'i29 i30 i31 i32';
var money = 'i33 i34 i35 i36';
var age = 'i37 i38 i39 i40';
var education = 'i41 i42 i43 i44';
var home = 'i45 i46 i47 i48';
// equivalent of DEMOGRAPHIC_CATEGORIES_COUNT set in constants.php
var demographicCategoriesCount = 12;


var responseLandingPage = 8;

var inviteFriendHint = "enter friend's email";

var pwdLoginTextElem = '<input type="text" id="login_pwd" name="login[pwd]" tabindex="2" value="password..." />';
var pwdLoginPassElem = '<input type="password" id="login_pwd" name="login[pwd]" tabindex="2" value="" />';
var pwdRegTextElem = '<input type="text" id="register_pass1" name="register[pass1]" tabindex="5" value="password..." />';
var pwdRegPassElem = '<input type="password" id="register_pass1" name="register[pass1]" tabindex="5" value="" />';
var pwd2RegTextElem = '<input type="text" id="register_pass2" name="register[pass2]" tabindex="6" value="confirm password..." />';
var pwd2RegPassElem = '<input type="password" id="register_pass2" name="register[pass2]" tabindex="6" value="" />';

document.observe('dom:loaded', function(event) {
	if (brandingHash) {
		//if (brandingHash.link) {
		//	link = brandingHash.link;
		//}
		//else {
		//	link = '#';
		//}
		//var newHtml = '<div id="twTopLeft"> <a href="?pg=1" class="twBrandedLogo"></a>' +
		//' <span class="twSlogan">The answer network for<br>your private community.<span class="twPowered">    Powered by TrustWorks&#8482;</span></span>' +
		//' <div class="twCompanyLogo"><a href="'+link+'"><img src="'+brandingHash.headerLogoImg+'" width="256" height="64" alt="'+brandingHash.alt+'" /></a></div>' +
		//' </div>';
		//$('twTopLeft').replace(newHtml);
		$('twTopWrapper').setStyle({
			  'background': 'transparent url(../'+brandingHash.headerBgrImg+') repeat scroll 0 0'
			});
		if (brandingHash.loginTextColor && brandingHash.loginTextColor == 'blue') {
			$('twTopLoginText').toggleClassName('twTopLoginBlueText');
			if ($('twTopLoginLink')) {
				$('twTopLoginLink').toggleClassName('twTopLoginBlueText');
			}
		}
	}
	if ($('TabbedPanels1')) {
		// this is to style home page little bit better
		var TabbedPanels1 = new Spry.Widget.TabbedPanels("TabbedPanels1");
//		$('twMainWrapper').toggleClassName('twHomePage');
//		$('twContentWrapper').toggleClassName('twHomePageContext');
		// and this is to solve that long running background under menu
		//$('twLeftWrapper').toggleClassName('twHomeLeft');
	}

	if ($('twQuestionsWrapper')) {
		$('twContentWrapper').toggleClassName('twQuestionsPage');
	}
	
	if ($('twHelpTextWrapperHorizontal')){
		$('twHelpTextWrapperHorizontal').hide();
        $('twHelpTextWrapperHorizontal').addClassName('loaded');
		$('instBtn').observe('click', slideInstrOut);
	}

	var closedAccordions = $$('.twMAccordionHover');
	if (closedAccordions) {
		closedAccordions.each(function(accordion) {
			$(accordion).observe('mouseover', openAccordion);
		    //$(accordion).observe('mouseout', closeAccordion);
		});
	}

	var lifestyleCats = $$('.twLifestyleCatNumber');
	if (lifestyleCats) {
		lifestyleCats.each(function(e) {
			e.observe('click', catNumberClick);
		});
		if (lifestyleCats.length > 0) {
			checkLifestyleCompleteness();
		}
	}

	var adminSelections = $$('.twAdminGroupAction');
	if(adminSelections) {
		adminSelections.each(function(e) {
			e.observe('click', groupAdminSelectionClick);
		});
	}

	var emailSelections = $$('.twEmailAdminSelection');
	if(emailSelections) {
		emailSelections.each(function(e) {
			e.observe('click', emailAdminSelectionClick);
		});
	}

	setObservingDemographics();

	setObservingRemoveLogo();

	var emphasizedSpan = $$('.twChecked');
	if (emphasizedSpan) {
		emphasizedSpan.each(function(e) {
			e.observe('click', catEmphClick);
		});
	}

	if($('twNextBtn')) {
		$('twNextBtn').observe('click', arrowClick);
	}
	if($('twPrevBtn')) {
		$('twPrevBtn').observe('click', arrowClick);
	}

	if ($('groups_toggle')) {
		$('groups_toggle').hide();
	}
	if ($('places_toggle')) {
		$('places_toggle').hide();
	}
	if ($('lifestyles_toggle')) {
		$('lifestyles_toggle').hide();
		resetTarget();
	}
	grayOn('newRequest_requestTitle');
	grayOn('newRequest_requestBody');

	if ($$('.outDivs')) {
		$$('.outDivs').each(function(e) {
			e.hide();
		});
	}
//	if($('twForgotPwdBoxContainer')){
//		$('twForgotPwdBoxContainer').hide();
//	}
	if ($('twForgotPwdTrigger')) {
		$('twForgotPwdTrigger').observe('click', openForgotPwdBox);
	}
//	if($('twRequestPassword')) {
//		$('twRequestPassword').observe('click', processPwdRequest);
//	}

	if($('twInviteBtn')) {
		$('twInviteBtn').observe('click', processInviteFriend);
	}

//	if ($$('.outLinks')) {
//		$$('.outLinks').each( function(e) {
//			e.observe('click', display);
//		});
//	}

	if ($$('.twButtonAnswer')) {
		$$('.twButtonAnswer').each( function(e) {
			e.observe('click', processAnswer)
		})
	}
	
	if ($('groupSelect')) {
		resetTarget();
		$('groupSelect').observe('change', resetTarget);
	}

	if ($('continentsSelect')) {
		$('continentsSelect').observe('change', callRegenerateRegion);
	}

	if ($('twXButtonCheckAll')) {
		$('twXButtonCheckAll').observe('click', callSetTwSelectionCheckbox);
		$('twXButtonUncheckAll').observe('click', callToggleTwSelectionCheckbox);
		$('twXButtonDeleteChecked').observe('click', callDeleteTwSelectionCheckbox);
	}
	
	if ($('twDeleteQuestion')) {
		$('twDeleteQuestion').observe('click', callDeleteQuestion)
	}

//	if ($$('.twSelectionCheckbox')) {
//		$$('.twSelectionCheckbox').each( function(e) {
//			e.observe('click', toggleTwSelectionCheckboxRowClass);
//		})
//	}

	if ($$('.twTColumnStatus')) {
		$$('.twTColumnStatus').each (function(e) {
			if(e.innerHTML == 'Answered' && !e.up().hasClassName('twSelected')) {
				e.up().toggleClassName('twSelected');
			}
		})
	}

	if($('twFlags')) {
		$('twFlags').childElements().each( function(e) {
			e.observe('click', languageAlert);
		})
	}

	if($('twInviteFriend')) {
		$('twInviteFriend').value = inviteFriendHint
		$('twInviteFriend').observe('blur', hintManager.set.bindAsEventListener(hintManager, inviteFriendHint));
		$('twInviteFriend').observe('focus', hintManager.remove.bindAsEventListener(hintManager, inviteFriendHint));
	}
	
//	var userIdHint = "email address...";
//	var pwdHint = "password...";
//	var pwd2Hint = "confirm password...";
//	var fNameHint = "first name...";
//	var lNameHint = "last name...";
//	var sNameHint = "screen name... (optional)";
	
	if($('twLoginBox')) {
		// this is splash page set up hints for login and register input fields
		$('login_userId').writeAttribute('value', userIdHint);
		$('login_userId').observe('blur', hintManager.set.bindAsEventListener(hintManager, userIdHint));
		$('login_userId').observe('focus', hintManager.remove.bindAsEventListener(hintManager, userIdHint));
		$('login_pwd').replace(pwdLoginTextElem)
		//$('login_pwd').writeAttribute('value' , pwdHint);
		$('login_pwd').observe('blur', hintManager.set.bindAsEventListener(hintManager, pwdHint, pwdLoginTextElem, pwdLoginPassElem, 'login_pwd'));
		$('login_pwd').observe('focus', hintManager.remove.bindAsEventListener(hintManager, pwdHint, pwdLoginTextElem, pwdLoginPassElem, 'login_pwd'));		

		$('register_email').writeAttribute('value', userIdHint);
		$('register_email').observe('blur', hintManager.set.bindAsEventListener(hintManager, userIdHint));
		$('register_email').observe('focus', hintManager.remove.bindAsEventListener(hintManager, userIdHint));	
		$('register_pass1').replace(pwdRegTextElem);
		//$('register_pass1').writeAttribute('value', pwdHint);
		$('register_pass1').observe('blur', hintManager.set.bindAsEventListener(hintManager, pwdHint, pwdRegTextElem, pwdRegPassElem, 'register_pass1'));
		$('register_pass1').observe('focus', hintManager.remove.bindAsEventListener(hintManager, pwdHint, pwdRegTextElem, pwdRegPassElem, 'register_pass1'));		
		$('register_pass2').replace(pwd2RegTextElem)
		//$('register_pass2').writeAttribute('value' , pwd2Hint);
		$('register_pass2').observe('blur', hintManager.set.bindAsEventListener(hintManager, pwd2Hint, pwd2RegTextElem, pwd2RegPassElem, 'register_pass2'));
		$('register_pass2').observe('focus', hintManager.remove.bindAsEventListener(hintManager, pwd2Hint, pwd2RegTextElem, pwd2RegPassElem, 'register_pass2'));		
		$('register_screen_name').writeAttribute('value', sNameHint);
		$('register_screen_name').observe('blur', hintManager.set.bindAsEventListener(hintManager, sNameHint));
		$('register_screen_name').observe('focus', hintManager.remove.bindAsEventListener(hintManager, sNameHint));		
		$('register_first_name').writeAttribute('value', fNameHint);
		$('register_first_name').observe('blur', hintManager.set.bindAsEventListener(hintManager, fNameHint));
		$('register_first_name').observe('focus', hintManager.remove.bindAsEventListener(hintManager, fNameHint));		
		$('register_last_name').writeAttribute('value', lNameHint);
		$('register_last_name').observe('blur', hintManager.set.bindAsEventListener(hintManager, lNameHint));
		$('register_last_name').observe('focus', hintManager.remove.bindAsEventListener(hintManager, lNameHint));		
		//$('login_userId').focus();
	}
	
	if($('twAuthorityToggleLink')) {
		var authorityLinkDetails = $$('.twToggleAuthLevel');
		if(authorityLinkDetails){
			authorityLinkDetails.each(function(e) {
				e.hide();
			});
		}
		$('twAuthorityToggleLink').firstDescendant().observe('click', toggleAuthority);
	}
	
	if ($('twAdminGroupSelect')) {
		var optionItems = $$('.twAdminGroupSelectOption');
		if (optionItems){
			optionItems.each( function(e) {
				e.observe('click', groupAdminSelectionClicked);
			})
		}
		var groupSelected = $$('.twAdminGroupSelected');
		if (groupSelected.size() > 0) {
			var groupSelection = groupSelected[0].identify().split('-');
			modifyGroupAdminActionButtons(groupSelection[2],groupSelection[3],groupSelection[4]);
		}
	}

	if ($('twFAASFirstSection')){
		$('twFAASMiddleSection').hide();
		$('twFAASLastSection').hide();
		if ($('twDisableSelect')) {
			$('twDisableSelect').down().disabled = true;
		}
		hideNewParagraphHintText();
		$('privatePublicButtons').hide();
		$('newRequest_requestBody').observe('keypress',newRequestQuestionChange);
		$('newRequest_requestBody').observe('blur', hintManagerNewRequest.set.bindAsEventListener(hintManagerNewRequest, requestBodyHint));
		$('newRequest_requestBody').observe('focus', hintManagerNewRequest.remove.bindAsEventListener(hintManagerNewRequest, requestBodyHint));
		$('newRequest[anonym]').observe('mouseover', showNewParagraphHintText);
		$('newRequest[anonym]').observe('mouseout', hideNewParagraphHintText);
		$('newRequest[submit]').observe('mouseover', showNewParagraphHintText);
		$('newRequest[submit]').observe('mouseout', hideNewParagraphHintText);
	}
	

});

var toggleAuthority = function() {
	var authorityLinkDetails = $$('.twToggleAuthLevel');

	if(authorityLinkDetails){
		authorityLinkDetails.each(function(e) {
			e.show();
		});
	}	
	$('twAuthorityToggleLink').hide();
}

var languageAlert = function () {
	infoBox(["TrustWorks can display the interface and exchange communications in many languages.", "These features require a paid license, so please\ncontact our sales team for additional information."]);
}

function FocusBlur(args, focus) {
    this.args = $A(args);
    this.focus = focus || false;
    window.setTimeout(function() {
        if (this.focus) {
            $(this.args[4]).focus();
        }
        $(this.args[4]).observe('blur', hintManager.set.bindAsEventListener(hintManager, this.args[1], this.args[2],this.args[3],this.args[4]));
        $(this.args[4]).observe('focus', hintManager.remove.bindAsEventListener(hintManager, this.args[1], this.args[2],this.args[3],this.args[4]));
    }.bind(this), 0);
}
var hintManager = {
	set: function() {
		e = $A(arguments)[0].element();
		if ( e.value == '' || !e.present()) {
			if ($A(arguments)[2]) {
				var hook = e.previous();
				if (hook) {
					e.remove();
					hook.insert({'after':$A(arguments)[2]})
				}
				else {
					e.replace($A(arguments)[2]);
				}
                new FocusBlur(arguments);
			}
			else {
				e.writeAttribute('value' , $A(arguments)[1]);
				e.show();
			}
		}
	},

	remove: function() {
		e = $A(arguments)[0].element();
		if (e.readAttribute('value') == $A(arguments)[1]) {
			if ($A(arguments)[2]) {
				var hook = e.previous();
				if (hook) {
					e.remove();
					hook.insert({'after':$A(arguments)[3]})
				}
				else {
					e.replace($A(arguments)[3]);
				}
                new FocusBlur(arguments, true);
			}
			else {
				e.writeAttribute('value',  '');	
			}
		}
	}
}

var hintManagerNewRequest = {
		set: function() {
			e = $A(arguments)[0].element();
			if ( e.value == '') {
				e.value = $A(arguments)[1];
				grayOn(e.identify());
				$('privatePublicButtons').hide();
			}
		},

		remove: function() {
			e = $A(arguments)[0].element();
			if (e.value == $A(arguments)[1]) {
				e.value = '';
				grayOff(e.identify());
				 
			}
		}
	}

//var chageSelection = function (selectedIdString, currentCategory, setValueTo) {
//	alert (selectedIdString + ' - ' + currentCategory + ' ---- ' + setValueTo);
//	if ($(selectedIdString).hasClassName('active')) {
//		$(selectedIdString).removeClassName('active').toggleClassName('inactive');
//		$(setValueTo).value = 0;
//	} else {
//		//alert ($w(currentCategory));
//		$w(currentCategory).each(function(toggle) {
//			$(toggle).removeClassName('inactive').removeClassName('active').toggleClassName('inactive');
//		})
//		$(selectedIdString).removeClassName('inactive').toggleClassName('active');
//		$(setValueTo).value = selectedIdString.substring(1);
//	}
//}


function groupAdminSelectionClick(e) {
	var groupSelected = $$('.twAdminGroupSelected');
	var groupSelection = groupSelected[0].identify().split('-');
	var groupUid = groupSelection[1];
	var action = e.element().identify();
	var warningForGroup = false;
	new Ajax.Request('ajax.php', {
		method: 'get',
		parameters: {script: 'processGroupAdminSelection', action: action, groupUid: groupUid, status: groupSelection[3]},
		onSuccess: function(transport) {
			var response = transport.responseText;

			// actions: editGroup, toggleStatus, addGroup, groupMembers, groupMailings, uploadUserList

			if (response == 'session expired') {
				window.location.reload();
			}
			else if (response == 'problem') {
				alertBox('There was a problem while processing this request, please try again.  If this problem persists, please contact an Administrator.');
				// we do not perform any action if the same selection was made
			}
			else {
				if (action == 'deleteGroup') {
					if (response == 'protected'){
						alertBox('Group sub-tree contains delete-protected group. Please make sure that all subgroups are ready for deletion.');
					}
					else {
						plural = (response == 1)? ' was': 's were';
						infoBox(['Group' + plural + ' successfully deleted']);
					}
					updateGroupAdminSelectionBox();
				}
				else if (action == 'toggleStatus' ) {
					//statusClass = (response == 'active') ? ' class="bold"': '';
					//$('status-'+groupUid).replace('<span'+ statusClass+' id="status-'+groupUid+'">'+response+'</span>');
					groupSelection[3] = response;
					newId = groupSelection.join('-');
					groupSelected[0].writeAttribute('id',newId);
					$('twAdminGroupRightBox').update('');
					// also update buttons
					modifyGroupAdminActionButtons(groupSelection[2],groupSelection[3],groupSelection[4]);
				}
				else if (action == 'editGroup' || action == 'addGroup' || action == 'uploadUserList' || action == 'uploadSkills') {
					if (action == 'uploadUserList' && response == 'public') {
						alertBox('This is a public group, so membership does not require an invitation.');
					}
					else {
						$('twAdminGroupRightBox').update(response);
					}
					if (action == 'addGroup') {
						updateGroupAdminSelectionBox();
					}
				}
				else if (action == 'groupMembers') {
					var responseArr = response.split('~~~');
					$('twGroupAdminTitle').update('Edit "'+responseArr[0]+'" Membership');
					$('twGroupAdminTitle').removeClassName('sIFR-replaced');
					replaceH2();
					$('twAdminGroupBox').update(responseArr[1]);
					updateInvitationCounts();
					observeMembershipEditSelections();
					observeMembershipTableSortingOptions();
				}
				else if (action == 'groupSkills') {
					var responseArr = response.split('~~~');
					$('twGroupAdminTitle').update('Edit "'+responseArr[0]+'" Experiences');
					$('twAdminGroupLeftBox').update(responseArr[1]);
					$('twAdminGroupRightBox').update('');
					$('twGroupAdminTitle').removeClassName('sIFR-replaced');
					replaceH2();
					if ($('twAdminAreaSelect')) {
						observeAreaSelections();
					}
					else {
						observeCategorySelections();
						observeSubmitButtons();
					}
				}
				else {
					var responseArr = response.split('~~~');
					$('twAdminGroupLeftBox').replace('<div id="twAdminGroupLeftBox">'+responseArr[0]+'</div>');
					$('twAdminGroupRightBox').replace('<div id="twAdminGroupRightBox">'+responseArr[1]+'</div>');
				}
			}
		},
		onFailure: function(transport) {alertBox('Technical problems while connecting with the server, selection was not recorded. Please try again later.' + transport.responseText)}
	});
}

function updateGroupAdminSelectionBox() {
	new Ajax.Request('ajax.php', {
		method: 'get',
		parameters: {script: 'processGroupAdminSelection', action: 'updateGroupSelect', groupUid: 0, status: ''},
		onSuccess: function(transport) {
			var response = transport.responseText;
			if (response == 'session expired') {
				window.location.reload();
			}
			else {			
				$('twAdminGroupSelect').update('<ul>'+response+'</ul>');
				var optionItems = $$('.twAdminGroupSelectOption');
				if (optionItems){
					optionItems.each( function(e) {
						e.observe('click', groupAdminSelectionClicked);
					})
				}			
				var groupSelected = $$('.twAdminGroupSelected');
				if (groupSelected) {
					var groupSelection = groupSelected[0].identify().split('-');
					modifyGroupAdminActionButtons(groupSelection[2],groupSelection[3],groupSelection[4]);
				}
			}
		},
		onFailure: function(transport) {alertBox('Technical problems while connecting with the server, selection was not recorded. Please try again later.' + transport.responseText)}
	});
}

function emailAdminSelectionClick(e) {
	tmp=e.element().identify();
	if(tmp=='addGroup') {
		new Ajax.Request('ajax.php', {
			method: 'get',
			parameters: {script: 'processEmailAdminSelection', action: 'editGroup', schedule_uid: 0},
			onSuccess: function(transport) {
				var response = transport.responseText;

				// actions: editGroup, toggleStatus, addGroup, groupMembers, groupMailings, uploadUserList

				$('twAdminGroupRightBox').replace('<div id="twAdminGroupRightBox">'+response+'</div>');
			},
			onFailure: function(transport) {alertBox('Technical problems while connecting with the server, selection was not recorded. Please try again later. ' + transport.responseText)}
		});
		return;
	}

	var elemId = e.element().identify().split('-');
	var action = elemId[0];
	var uid = elemId[1];

	//else {
		new Ajax.Request('ajax.php', {
			method: 'get',
			parameters: {script: 'processEmailAdminSelection', action: action, schedule_uid: uid, edit: true, status: $('status-'+uid).innerHTML},
			onSuccess: function(transport) {
				var response = transport.responseText;

				// actions: editGroup, toggleStatus, addGroup, groupMembers, groupMailings, uploadUserList

				if (response == 'problem') {
					alertBox('There was a problem while processing this request, please try again and if this problem persists, contact an Administrator.');
					// we do not perform any action if the same selection was made
				}
				else {
					if (action == 'uploadSkills' ) {
						infoBox(['coming soon']);
					}
					else if (action == 'toggleStatus' ) {
						statusClass = (response == 'active') ? ' class="bold"': '';
						$('status-'+uid).replace('<span'+ statusClass+' id="status-'+uid+'">'+response+'</span>');
						// also exchange icone
					}
					else if (action == 'editGroup' || action == 'addGroup' || action == 'uploadUserList') {
						$('twAdminGroupRightBox').replace('<div id="twAdminGroupRightBox">'+response+'</div>');
					}
					else {
						$responseArr = response.split('~~~');
						$('twAdminGroupLeftBox').replace('<div id="twAdminGroupLeftBox">'+$responseArr[0]+'</div>');
						$('twAdminGroupRightBox').replace('<div id="twAdminGroupRightBox">'+$responseArr[1]+'</div>');
					}
				}
			},
			onFailure: function(transport) {alertBox('Technical problems while connecting with the server, selection was not recorded. Please try again later. ' + transport.responseText)}
		});
	//}
}

var setObservingRemoveLogo = function() {
	if($$('.twRemoveLogo')) {
		$$('.twRemoveLogo').each(function(e) {
			e.observe('click', removeImageClick);
		});
	}
}

function removeImageClick(e) {
	e.stop();
	tmpArr=e.element().identify().split('-');

	new Ajax.Request('ajax.php', {
		method: 'get',
		parameters: {script: 'processGroupAdminSelection', action: 'imageRemoval', groupUid: tmpArr[1], imgUid: tmpArr[2]},
			onSuccess: function(transport) {
				var response = transport.responseText;
				if (response == 'session expired') {
					window.location.reload();
				}
				else if (response == 'problem') {
					alertBox('There was a problem while processing your request to remove an image. Please refresh the page and try again. If it this problem persists, please contact an Administrator.');
					// we do not perform any action if the same selection was made
				}
				else if (response && $('imageUpload')) {
					$('imageUpload').replace(response);
					setObservingRemoveLogo();
				}
			},
			onFailure: function(transport) {alertBox('Technical problems while connecting with the server, selection was not recorded. Please try again later.' + transport.responseText)}
		});
}

var setObservingDemographics = function() {
	var lifestyleOptions = $$('.twLifestyleOptionList');
	if (lifestyleOptions){
		lifestyleOptions.each(function (parentE) {
			parentE.immediateDescendants().each(function(e) {
			e.down().observe('click', catOptionClick);
			});
		});
	}
}

var toggleLfestyleScreen = function(response) {
	//alert(response.split('~~~'));
	replaceArr = response.split('~~~');
	$('cat-' + replaceArr[0]).replace(replaceArr[1]);
	$('cat-' + replaceArr[6]).replace(replaceArr[2]);
	$('twLifestyleQuestion').replace(replaceArr[3]);
	$$('.twIamOption')[0].replace(replaceArr[4]);
	$('emph-' + replaceArr[0]).replace(replaceArr[5]);
	setObservingDemographics();
	//toggle classes if needed
	if(replaceArr[0] == 1 && replaceArr[6] > 1) {
		if($('twPrevBtn').hasClassName('twPrevBtnDisabled')) {
			$('twPrevBtn').removeClassName('twPrevBtnDisabled');
			$('twPrevBtn').toggleClassName('twPrevBtn');
		}
	}
	if(replaceArr[0] > 1 && replaceArr[6] == 1) {
		if($('twPrevBtn').hasClassName('twPrevBtn')) {
			$('twPrevBtn').removeClassName('twPrevBtn');
			$('twPrevBtn').toggleClassName('twPrevBtnDisabled');
		}
	}
	if(replaceArr[0] == 12 && replaceArr[6] < 12) {
		if($('twNextBtn').hasClassName('twNextBtnDisabled')) {
			$('twNextBtn').removeClassName('twNextBtnDisabled');
			$('twNextBtn').toggleClassName('twNextBtn');
		}
	}
	if(replaceArr[0] < 12 && replaceArr[6] == 12) {
		if($('twNextBtn').hasClassName('twNextBtn')) {
			$('twNextBtn').removeClassName('twNextBtn');
			$('twNextBtn').toggleClassName('twNextBtnDisabled');
		}
	}
}

function catNumberClick(e) {
	var newCategory = e.element().identify().split('-')[1];
	//alert(e.element().inspect());
	new Ajax.Request('ajax.php', {
		method: 'get',
		parameters: {script: 'changeLifestyleCategory', categoryUid: newCategory},
		onSuccess: function(transport) {
			var response = transport.responseText;
			if (response == 'same_selection') {
				//alert('SAME SELECTION!!!');
				// we do not perform any action if the same selection was made
			}
			else {
				//alert(response.split('~~~'));
				//replaceArr = response.split('~~~');
				toggleLfestyleScreen(response);
			}
		},
		onFailure: function(transport) {alertBox('Technical problems while connecting with the server, selection was not recorded. Please try again later.')}
	});
}

function arrowClick(e) {
	new Ajax.Request('ajax.php', {
		method: 'get',
		parameters: {script: 'changeLifestyleCategory', buttonClicked: e.element().identify()},
		onSuccess: function(transport) {
			var response = transport.responseText;
			if (response == 'same_selection') {
				//alert('SAME SELECTION!!!');
				// we do not perform any action if the same selection was made
			}
			else {
				toggleLfestyleScreen(response);
			}
		},
		onFailure: function(transport) {alertBox('Technical problems while connecting with the server, selection was not recorded. Please try again later.')}
	});
}

function catOptionClick(e) {
	selectedOption = e.element().identify().substring(1);
	new Ajax.Request('ajax.php', {
		method: 'get',
		parameters: {script: 'updateSelection', skillUid: selectedOption},
		onSuccess: function(transport) {
			var response = transport.responseText;
			if (response == 'problem') {
				alertBox('Technical problems with functionality on the server, selection was not recorded. Please try again later.');
			}
			else {
				$('twLifestyleQuestion').replace(response);
				setObservingDemographics();
				checkLifestyleCompleteness();
			}
		},
		onFailure: function(transport) {alertBox('Technical problems while connecting with server, selection was not recorded. Please try again later.')}

	});
}

var checkLifestyleCompleteness = function() {
	if($('twPercent')) {
		new Ajax.Request('ajax.php', {
			method: 'get',
			parameters: {script: 'checkLifestyleCompleteness'},
			onSuccess: function(transport) {
				var response = transport.responseText;
				if (response == demographicCategoriesCount){
					// completed lifestyle section
					// do checkAndRemoveCheckboxesIfCompleted
					checkAndRemoveCheckboxesIfCompleted('Lifestyle');
					// do replacement of arrow text and link destination modification
					// for that selection
					//replaceRightArrow();
				}
			}
			// silent mode
			//onFailure: function(transport) {alertBox('Technical problems whlile connecting with server, selection was not recorded. Wait a little while and try again, please.')}

		});
	}
}

function catEmphClick(e) {
	//var category = e.element().identify().split('-')[1];
	//alert(e.element().inspect() + ' - ' + category);
	activeSelectionPresent = 0;
	$$('.twLifestyleOptionList')[0].immediateDescendants().each(function(elem) {
		if ($(elem).down().hasClassName('active') || $(elem).down().hasClassName('favorite')) {
			activeSelectionPresent = $(elem.down());
		}
	})
	//alert(activeSelectionPresent.inspect());
	var eventElement = e.element();
	if (!activeSelectionPresent) {
		alertBox('A selection must be made prior to marking the trait as important.');
	}
	else {
		newEmphValue = (e.element().hasClassName('twOptionPressed'))? 'n': 'y';
		new Ajax.Request('ajax.php', {
			method: 'get',
			parameters: {script: 'updateSelection', emphasizedValue: newEmphValue},
			onSuccess: function(transport) {
				var response = transport.responseText;
				if (response == 'problem') {
					alertBox('Technical problems with functionality on the server, selection was not recorded. Please try again later.');
				}
				else {
					$('twLifestyleQuestion').replace(response);
					if (eventElement.hasClassName('twOptionPressed')) {
						eventElement.removeClassName('twOptionPressed');
					}
					else {
						eventElement.toggleClassName('twOptionPressed');
					}
					setObservingDemographics();
				}
			},
			onFailure: function(transport) {alertBox('Technical problems while connecting with server, selection was not recorded. Please try again later.')}

		});
	}
}


function processInviteFriend(e) {
	if ($('twRightWrapper')) {
		infoBox(['Thank you for inviting a friend. However, this function will only become active once you are logged in. Please log in and try again.']);
	}
	else if(!$('twInviteFriend').value || $('twInviteFriend').value == inviteFriendHint) {
		alertBox('Please enter a valid email address.');
	}
	else{
		infoBox(['This feature is not yet implemented. We are working hard to bring you this and many other excellent features. Please try again in a few days.'])
	}
}


var expTabClicked = function (clickedKey, brandingKeys) {

	//var radio = document.getElementsByName('tabBoxRadio');
	var radio = $$('.tabBoxRadio');

	for (i=0;i<radio.length;i++){
		var currId = $(radio[i]).identify();
		//alert($(radio[i]).identify());
		var idNum = currId.slice(11);
		if (radio[i].hasClassName('selected') && clickedKey != idNum) {
			radio[i].removeClassName('selected');
		}
		if (!radio[i].hasClassName('selected') && clickedKey == idNum)  {
			radio[i].toggleClassName('selected');
			if (brandingKeys) {
				var showLogo = true;
				$w(brandingKeys).each(function(brandingKey) {
					 showLogo = (clickedKey == brandingKey) ? false: showLogo;
				})
			} else {
				var showLogo = true;
			}
			//brandingtTab(clickedKey, showLogo);
		}
		if (clickedKey == idNum) {
			var clickedElement = currId;
		}
	}
	var skillAreaName = $(clickedElement).firstChild.data;
	$('twELabelCaregoryBox').update('Categories in "'+skillAreaName.strip()+'"');
	$('twELabelSkillBox').update('Specific Experiences');
	// this is to check if there is "disclosing" policy on group specific experiences set
	new Ajax.Request('ajax.php', {
		method: 'get',
		parameters: {script: 'checkGroupSkillPolicy', clicked: clickedKey},
		onSuccess: function(transport) {
			var response = transport.responseText;
	//alert (response);
			if (response == 'private' || response == 'disclosed') {
				if($('twEWarning')) {
					$('twEWarning').replace(getExperiencesWarningDiv(response, skillAreaName));
				}
			}
			else if (response == 'session expired') {
				window.location.reload();
			}
			else if (response == 'same selection') {
				// no action here
				//alert ('same selection made - just for debugging -> remove in production');
			}
			else if (response == 'Script does not exist.') {
				alertBox (response);
			}
 			else {
 				// roll back clicked change - set the value back
				//alert('Server encountered some technical problems while processing your selection. Please try again.');
				alertBox(response);
			}

		},
		onFailure: function(transport) {
			//alertBox('Technical problems while connecting to server, selection was not processed. Wait a little while and try again, please.')}
			}
	});
	// this is to check / ignore same selection
	var ignoreFlag = 0
	doCategoryHtmlCall(clickedKey, ignoreFlag);
}

var getExperiencesWarningDiv = function (mode, name) {
	if (mode == 'private') {
		var klass =	'twEPrivate';
		var par = 'Experiences are always kept private, unless you choose to answer a question openly.';
	}
	else {
		var klass = 'twEDisclosed';
		var par = '<span class="twRed">Warning:</span> Group members will be able to see your "'+name+'" Experiences (but not the others).';
	}
	return	'	<div id="twEWarning" class="'+klass+'"> \n		<p>'+par+'</p> \n	</div>\n';
}

var doCategoryHtmlCall = function(clickedKey, ignoreFlag) {

	new Ajax.Request('ajax.php', {
		method: 'get',
		parameters: {script: 'getCategoryHtml', clicked: clickedKey, ignoreSame: ignoreFlag},
		onSuccess: function(transport) {

			var response = transport.responseText;
	//alert (response);
			if (response.slice(0,3) == '<ul') {

				if ($('twECaregoryBox').empty()) {
					$('twECaregoryBox').insert(response);
				}
				else {
					$('twECaregoryBox').firstDescendant().replace(response);
					$('twECaregoryBox').update(response);
				}

				if (!$('twESkillBox').empty()) {
					$('twESkillBox').firstDescendant().replace('');
					$('twESkillBox').update('');
				}

			}
			else if (response == 'session expired') {
				window.location.reload();
			}
			else if (response == 'same selection') {
				// no action here
				//alert ('same selection made - just for debugging -> remove in production');
			}
			else if (response == 'Script does not exist.') {
				alertBox (response);
			}
 			else {
 				// roll back clicked change - set the value back
				//alert('Server encountrered some technical problems while processing your selection. Please try again.');
				alertBox(response);
			}

		},
		onFailure: function(transport) {
			// roll back clicked change - set the value back

			alertBox('Technical problems while connecting to server, selection was not processed. Please try again later.')}
	});
}

var checkAndRemoveCheckboxesIfCompleted = function(from) {
	var qMarkCount = 0;
	$$('.twMenuCheckmark').each(function(e) {
		if(e.up().down().match('span') && e.up().down().innerHTML == from) {
			if(e.readAttribute('src') == 'img/unchecked.gif') {
				e.replace(checkMark);
			}
		}
		if(e.readAttribute('src') == 'img/unchecked.gif') {
			qMarkCount++;
		}
	});
	if (qMarkCount == 0) {
		$('twPercent').remove();
		$$('.twMenuCheckmark').each(function(e) {
			e.remove();
		});
	}
}

var expCategoryClicked = function(clickedKey, tabKey){

	//var radio = document.getElementsByName('categoryBoxRadio');
	var radio = $$('.categoryBoxRadio');

	var completed = true;
	for (i=0;i<radio.length;i++){
		var currId = radio[i].identify();
		var idNum = currId.slice(16);
		if (radio[i].hasClassName('selected') && clickedKey != idNum) {
			radio[i].removeClassName('selected');
		}
		if (!radio[i].hasClassName('selected') && clickedKey == idNum)  {
			if (radio[i].hasClassName('incomplete')) {
				radio[i].removeClassName('incomplete');
			}
			radio[i].toggleClassName('selected');
		}
		if (radio[i].hasClassName('incomplete')) {
			completed = false;
		}
		if (clickedKey == idNum) {
			var clickedElement = currId;
		}
	}
	if (completed && $('catIncompleteText')){
		$('catIncompleteText').remove();
	}
	if (completed && $('tabBoxRadio'+tabKey).hasClassName('incomplete')) {
		$('tabBoxRadio'+tabKey).removeClassName('incomplete');
		var registrationAllCompleted = true;
		//var allTabs = document.getElementsByName('tabBoxRadio');
		var allTabs = $$('.tabBoxRadio');
		for(i=0;i<allTabs.length; i++) {
			if (allTabs[i].hasClassName('incomplete')) {
				registrationAllCompleted = false;
			}
		}
		if (registrationAllCompleted) {
			//if($('registeringProgress')) {
			//	$('registeringProgress').parentNode.remove();
			//}
			$('tabIncompleteText').remove();
			if ($('twPercent')) {
				checkAndRemoveCheckboxesIfCompleted('Experiences');
			}
			infoBox(["Congratulations! Your registration is complete! Thank you for taking the time to describe your skills and experiences.<br />Now, why not try out the system by asking someone a question!"]);
		}
	}
	var categoryName = $(clickedElement).firstChild.data;
	$('twELabelSkillBox').update('Specific Experiences in "'+categoryName.strip()+'"');

	// this is to check / ignore same selection
	var ignoreFlag = 0
	doSkillHtmlCall(clickedKey, ignoreFlag);
}

var doSkillHtmlCall = function(clickedKey, ignoreFlag) {

	new Ajax.Request('ajax.php', {
		method: 'get',
		parameters: {script: 'getSkillsHtml', clicked: clickedKey, ignoreSame: ignoreFlag},
		onSuccess: function(transport) {

			var response = transport.responseText;
			if (response.slice(0,4) == '<tab') {
				responseArr = response.split('~~~');
				if ($('twESkillBox').empty()) {
					$('twESkillBox').insert(responseArr[0]);
				}
				else {
					$('twESkillBox').firstDescendant().replace(responseArr[0]);
				}
				if($('twPercent') && responseArr[1]) {
					$('twPercent').replace(responseArr[1]);
				}
			}
			else if (response == 'session expired') {
				window.location.reload();
			}
			else if (response == 'same selection') {
				// no action here
				//alert ('same selection made - just for debugging -> remove in production');
			}
			else if (response == 'Script does not exist.') {
				alertBox (response);
			}
 			else {
 				// roll back clicked change - set the value back
				//alert('Server encountrered some technical problems while processing your selection. Please try again.');
				alertBox(response);
			}

		},
		onFailure: function(transport) {
			// roll back clicked change - set the value back

			alertBox('Technical problems while connecting to server, selection was not processed. Please try again later.')}
	});
}


var expSkillClicked = function( skillKey, levelUid, tabKey) {
	new Ajax.Request('ajax.php', {
		method: 'get',
		parameters: {script: 'setSkillsSelection', skill: skillKey, level: levelUid},
		onSuccess: function(transport) {

			var response = transport.responseText;
			if (response.strip() == 'deleted' || response.strip() == 'inserted') {
				// updated successfully - update Authority box count (if present)
				if($('twTypeSkillsCount-'+tabKey)) {
					currentValue = ($('twTypeSkillsCount-'+tabKey).innerHTML == '-')? 0: $('twTypeSkillsCount-'+tabKey).innerHTML;
					//currentValue = new Number(currentValue);
					if(response == 'deleted'){
						if(currentValue == 1){
							$('twTypeSkillsCount-'+tabKey).innerHTML = '-';
						}
						else {
							$('twTypeSkillsCount-'+tabKey).innerHTML = Math.abs(currentValue) - 1;
						}
						adjustSkillTotal('subtract');
					}
					else { // inserted
						if(currentValue == 0){
							$('twTypeSkillsCount-'+tabKey).innerHTML = 1;
						}
						else {
							$('twTypeSkillsCount-'+tabKey).innerHTML = Math.abs(currentValue) + 1;
						}
						adjustSkillTotal('add');
					}
				}
			}
			else if (response == 'not deleted' || response == 'not inserted') {
				var checkedValue = (response == 'not deleted');
				$('skill['+skillKey+']['+levelUid+']').checked = checkedValue;
			}
			else if (response == 'session expired') {
				window.location.reload();
			}
			else if (response == 'same selection') {
				// no action here
				//alert ('same selection made - just for debugging -> remove in production');
			}
			else if (response == 'Script does not exist.') {
				alertBox (response);
			}
 			else {
 				// roll back clicked change - set the value back
				//alert('Server encountrered some technical problems while processing your selection. Please try again.');
				alertBox(response);
			}

		},
		onFailure: function(transport) {
			// roll back clicked change - set the value back

			alertBox('Technical problems while connecting to server, selection was not processed. Please try again later.')}
	});
}

var adjustSkillTotal= function(action) {
	currentTotalValue = ($('twThSkills').innerHTML == '-')? 0: $('twThSkills').innerHTML;
	if(action == 'subtract'){
		if(currentTotalValue == 1){
			$('twThSkills').innerHTML = '-';
		}
		else {
			$('twThSkills').innerHTML = Math.abs(currentTotalValue) - 1;
		}
	}
	else { // add
		if(currentTotalValue == 0){
			$('twThSkills').innerHTML = 1;
		}
		else {
			$('twThSkills').innerHTML = Math.abs(currentTotalValue) + 1;
		}
	}
}

var catToggle = function() {
	$('addCatTrigger').toggle();
	$('addCatForm').removeClassName('noDisp');
}

var addCategory = function(tabKey) {
	if (!$('addCatName').value) {
		alertBox('Define at least Category Name for valid Submit.');
	}
	else {
		var ignoreFlag = 1
		if($('addCatDesc')) {
			var catDesc = $('addCatDesc').value;
		}
		else {
			var catDesc = '';
		}
		new Ajax.Request('ajax.php', {
			method: 'get',
			parameters: {script: 'addNewCategory', catName: $('addCatName').value, catDesc: catDesc},
			onSuccess: function(transport) {
				var response = transport.responseText;
				if (response == 'OK') {
					doCategoryHtmlCall(tabKey, ignoreFlag);
				}
				else if (response == 'exists') {
					alertBox ('Category ' +$('addCatName').value + ' already exists');
				}
				else if (response == 'session expired') {
					window.location.reload();
				}
				else if (response == 'Script does not exist.') {
					alertBox (response);
				}
				else {
					alertBox('Technical problems while recording data to the database.');
				}
			},
			onFailure: function(transport) {
				// roll back clicked change - set the value back

				alertBox('Technical problems while connecting to the server, submitted data was not processed. Please try again later.')}
		})
	}
}


var skillToggle = function() {
	$('addSkillTrigger').toggle();
	$('addSkillForm').removeClassName('noDisp');
}

var addSkill = function(catKey) {
	if (!$('addSkillName').value) {
		alertBox('Define at least Skill Name for valid Submit.');
	}
	else {
		var ignoreFlag = 1
		if($('addSkillDesc')) {
			var skillDesc = $('addSkillDesc').value;
		}
		else {
			var skillDesc = '';
		}
		new Ajax.Request('ajax.php', {
			method: 'get',
			parameters: {script: 'addNewSkill', skillName: $('addSkillName').value, skillDesc: skillDesc},
			onSuccess: function(transport) {
				var response = transport.responseText;
				if (response == 'OK') {
					doSkillHtmlCall(catKey, ignoreFlag);
				}
				else if (response == 'exists') {
					alertBox ('Experience ' +$('addSkillName').value + ' already exists');
				}
				else if (response == 'session expired') {
					window.location.reload();
				}
				else if (response == 'Script does not exist.') {
					alertBox (response);
				}
				else {
					alertBox('Technical problems while recording data to the database.');
				}
			},
			onFailure: function(transport) {
				// roll back clicked change - set the value back

				alertBox('Technical problems while connecting to the server, your submitted data was not processed. Please wait a little while and try again.')}
		})
	}
}

//var foldEffect = function (targetId) {
//	if ($(targetId).hasClassName('hidden')) {
//		// show
//		$$('div.accordion').each(function(toHide) {
//			if (!toHide.hasClassName('hidden')) {
//				toHide.toggleClassName('hidden');
//			}
//		})
//		$(targetId).removeClassName('hidden');
//	} else {
//		// hide
//		$(targetId).toggleClassName('hidden');
//	}
//}
//
var updateonclick = function (selectKind, formName, currentElementId, brandingKeys) {
	var targetId = formName + '_' + selectKind;
	var targetElem = $(targetId);
	var varName = formName + '[' + selectKind + ']';
	var currentId = formName + '_' + currentElementId;
	if (brandingKeys) {
		var showLogo = true;
		//		$w(brandingKeys).each(function(brandingKey) {
		//			 showLogo = ($(currentId).value == brandingKey) ? false: showLogo;
		//		})
	} else {
		var showLogo = true;
	}
	// clearing twFAASXusersCanAnswer and twFAASQuestionAbout elements
	$('twFAASXusersCanAnswer').update('');
	$('twFAASQuestionAbout').update('');

	if (selectKind == 'expCategory') {
		brandingtTab($(currentId).value, showLogo);
	}
	var selection = 0;
	if (selectKind == 'experience' && $(targetId)) {
		selection = $F(targetId);
	}

	new Ajax.Request('ajax.php', {
		method: 'get',
		parameters: {script: 'updateSelect', kind: selectKind, name: varName, value: $F(currentId), selection: selection},
		onSuccess: function(transport) {
			var response = transport.responseText;
			if (response == 'Script does not exist.') {
				alertBox (response);
			}
			else {
				targetElem.replace(response);
			}

		},
		onFailure: function(transport) {alertBox('Technical problems while connecting with the server, please try again.')}
	});

	if (selectKind == 'expCategory') {
		$('newRequest_experience').replace('<select id="newRequest_experience" multiple="multiple" size="5" name="newRequest[experience]"></select>');
		new Ajax.Request('ajax.php', {
			method: 'get',
			parameters: {script: 'updateSelect', kind: 'expLevel', name: formName + '[expLevel]', value: $(currentId).value },
			onSuccess: function(transport) {
				var response = transport.responseText;
				if (response == 'Script does not exist.') {
					alertBox (response);
				}
				else {
					$(formName + '_expLevel').replace(response);
				}

			},
			onFailure: function(transport) {alertBox('Technical problems while connecting with the server, please try again.' + transport)}
		});
	}

}

var brandingtTab = function(expTabKey, showLogo) {
	hashKey = 't'+expTabKey;
	if ($('twFaaGroupImage')) {
		if (availableTabs.get(hashKey).url) {
			aTagBefore = '<a href="'+availableTabs.get(hashKey).url+'" title="'+availableTabs.get(hashKey).alt+'">';
			aTagAfter = '</a>';
		}
		else {
			aTagBefore = '';
			aTagAfter = '';
		}
		$('twFaaGroupImage').replace(aTagBefore+'<img id="twFaaGroupImage" src="'+availableTabs.get(hashKey).src+'" alt="'+availableTabs.get(hashKey).alt+'" />'+aTagAfter);
	}
	else {
		if ($('logoExp')) {
			$('logoExp').replace('<div id="logoExp"></div>');
		}
		//$('body_right').setStyle({background: '#FAFAFA', color: 'black'});
		if ($('questionRelated')) {
			$('questionRelated').replace('<span id="questionRelated"></span>');
		}
	}
}

var brandingHome = function(backgroundVal, colorVal) {
	$('body_right').setStyle({background: backgroundVal, color: colorVal});
}


//var resetTarget = function(context, place) {
//
//	var valueX = '';
//	if (context == 'radio') {
//		var radio = document.getElementsByName('newRequest[target]');
//		var identifierX = 'target';
//		for (i=0;i<radio.length;i++){
//			if (radio[i].checked) {
//				valueX = radio[i].value;
//				break;
//			}
//		}
//	}
//	else if (context == 'pulldown') {
//		var identifierX = place;
//		var elementId = '';
//		if (place == 'level') {
//			elementId = 'newRequest_expLevel';
//		}
//		else if (place == 'group') {
//			elementId = 'groupSelection';
//		}
//	//alert(place);
//		var selection = $(elementId).selectedIndex;
//		valueX = $(elementId).options[selection].value;
//	}
//
//	new Ajax.Request('ajax.php', {
//		method: 'get',
//		parameters: {script: 'resetTarget', identifier: identifierX, value: valueX },
//		onSuccess: function(transport) {
//			var response = transport.responseText;
//
//			if (response == 'Script does not exist.') {
//				alert (response);
//			}
//			else if (response == 'OK'){
//				// probably wrong idea //updateonclick('expCategory', 'newRequest', 'expTab');
//				//targetElem.replace(response);
//				// heere we need to reload skill pulldown select - but only if it was already loaded!
//				if ($('newRequest_experience').length > 1) {
//					// already populated pulldown combo - regenerate it
//					updateonclick('experience', 'newRequest', 'expCategory');
//				}
//			}
//
//		},
//		onFailure: function(transport) {alert('Technical problems whlile connecting with server, please try again.')}
//	});
//}


var callSetTwSelectionCheckbox = function() {
	toggleTwSelectionCheckbox(true);
}

var callToggleTwSelectionCheckbox = function() {
	toggleTwSelectionCheckbox(false);
}

var callDeleteTwSelectionCheckbox = function() {
	deleteTwSelectionCheckbox();
}

var toggleTwSelectionCheckboxRowClass = function(e) {
	doToggleTwSelectionCheckbox(e.element(), e.element().checked);
}

var toggleTwSelectionCheckbox = function(action) {
	$$('.twSelectionCheckbox').each( function(e) {
		doToggleTwSelectionCheckbox(e, action);
	});
}

var doToggleTwSelectionCheckbox = function(e, action) {
	e.checked = action;
	rowElement = e.up(1);
	if (action) {
		if (!rowElement.hasClassName('twSelected')) {
			//rowElement.toggleClassName('twSelected');
		}
	}
	else {
		if (rowElement.hasClassName('twSelected')) {
			//rowElement.removeClassName('twSelected');
		}
	}
}

var deleteTwSelectionCheckbox = function() {
	$$('.twSelectionCheckbox').each( function(e) {
		if (e.checked == true) {
			modifyAdviceRequestStatus(e.identify().split('-')[1],'deleted','list');
			e.up(1).remove();
		}
	});
}

var callDeleteQuestion = function() {
	modifyAdviceRequestStatus(0, 'deleted', 'detail');
}

var openAccordion = function(e) {
	e.stop();
	e.element().stopObserving('mouseover', openAccordion);
	if (e.findElement('li').down('ul.twAccordionClosed')) {
		toggleElement = e.findElement('li').down('ul.twAccordionClosed');
		if (toggleElement.hasClassName('twAccordionClosed')) {
			toggleElement.removeClassName('twAccordionClosed');
			e.findElement('li').down('ul.twMSn').descendants().each( function(elem) { //.observe('mouseout', closeAccordion);
				elem.observe('mouseout', closeAccordion);
			});
		}
	}
}

var closeAccordion = function(e) {

	e.stop()
	//alert (e.relatedTarget.inspect());
	e.element().stopObserving('mouseout', closeAccordion);
	if (e.findElement('li').down('ul.twMSn')) {
		toggleElement = e.findElement('li').down('ul.twMSn');
		if (!toggleElement.hasClassName('twAccordionClosed')) {
			toggleElement.toggleClassName('twAccordionClosed');
			e.findElement('li').observe('mouseover', openAccordion);
		}
	}
}

var slideInstrOut = function(e) {
	e.stop();
	if ($('twHelpTextWrapperHorizontal')){
		//$('twHelpTextWrapperHorizontal').show();
		Effect.toggle('twHelpTextWrapperHorizontal', 'appear', {duration: 0.5});
		$('twHelpTextWrapperHorizontal').observe('click', collapseInst);
	}
}
	
var collapseInst = function(e) {
	e.stop();
	if ($('twHelpTextWrapperHorizontal')){
		//$('twHelpTextWrapperHorizontal').hide();
		Effect.toggle('twHelpTextWrapperHorizontal', 'appear', {duration: 0.5});
		$('instBtn').observe('click', slideInstrOut);
	}
}


var callRegenerateRegion = function() {
	var continent = $F($('continentsSelect'));
	var region = $F($('countrySelect'));
	var formName = $('continentsSelect').readAttribute('name').split('[',2)[0];
	regenerateRegion(continent, region, formName);
}

var regenerateRegion = function (continent, region, formName) {
	new Ajax.Request('ajax.php', {
		method: 'get',
		parameters: {script: 'getCountrySelect', cont: continent, name: formName, regi: region},
		onSuccess: function (transport) {
			var response = transport.responseText;
			if (response == 'Script does not exist.' || response == 'Session expired') {
				alertBox (response);
			}
			else {
				$('countrySelect').replace(response);
				if ($('newRequest')) {
					// reset target only in the context of new request 'Ask a question'
					$('countrySelect').observe('change', resetTarget);
					resetTarget();
				}
			}
		},
		onFailure: function(transport) {alertBox('Technical problems while connecting with the server, please try again.')}
	});
}

var resetTarget = function(formName) {
	//var groups = $$('input.catch');
	var grpOptions = $A($('groupSelect'));
	var valArr = [];
	grpOptions.each(function(s) {	
		n = (s.value)? s.value: 0;
		if (n>0) {
			valArr.push(n);
		}
	});
	var group = $F($('groupSelect'));
	group = (group)? group: 0;
	var continent = $F($('continentsSelect'));
	var countrySelect = $('countrySelect');
	var region = $F(countrySelect);
	var places = $H({'continent':continent,'country':region})

	// temporary - until event on element is detectable:
	//if (continent) {
	//	regenerateRegion(continent, region, formName);
	//}

	new Ajax.Request('ajax.php', {
		method: 'get',
		parameters: {script: 'resetTarget', group: group, selections: valArr.toJSON(), places: places.toJSON() },
		onSuccess: function(transport) {
			var response = transport.responseText;

			if (response == 'Script does not exist.') {
				alertBox (response);
			}
			else if (response == 'OK'){
				// probably wrong idea //updateonclick('expCategory', 'newRequest', 'expTab');
				//targetElem.replace(response);
				// heere we need to reload skill pulldown select - but only if it was already loaded!
				//if ($('newRequest_experience').length > 1) {
					// already populated pulldown combo - regenerate it
					updateonclick('experience', 'newRequest', 'expCategory');
				//}
			}

		},
		onFailure: function(transport) {alertBox('Technical problems while connecting with the server, please try again.')}
	});
}

var checkAvailSkills = function() {
	var currSkillSelection = $('newRequest_experience').options[$('newRequest_experience').selectedIndex].text;
	var problem = true;
	var reg = new RegExp("([0-9]+)","g");
	reg.test(currSkillSelection);
	var count = RegExp.lastMatch;
	if (RegExp.lastMatch != 0) {
		problem = false;
	}

	if (problem) {
		// disable select and show warning
		$('newRequest[submit]').disabled = true;
		$('newRequest[anonym]').disabled = true;
		alertBox('You have selected a skill nobody has; please choose another.');
	}
	else {
		// enable select and remove warning
		$('newRequest[submit]').disabled = false;
		$('newRequest[anonym]').disabled = false;
		plural = (count > 1)? 's': '';
		$('twFAASXusersCanAnswer').update(count + ' user'+plural+' can answer');
		var position = currSkillSelection.indexOf('(');
		$('twFAASQuestionAbout').update(' about "'+currSkillSelection.substring(0,position)+'"');
		
		showNewRequestAreas();
	}
}

var showNewRequestAreas = function(){
	$('twFAASMiddleSection').show();
	$('twFAASLastSection').show();
}

var showNewRequestButtons = function() {
	$('privatePublicButtons').show();
}

var hideNewParagraphHintText = function() {
	$('twStepFirstParagraph').hide();
	$('twStepSecondParagraph').hide();
}
var showNewParagraphHintText = function() {
	$('twStepFirstParagraph').show();
	$('twStepSecondParagraph').show();
}

var newRequestQuestionChange = function(e) {
	elem = e.element();
	if (elem.value.length > 0 && elem.value != 'Write your complete question, with enough detail for your colleague to decide whether they can answer.') {
		showNewRequestButtons();
	}
}

var invite = function (addresseeId, currentUser, adviceId, methodStr) {
	// buttons will hide immediately after this function triggers to avoid double dipping
	// in the invitation of the same person or anyone else if there is big latency of Ajax request processing
	$$('button.buttonInvite').each(function(buttonElement) {
		buttonElement.hide();
	});

	new Ajax.Request('ajax.php', {
		method: 'get',
		parameters: {script: 'invite', addressee: addresseeId, current: currentUser, advice: adviceId, inviteMethod: methodStr},
		onSuccess: function(transport) {

			var response = transport.responseText;
			if (response == 'OK') {
				infoBox(['Your question has been sent.  You will receive a reply soon, or you can choose another user.']);
				// now go to back to current page
				//var formElement = $('buttonForm');
				//formElement.insert('<input type="hidden" name="advice_uid" value="' + adviceId + '">');
				//formElement.submit();
				$('twBoxSubmit').observe('click', goToHomepage);
			}
			else if (response == 'Script does not exist.') {
				alertBox (response);
			}
 			else {
				alertBox('The server encountered technical problems while sending your invitation email. You can re-submit. '+response);
			}

		},
		onFailure: function(transport) {alertBox('Technical problems while connecting to the server, so your invitation was not submitted. You can try again.')}
	});
}

function goToHomepage(e) {
	var mainContentDiv = $('twMainContent');
	mainContentDiv.insert('<form method="get" action="index.php" id="buttonForm"></form>');
	var formElement = $('buttonForm');
	formElement.insert('<input type="hidden" name="pg" value="1">');
	formElement.submit();	
}

function processAnswer(e) {
	var actionCheckArr = e.element().identify().split('-')
	if (actionCheckArr[0] == 'refer') {
		infoBox (['Coming in version 1.4']);
	}
	else if (actionCheckArr[0] == 'refuse') {
		//alert($$('.twTColumnQuestion').length);
		e.element().up(3).remove();
		refuse(actionCheckArr[1], actionCheckArr[3], actionCheckArr[2]);
		//alert(actionCheckArr[1] +' - action: ' + actionCheckArr[0] + ' (by: ' + actionCheckArr[2] +' originally from: ' + actionCheckArr[3] + ') --> ' + $('question-'+actionCheckArr[1]).firstChild.nodeValue);
	}
	else {
		// the rest of processing
		var methodStr = (actionCheckArr[0] == 'accept_anonym')? 'anonymously' : 'openly' ;
		e.element().up(3).remove();
		accept(actionCheckArr[1], actionCheckArr[3], actionCheckArr[2], methodStr);
		//alert(actionCheckArr[1] +' - action: ' + actionCheckArr[0] + ' (by: ' + actionCheckArr[2] +' originally from: ' + actionCheckArr[3] + ') --> ' + $('question-'+actionCheckArr[1]).firstChild.nodeValue);
	}
}


var accept = function (requestedId, originatorId, addresseeId, methodStr) {
	new Ajax.Request('ajax.php', {
		method: 'get',
		parameters: {script: 'accept', addressee: addresseeId, originator: originatorId, reqId: requestedId, acceptMethod: methodStr},
		onSuccess: function(transport) {
			var response = transport.responseText;
			if (response == 'OK') {
				var textLink = $('question-'+requestedId).firstChild.nodeValue;

				var htmlPatch = '<a id="question-' + requestedId + '" href="/index.php?pg=' + responseLandingPage + '&req_uid=' +
									requestedId + '" title="Link to ' + textLink + ' response page">' + textLink + '</a>';

				$('question-'+requestedId).replace(htmlPatch);

				$('question-'+requestedId).up(1).removeClassName('twTableAnswerYetNotAccepted');
				//var infoMessage = (methodStr == 'openly')
				//			? 'Thank you for accepting the request.  The person who asked will be informed by email.'
				//			: 'Thank you for accepting the request Anonymously.  The person who asked will be informed that an anonymous member of the TrustWorks™ community will answer.\n\nYour identity will never be revealed.';
				//infoBox([infoMessage]);

				var mainContentDiv = $('twMainContent');
				mainContentDiv.insert('<form method="get" action="index.php" id="buttonForm"></form>');
				var formElement = $('buttonForm');
				formElement.insert('<input type="hidden" name="pg" value="8">');
				formElement.insert('<input type="hidden" name="req_uid" value="' + requestedId + '">');
				formElement.submit();
			}
			else if (response == 'Script does not exist.') {
				alertBox (response);
			}
 			else {
				alertBox('Server encountered some technical problems while submitting your acceptance decission. You may try again to submit.');
			}

		},
		onFailure: function(transport) {alertBox('Technical problems while connecting to the server.  Your decision to accept was not submitted. You may try again.')}
	});
}

var refuse = function (requestedId, originatorId, addresseeId) {

	new Ajax.Request('ajax.php', {
		method: 'get',
		parameters: {script: 'refuse', addressee: addresseeId, originator: originatorId, reqId: requestedId},
		onSuccess: function(transport) {
			var response = transport.responseText;
			if (response == 'OK') {
				if ($$('.twTColumnQuestion').length > 2) {
				//if ($('title-'+requestedId).getOffsetParent().getOffsetParent().down().childElements().length > 2) {
					$('question-'+requestedId).up(1).remove();
				}
				else {
					var htmlPatch = '<h3>You do not have any questions to answer at the moment.</h3><h3>You are welcome start a new dialog - click "Ask a Question".</h3>';
					$('TwQuestionsIndice').remove();
					//$('twAnswerButtons').remove();
					$('question-'+requestedId).up(3).replace(htmlPatch);
				}

				infoBox(['The question has been refused.']);
			}
			else if (response == 'Script does not exist.') {
				alertBox (response);
			}
 			else {
				alertBox('Server encountered some technical problems while submitting your refusal decision. You may try again to submit.');
			}

		},
		onFailure: function(transport) {alertBox('Technical problems while connecting to the server, your refusal decision was not submitted. You may try again to submit.')}
	});
}

var modifyAdviceRequestStatus = function (adviceUid, action, context) {
	new Ajax.Request('ajax.php', {
		method: 'get',
		parameters: {script: 'modifyAdviceRequestStatus', advice: adviceUid, actionCode: action},
		onSuccess: function(transport) {
			var response = transport.responseText;
			if (response == 'OK') {
				if (context == 'detail') {
					window.location.reload(true);
				}
			}
			else if (response == 'Script does not exist.') {
				alertBox (response);
			}
			else if (response == 'identification problem') {
				alertBox ('Server had problem to identify Question item to be deleted.');
			}
 			else {
				alertBox('The server encountered technical problems while submitting your selection. You may try again.');
			}

		},
		onFailure: function(transport) {alertBox('Technical problems while connecting with the server, your selection was not submitted. You may try again.')}
	});
}

var turnThemOff = function (idExtension) {
	/// LAME!!! do it as an array later !!!!
	//var elementName = 'accept_text'+'-'+idExtension;
	//$(elementName).hide();
	var elementName = 'accept'+'-'+idExtension;
	$(elementName).hide();
	var elementName = 'accept_anonym'+'-'+idExtension;
	$(elementName).hide();
	var elementName = 'refuse'+'-'+idExtension;
	$(elementName).hide();
}

var toggleSearchOption = function(idName) {
	var tglIdName = idName+'_toggle';
	var linkname = idName+'_link';
	if ($(linkname).hasClassName('select')) {
		$(linkname).removeClassName('select');
	}
	else {
		$(linkname).toggleClassName('select');
	}
	$(tglIdName).toggle();


}

var grayOn = function(elementId) {
	if ($(elementId) && !$(elementId).hasClassName('grayHint')) {
		$(elementId).toggleClassName('grayHint');
	}
}

var grayOff = function(elementId) {
	if ($(elementId) && $(elementId).hasClassName('grayHint')) {
		$(elementId).removeClassName('grayHint');
	}
}

var groupAdminSelectionClicked = function(e) {
	var elem = e.element();
	var idParts = elem.identify().split('-');
	if (!elem.hasClassName('twAdminGroupSelected')) {
		var optionItems = $$('.twAdminGroupSelectOption');
		if (optionItems) {
			optionItems.each( function(el) {
				if (el.hasClassName('twAdminGroupSelected')){
					el.removeClassName('twAdminGroupSelected');
				}
			});
		}
		elem.toggleClassName('twAdminGroupSelected');
		modifyGroupAdminActionButtons(idParts[2], idParts[3],idParts[4]);
		updateGroupAdminCleanStoredSelections(idParts[1]);
	}
}

var modifyGroupAdminActionButtons = function(mode, active, deletable) {
	var twGroupActions = {
			'main' : {'on':$('addGroup', 'groupSkills'),
					'off':$('editGroup', 'toggleStatus', 'uploadUserList', 'groupMembers', 'uploadSkills', 'deleteGroup')},
			'priv' : {'on':$('editGroup', 'toggleStatus', 'addGroup', 'groupMembers', 'uploadSkills', 'groupSkills'),
					'off': [$('deleteGroup')]},
			'publ' : {'on': $('editGroup', 'toggleStatus', 'addGroup', 'groupMembers', 'uploadSkills', 'groupSkills'),
					'off': $('uploadUserList', 'deleteGroup' )}
					};
	
	if (active == 'active' && mode == 'priv') {
		twGroupActions['priv']['on'].unshift($('uploadUserList'));
	}
	else {
		twGroupActions['priv']['off'].unshift($('uploadUserList'));
	}
	if (deletable == 'yes') {
		twGroupActions[mode]['on'].unshift($('deleteGroup'));
	}
	if (twGroupActions[mode]['off']) {
		twGroupActions[mode]['off'].each( function (elem){
			if (elem.readAttribute('disabled') != 'disabled') {
				elem.writeAttribute('disabled','disabled');
			}
		});
	}
	if (twGroupActions[mode]['on']) {
		twGroupActions[mode]['on'].each( function (elem){
			if (elem.readAttribute('disabled') == 'disabled') {
				elem.writeAttribute('disabled', false);
			}
		});
	}
}

function updateGroupAdminCleanStoredSelections(groupUid) {
	new Ajax.Request('ajax.php', {
		method: 'get',
		parameters: {script: 'processGroupAdminSelection', action: 'cleanStoredSelections', groupUid: groupUid, status: ''},
		onSuccess: function(transport) {
			var response = transport.responseText;
			if (response == 'session expired') {
				window.location.reload();
			}
			else {
				$('twAdminGroupRightBox').update('');
			}
		},
		onFailure: function(transport) {alertBox('Technical problems while connecting with the server, selection was not recorded. Please try again later.' + transport.responseText)}
	});
}

var observeAreaSelections = function() {
	if ($('twAdminAreaSelect')) {
		var areaItems = $$('.twAdminAreaSelectOption');
		if (areaItems){
			areaItems.each( function(e) {
				e.observe('click', areaAdminSelectionClicked);
			});
		}
		$('twAdminCategorySelector').hide();
		$('twAdminCategoryActions').hide();
	}
}


var observeCategorySelections = function() {
	if ($('twAdminCategorySelect')) {
		
		var optionItems = $$('.twAdminCategorySelectOption');
		if (optionItems){
			optionItems.each( function(e) {
				e.observe('click', categoryAdminSelectionClicked);
			});
		}
		var optionActions = $$('.twAdminCategoryAction');
		if (optionActions.length >0) {
			optionActions.each( function(e) {
				e.observe('click', categoryActionClicked);
			});
		}
		hideActionAreas(['twAdminCategoryActionContent','twAdminSkillActionContent']);
		var cancels = $$('.twBlueCancelLink');
		if (cancels.length >0){
			cancels.each( function(e) {
				e.observe('click',blueCancelClicked);
			});
		}
		var categorySelected = $$('.twAdminCategorySelected');
		observeSubmitButtons();
		if (categorySelected.length > 0) {
			modifyCategoryAdminRelatedAreas(categorySelected[0]);
		}
		else {
			// disable buttons
			disableEnableButtons('disable', 'twAdminCategoryAction', ['addCategory'])
		}
	}
}

var disableEnableButtons = function(mode, klass, exclusions){
	klassNotation = '.'+klass;
	var categoryButtons = $$(klassNotation);
	if (categoryButtons.length > 0){
		categoryButtons.each( function(elem){
			if (exclusions.indexOf(elem.identify()) < 0) {
				setting = (mode =='disable')? mode: false;
				elem.writeAttribute('disabled',setting);
			}
		});
	}	
}

var areaAdminSelectionClicked = function(e) {
	var elem = e.element();
	if (!elem.hasClassName('twAdminAreaSelected')) {
		var optionItems = $$('.twAdminAreaSelectOption');
		if (optionItems.length > 0) {
			optionItems.each( function(el) {
				if (el.hasClassName('twAdminAreaSelected')){
					el.removeClassName('twAdminAreaSelected');
				}
			});
		}
		elem.toggleClassName('twAdminAreaSelected');
		tabArr = elem.identify().split('-');
		new Ajax.Request('ajax.php', {
			method: 'get',
			parameters: {script: 'processGroupAdminSelection', action: 'generalTabSelection', tabKey: tabArr[1]},
			onSuccess: function(transport) {
				var response = transport.responseText;
				if (response == 'session expired') {
					window.location.reload();
				}
				else if (response == 'problem') {
					alertBox ('Server had problem retrieving selection-related information.');
				}
				else{
					$('twAdminCategorySelect').update(response);
					callLeftMergeCategoryList();
					observeCategorySelections();
					observeSubmitButtons();
					$('twAdminGroupRightBox').update('');
					$('twAdminCategorySelector').show();
					$('twAdminCategoryActions').show();
				}
			},
			onFailure: function(transport) {alertBox('Technical problems while connecting with the server, your selection was not submitted. You may try again.')}
		});			
	}
}

var callLeftMergeCategoryList = function() {
	new Ajax.Request('ajax.php', {
		method: 'get',
		parameters: {script: 'processGroupAdminSelection', action: 'leftCategoryPulldownSelect'},
		onSuccess: function(transport) {
			var response = transport.responseText;
			if (response == 'session expired') {
				window.location.reload();
			}
			else if (response == 'problem') {
				alertBox ('Server had problem retrieving selection-related information.');
			}
			else{
				$('twMergeCategoryContentSelect').replace(response);
			}
		},
		onFailure: function(transport) {alertBox('Technical problems while connecting with the server, your selection was not submitted. You may try again.')}
	});			
}

var categoryAdminSelectionClicked = function(e) {
	var elem = e.element();
	if (!elem.hasClassName('twAdminCategorySelected')) {
		var optionItems = $$('.twAdminCategorySelectOption');
		if (optionItems.length > 0) {
			optionItems.each( function(el) {
				if (el.hasClassName('twAdminCategorySelected')){
					el.removeClassName('twAdminCategorySelected');
				}
			});
		}
		elem.toggleClassName('twAdminCategorySelected');
		hideActionAreas(['twAdminCategoryActionContent']);
		modifyCategoryAdminRelatedAreas(elem);
	}
}

var hideActionAreas = function(areaClasses) {
	areaClasses.each( function(klass) {
		areaClassNotation = '.' + klass;
		var catContentDivs = $$(areaClassNotation);
		if(catContentDivs.length > 0){
			catContentDivs.each( function(e){
				e.hide();
			});
		}
	});
}
var categoryActionClicked = function(e) {
	var elem = e.element();
	hideActionAreas(['twAdminCategoryActionContent','twAdminSkillActionContent']);
	elem.next().show();
}


var modifyCategoryAdminRelatedAreas = function(selectedElem) {
	catArr = selectedElem.identify().split('-');
	// enable buttons
	disableEnableButtons('enable', 'twAdminCategoryAction', [])
	new Ajax.Request('ajax.php', {
		method: 'get',
		parameters: {script: 'processGroupAdminSelection', action: 'groupSkillsRight', catKey: catArr[1]},
		onSuccess: function(transport) {
			var response = transport.responseText;
			if (response == 'session expired') {
				window.location.reload();
			}
			else if (response == 'problem') {
				alertBox ('Server had problem retrieving selection-related information.');
			}
			else{
				$('twAdminGroupRightBox').update(response);
				disableEnableButtons('disable', 'twAdminSkillAction', ['addSkill']);
				hideActionAreas(['twAdminSkillActionContent']);
				observeSubmitButtons();
				if ($('twMergeSkillContentCategorySelect')) {
					$('twMergeSkillContentCategorySelect').observe('change',mergeSkillCategorySelected);
				}
				var changingNames = $$('.twAdminCategoryName');
				if (changingNames.length > 0) {
					changingNames.each( function(el){
						el.innerHTML = selectedElem.innerHTML;
					});
				}
				observeSkillSelections();
			}
		},
		onFailure: function(transport) {alertBox('Technical problems while connecting with the server, your selection was not submitted. You may try again.')}
	});			
}

var observeSubmitButtons = function() {
	var submitButtons = $$('.twAdminSubmitButton');
	if (submitButtons.length > 0){
		submitButtons.each( function(e){
			e.observe('click', submitButtonClicked);
		});
	}
}

var submitButtonClicked = function(e) {
	var elem = e.element();
	// event returns span that is within the 'a' tag as subject of click, hence UP
	var elemId = elem.up().identify();
	var errorMsg = '';
	var categorySelected = $$('.twAdminCategorySelected');
	var catKey = '';
	if (categorySelected.length > 0){
		var categIdArr = categorySelected[0].identify().split('-');
		catKey = categIdArr[1];
	}
	if ($('twAdminSkillSelect')) {
		var skillKeys = $F($('twAdminSkillSelect'));
	}
	switch (elemId) {
		case 'twAddCategoryContentSubmit':
			var values = $H({'name':$('twAddCategoryContentInput').value});
			var action = 'addNewCategory'; 
			var group = 'cat';
			if (values.get('name').length == 0){
				errorMsg = 'Specify NAME for new category before submitting, please.';
			}
			break;
		case 'twRenameCategoryContentSubmit':
			var values = $H({  'newName':$('twRenameCategoryContentInput').value,
							'catKey': catKey});
			var action = 'renameCategory'; 
			var group = 'cat';
			if (values.get('newName').length == 0){
				errorMsg = 'Specify new NAME for category before renaming, please.';
			}
			else if (values.get('catKey').length == 0){
				errorMsg = 'Select category to be renamed, please.';
			}
			break;
		case 'twMergeCategoryContentSubmit':
			var values = $H({'targetCatKey':$F('twMergeCategoryContentSelect'),
							'catKey': catKey});
			var action = 'mergeCategory'; 
			var group = 'cat';
			if (values.get('targetCatKey').length == 0){
				errorMsg = 'Select target category before merging, please.';
			}
			else if (values.get('catKey').length == 0){
				errorMsg = 'Select category to be merged, please.';
			}
			else if (values.get('targetCatKey') == values.get('catKey')) {
				errorMsg = 'Cannot merge to the same category. Please reconsider your selection.';
			}
			break;
		case 'twDeleteCategoryContentSubmit':
			var values = $H({'catKey': catKey});
			var action = 'deleteCategory';
			var group = 'cat';
			if (values.get('catKey').length == 0){
				errorMsg = 'Select category to be deleted, please.';
			}
			break;
		case 'twAddSkillContentSubmit':
			var values = $H({'name':$('twAddSkillContentInput').value});
			var action = 'addNewSkill'; 
			var group = 'skill';
			if (values.get('name').length == 0){
				errorMsg = 'Specify NAME for new experience before submitting, please.';
			}
			break;
		case 'twRenameSkillContentSubmit':
			skillKey = (skillKeys.length > 0)? skillKeys[0]: '';
			var values = $H({'newName':$('twRenameSkillContentInput').value,
							'skillKey': skillKey});
			var action = 'renameSkill'; 
			var group = 'skill';
			if (values.get('newName').length == 0){
				errorMsg = 'Specify new NAME for experience before renaming, please.';
			}
			else if (skillKeys.length == 0){
				errorMsg = 'Select experience to be renamed, please.';
			}
			else if (skillKeys.length > 1){
				errorMsg = 'Cannot rename multiple experiences by the same name. Change your selection, please.';
			}
			break;
		case 'twMergeSkillContentSubmit':
			var values = $H({'targetSkillKey':$F('twMergeSkillContentSelect'),
							'skillKeys': skillKeys});
			var action = 'mergeSkill'; 
			var group = 'skill';
			if (values.get('targetSkillKey').length == 0){
				errorMsg = 'Select target experience before merging, please.';
			}
			else if (values.get('skillKeys').length == 0){
				errorMsg = 'Select experience to be merged, please.';
			}
			else if (values.get('skillKeys').indexOf(values.get('targetSkillKey')) >= 0 ){
				errorMsg = 'Cannot merge to the same experience. Please reconsider your selection.';
			}
			break;
		case 'twDeleteSkillContentSubmit':
			var values = $H({'skillKeys': skillKeys});
			var action = 'deleteSkill';
			var group = 'skill';
			if (values.get('skillKeys').length == 0){
				errorMsg = 'Select experience to be deleted, please.';
			}
			break;
	}
	if (errorMsg) {
		alertBox(errorMsg);
	}
	else {
		new Ajax.Request('ajax.php', {
			method: 'get',
			parameters: {script: 'processGroupAdminSelection', action: action, values: values.toJSON()},
			onSuccess: function(transport) {
				var response = transport.responseText;
				if (response == 'session expired') {
					window.location.reload();
				}
				else if (response == 'problem') {
					alertBox('Server encountered unspecified problem while processing data.');
				}
				else if (response == 'exists') {
					if (action == 'addNewCategory') {
						var subject = 'Category ';
					}
					else {
						var subject = 'Experience ';
					}
					alertBox ( subject + values.get('name') + ' already exists');
				}
				else{
					if (group == 'cat') {
						$('twAdminGroupLeftBox').update(response);
						$('twAdminGroupRightBox').update('');
						if ($('twAdminAreaSelect')) {
							observeAreaSelections();
						}
						else {
							observeCategorySelections();
							observeSubmitButtons();
						}
					}
					else {
						$('twAdminGroupRightBox').update(response);	
						var skillKeys = $F($('twAdminSkillSelect'));
						if (skillKeys.length > 0) {
							disableEnableButtons('enable', 'twAdminSkillAction', []);
						}
						else {
							disableEnableButtons('disable', 'twAdminSkillAction', ['addSkill']);
						}
						hideActionAreas(['twAdminSkillActionContent']);
						observeSubmitButtons();
						if ($('twMergeSkillContentCategorySelect')) {
							$('twMergeSkillContentCategorySelect').observe('change',mergeSkillCategorySelected);
						}
						observeSkillSelections();
					}
				}
			},
			onFailure: function(transport) {alertBox('Technical problems while connecting with the server, your selection was not submitted. You may try again.')}
		});		

	}
}

var mergeSkillCategorySelected = function(e) {
	var categoryForSkills = $F(e.element());
	if (categoryForSkills.length > 0){
		new Ajax.Request('ajax.php', {
			method: 'get',
			parameters: {script: 'processGroupAdminSelection', action: 'skillPulldownSelect', catKey: categoryForSkills},
			onSuccess: function(transport) {
				var response = transport.responseText;
				if (response == 'session expired') {
					window.location.reload();
				}
				else if (response == 'problem') {
					alertBox('Server encountered unspecified problem while retrieving experience records.');
				}
				else{
					$('twMergeSkillContentSelect').replace(response);
				}

			},
			onFailure: function(transport) {alertBox('Technical problems while connecting with the server, your selection was not submitted. You may try again.')}
		});		
	}
	else {
		alertBox('There must be a valid selection made for category.')
	}
}

var observeSkillSelections = function() {
	var skillItems = $('twAdminSkillSelect');
	if (skillItems){
		skillItems.observe('change',skillAdminSelectionClicked);
	}
	var skillActions = $$('.twAdminSkillAction');
	if (skillActions.length >0) {
		skillActions.each( function(e) {
			e.observe('click', skillActionClicked);
		});
	}
	var cancels = $$('.twBlueCancelLink');
	if (cancels.length >0){
		cancels.each( function(e) {
			e.observe('click',blueCancelClicked);
		});
	}
}

var blueCancelClicked = function() {
	hideActionAreas(['twAdminCategoryActionContent','twAdminSkillActionContent']);
}

var skillAdminSelectionClicked = function(e) {
	var elem = e.element();
	disableEnableButtons('enable', 'twAdminSkillAction', [])
	hideActionAreas(['twAdminCategoryActionContent','twAdminSkillActionContent']);
	var selectionLength = $F(elem).length;
	var selectionPlural = (selectionLength > 1 || selectionLength == 0)? 's': '';
	$('twAdminSkillCount').update(selectionLength);
	$('twAdminSkillPlural').update(selectionPlural);
}

var skillActionClicked = function(e) {
	var elem = e.element();
	hideActionAreas(['twAdminCategoryActionContent','twAdminSkillActionContent']);
	elem.next().show();
}


var observeMembershipTableSortingOptions = function() {
	if ($('twTableMemberGroupAdminWrapper')) {
		var sortingExternalHeaders = $$('.sortExternal');
		if (sortingExternalHeaders.length > 0) {
			sortingExternalHeaders.each( function(e) {
				e.observe('click',doExternalMemberGridSort);
			})
		}
	}
}
var gridSortingOption = $H({'direction': 1, 'column': 4});
var reloadedMembersGrid = false;

var doExternalMemberGridSort = function(event) {
	var curCol = gridSortingOption.column;
	var curDir = gridSortingOption.direction;
	var curSelection = event.element().up().childElements().indexOf(event.element()) + 1;
	if (curSelection >= 0) {
		if (curSelection == curCol) {
			gridSortingOption.direction = gridSortingOption.direction * -1;
		}
		else {
			gridSortingOption.column = curSelection;
			curCol = curSelection;
			gridSortingOption.direction = 1;
		}
		curDir = gridSortingOption.direction;
		if (reloadedMembersGrid && TableKit.tables && TableKit.tables['twTableMemberGroupAdmin']) {
			TableKit.Sortable.reload('twTableMemberGroupAdmin');
			reloadedMembersGrid = false;
		}
		else {
			TableKit.Sortable.init('twTableMemberGroupAdmin');
		}
		TableKit.Sortable.sort('twTableMemberGroupAdmin', curCol, curDir);
		enableGridActiveElements();
	}
}

var observeMembershipEditSelections = function(){
	if ($('twMembershipAdminActionBox')){
		var buttonItems = $$('.twAdminMembershipAction');
		if (buttonItems.size()>0) {
			buttonItems.each( function (e) {
				e.observe('click', membershipEditActionClicked);
			})
		}
		if ($('twMembershipAdminSubgroupSelectAdd')){
			$('twMembershipAdminSubgroupSelectAdd').observe('change',membershipEditSubgroupAddRemove);
			$('twMembershipAdminSubgroupSelectRemove').observe('change',membershipEditSubgroupAddRemove);
		}
		$('twNewMemberSubmit').observe('click',memberSubmit);
		$('twNewMemberCancel').observe('click',memberCancel);
		$('twInviteRemindMemberSubmit').observe('click',sendInvitations);
		$('twInviteRemindMemberCancel').observe('click',cancelInvitations);
		$('twMembershipAddSection').hide();
		$('twMembershipInviteSection').hide();
		
		enableGridActiveElements();
	}
}

var enableGridActiveElements = function() {
	var editableFields = $$('.twAdminMembershipEditable');
	if (editableFields) {
		editableFields.each( function(el) {
			el.observe('focus',editManager.checkIn.bindAsEventListener(editManager.checkIn))
			el.observe('blur', editManager.upload.bindAsEventListener(editManager.upload))
		});
	}
	var adminSwitches = $$('.twTmembershipAdminAssignmentSpan');
	if (adminSwitches) {
		adminSwitches.each( function(el) {
			el.up().observe('click', adminAssignAction);
		})
	}
	var checkboxes = $$('.twTmembershipAdminCheckboxElement');
	if (checkboxes) {
		checkboxes.each( function(el) {
			el.observe('click',updateInvitationCounts) 
		});
	}
}

var membershipEditActionClicked = function(event){
	var elem = event.element();
	if ($('twMembershipAdminSubgroupSelectAdd')){
		$('twMembershipAdminSubgroupSelectAdd').value='';
	}
	if ($('twMembershipAdminSubgroupSelectRemove')){
		$('twMembershipAdminSubgroupSelectRemove').value='';
	}
	if (elem.identify() == 'twAdminMembershipSelectAll' || elem.identify() == 'twAdminMembershipDeselectAll' || elem.identify() == 'twAdminMembershipDelete') {
		$('twMembershipAddSection').hide();
		$('twMembershipInviteSection').hide();
		var parents = $$('.twTmembershipAdminCheckbox');
		if (parents.length > 0) {
			var toBeDeleted = [];
			parents.each( function (e){
				if (elem.identify() == 'twAdminMembershipDelete') {
					if (e.firstDescendant().checked == true) {
						idStrArr = e.firstDescendant().identify().split('-');
						toBeDeleted.push([idStrArr[1],idStrArr[2]]);
					}
				}
				else if (elem.identify() == 'twAdminMembershipSelectAll') {
					e.firstDescendant().checked = true;
				}
				else {
					e.firstDescendant().checked = false;
				}
			})
			// check/uncheck group based send_invitations selections
			if (elem.identify() == 'twAdminMembershipSelectAll' || elem.identify() == 'twAdminMembershipDeselectAll'){
				updateInvitationCounts();
				if (elem.identify() == 'twAdminMembershipSelectAll'){
					// deactivate
					$('twInviteMemberAdminSelection').checked = false;
					$('twRemindMemberAdminSelection').checked = false;					
				}
			}
			
			if (elem.identify() == 'twAdminMembershipDelete'){
				if (toBeDeleted.length > 0) {
					new Ajax.Request('ajax.php', {
						method: 'get',
						parameters: {script: 'processGroupAdminSelection', action: 'deleteEmails', emails: toBeDeleted.toJSON()},
						onSuccess: function(transport) {
							var response = transport.responseText;
							if (response == 'session expired') {
								window.location.reload();
							}
							else if (response == 'OK') {
								updateMemberList();
							}
							else{
								alertBox('Server encountered unspecified problem while deleting selected records.');
							}

						},
						onFailure: function(transport) {alertBox('Technical problems while connecting with the server, your selection was not submitted. You may try again.')}
					});		
				}
				else {
					alertBox('There is nothing to be deleted. Please make your selection first.');
				}
			}
		}
	}
	else if (elem.identify() == 'twAdminMembershipAdd'){
		$('twMembershipInviteSection').hide();
		$('twMembershipAddSection').show();
	}
	else if (elem.identify() == 'twAdminMembershipInvite') {
		$('twMembershipAddSection').hide();
		$('twMembershipInviteSection').show();
	}
}

var membershipEditSubgroupAddRemove = function(event){
	var elem = event.element();
	parents = $$('.twTmembershipAdminCheckbox')
	if (parents.length > 0) {
		var toBeProcessed = [];
		parents.each( function (e){
			if (e.firstDescendant().checked == true) {
				idStrArr = e.firstDescendant().identify().split('-');
				toBeProcessed.push([idStrArr[1],idStrArr[2]]);
			}
		});
	}
	if (elem.identify() == 'twMembershipAdminSubgroupSelectAdd') {
		var action = 'addSubgroups';
		subGroupId = $F($('twMembershipAdminSubgroupSelectAdd'));
	}
	else {
		// twMembershipAdminSubgroupSelectRemove
		var action = 'removeSubgroups';
		subGroupId = $F($('twMembershipAdminSubgroupSelectRemove'));
	}
	
	new Ajax.Request('ajax.php', {
		method: 'get',
		parameters: {script: 'processGroupAdminSelection', action: action, userIds: toBeProcessed.toJSON(), subGroupId: subGroupId},
		onSuccess: function(transport) {
			var response = transport.responseText;
			if (response == 'session expired') {
				window.location.reload();
			}
			else if (response == 'OK') {
				elem.value = '';
				updateMemberList();
			}
			else{
				alertBox ('Server had problem recording submitted data.');
			}
		},
		onFailure: function(transport) {alertBox('Technical problems while connecting with the server, your selection was not submitted. You may try again.')}
	});		
}

var memberSubmit = function(event) {
	var elem = $('twMemberAddingNest');
	var entryRows = elem.value.strip().split('\n');
	var processedEntryRows = [];
	entryRows.each(function(row){
		if (row.strip().length > 0){
			rowArr = row.strip().split(',',3);
			while(rowArr.length < 3){
				rowArr.push('');
			}
			compactRowArr = [];
			rowArr.each(function(piece) {
				compactRowArr.push(piece.strip());
			});
			processedEntryRows.push(compactRowArr);
		}
	});
	if (processedEntryRows.length == 0) {
		alertBox('Nothing to submit. Please enter at least one row containing email address.');
	}
	else {
		new Ajax.Request('ajax.php', {
			method: 'get',
			parameters: {script: 'processGroupAdminSelection', action: 'insertEmails', emails: processedEntryRows.toJSON()},
			onSuccess: function(transport) {
				var response = transport.responseText;
				if (response == 'session expired') {
					window.location.reload();
				}
				else if (response == 'OK') {
					$('twMemberAddingNest').value = '';
					$('twMembershipAddSection').hide();
					updateMemberList();
				}
				else{
					resp=response.evalJSON();
					errors = resp.errors;
					errorArr=[];
					errors.each(function(pair) {
						errorArr.push(pair[1] + ' : "' + pair[0] + '"');
					});
					alertBox('Email errors were detected:<br />'+errorArr.join('<br />'));
				}

			},
			onFailure: function(transport) {alertBox('Technical problems while connecting with the server, your selection was not submitted. You may try again.')}
		});		
	}
}

var updateMemberList = function() {
	new Ajax.Request('ajax.php', {
		method: 'get',
		parameters: {script: 'processGroupAdminSelection', action: 'membersGridUpdate'},
		onSuccess: function(transport) {
			var response = transport.responseText;
			if (response == 'session expired') {
				window.location.reload();
			}
			else if (response == 'problem') {
				alertBox ('Server had problem recording submitted data.');
			}
			else {
				$('twTableMemberGroupAdminWrapper').update(response);
				updateInvitationCounts();
				//observeMembershipTableSortingOptions();
				reloadedMembersGrid = true;
				enableGridActiveElements();
			}
		},
		onFailure: function(transport) {alertBox('Technical problems while connecting with the server, your selection was not submitted. You may try again.')}
	});			
}

var memberCancel = function(event) {
	var elem = $('twMemberAddingNest');
	elem.value='';
	$('twMembershipAddSection').hide();
}

var updateInvitationCounts = function() {
	var statusArr = $$('.twTmembershipAdminStatusSpan');
	var invited = 0;
	var notYetInvited = 0;
	var checkedValid = 0;
	if (statusArr.length > 0) {
		statusArr.each( function(stat) {
			var idArr = stat.identify().split('-');
			var checkArr = idArr.clone();
			checkArr[0] = 'checkbox';
			var checkbox = $(checkArr.join('-'));
			if(stat.innerHTML == 'Invited'){
				invited += 1;
				if (checkbox.checked) {
					checkedValid += 1;
				}
			}
			if(stat.innerHTML == 'Not Invited Yet'){
				notYetInvited += 1;
				if (checkbox.checked) {
					checkedValid += 1;
				}
			}
		});
		if (invited || notYetInvited) {
			var pluralInvited = (invited == 1)? '': 's';
			var pluralNotYetInvited = (notYetInvited == 1)? '': 's';
			var pluralCheckedValid = (checkedValid == 1)? '': 's';
			$('twInviteCount').update(notYetInvited);
			$('twInviteCountPlural').update(pluralNotYetInvited);
			$('twRemindCount').update(invited);
			$('twRemindCountPlural').update(pluralInvited);
			$('twInviteCheckedCount').update(checkedValid);
			$('twInviteCheckedCountPlural').update(pluralCheckedValid);
			$('twInviteCheckedMemberAdminSelection').checked = (checkedValid > 0);
			$('twInviteMemberAdminSelection').checked = (checkedValid > 0)? false:(notYetInvited > 0);
			$('twRemindMemberAdminSelection').checked = (checkedValid > 0)? false:(invited > 0);
		}
		else {
			$('twAdminMembershipInvite').hide();
			$('twMembershipInviteSection').hide();
		}
	}
}

var sendInvitations = function(event) {
	var statusArr = $$('.twTmembershipAdminStatusSpan');
	var invitedExisting = [];
	var invitedNew = [];
	var notYetInvitedExisting = [];
	var notYetInvitedNew = [];
	var onlyChecked = $('twInviteCheckedMemberAdminSelection').checked;
	if (statusArr.length > 0) {
		statusArr.each( function(stat) {
			var statArr = stat.identify().split('-');
			var checkArr = statArr.clone();
			checkArr[0] = 'checkbox';
			var checkbox = $(checkArr.join('-'));
			if (!onlyChecked || checkbox.checked){
				if(stat.innerHTML == 'Invited'){
					if (statArr[3] == 'e') {
						invitedExisting.push(statArr[2]);
					}
					else {
						invitedNew.push(statArr[2]);
					}
				}
				if(stat.innerHTML == 'Not Invited Yet'){
					if (statArr[3] == 'e') {
						notYetInvitedExisting.push(statArr[2]);
					}
					else {
						notYetInvitedNew.push(statArr[2]);
					}
				}
			}
		});
	}
	invitedLength = invitedExisting.length + invitedNew.length;
	notinvitedYetLength = notYetInvitedExisting.length + notYetInvitedNew.length;
	var	mode = '';
	if (($('twRemindMemberAdminSelection').checked == true || onlyChecked) && invitedLength > 0){
		mode = 'remind';
		invited = $H({'Existing':invitedExisting, 'NewUser':invitedNew});
	}
	else {
		invited = $H({});
	}
	if (($('twInviteMemberAdminSelection').checked == true || onlyChecked) && notinvitedYetLength > 0){
		mode = (mode)? 'both':'invite';
		notYetInvited = $H({'Existing':notYetInvitedExisting, 'NewUser':notYetInvitedNew});
	}
	else {
		notYetInvited = $H({});
	}
	if (mode) {
		var addressees = $H({'invites':notYetInvited,'reminders':invited});
		new Ajax.Request('ajax.php', {
			method: 'get',
			parameters:{script: 'processGroupAdminSelection', 
						action: 'sendInvitations', 
						mode: mode, 
						addressees: addressees.toJSON()
			},
			onSuccess: function(transport) {
				var response = transport.responseText;
				if (response == 'session expired') {
					window.location.reload();
				}
				else if (response == 'problem') {
					alertBox ('Server had problem sending email or recording related data.');
				}
				else if (response == 'OK'){
					infoBox(["Emails have been sent."]);
					updateMemberList();
				}
				else {
					alertBox ('Unexpected system error.');
				}
			},
			onFailure: function(transport) {alertBox('Technical problems while connecting with the server, your selection was not submitted. You may try again.')}
		});			
	}
	else {
		alertBox('There is nothing to be processed. Please select at least one item and try again.');
	}
}

var cancelInvitations =  function(event) {
	$('twMembershipInviteSection').hide();
}

var editManager  = {
	
	checkIn: function() {
		e = $A(arguments)[0].element();
		if (!this.origValue) {
			this.origValue= $H();
		}
		this.origValue.set(e.identify(), e.value);
	},

	upload: function() {
		e = $A(arguments)[0].element();
		var identArr = e.identify().split('-');
		if (!e.value) {
			e.value = editManager.checkIn.origValue.get(e.identify());
			alertBox('Field `'+identArr[0]+'` cannot remain empty!');
		}
		else if (e.value != editManager.checkIn.origValue.get(e.identify())) {
			var statusArr = identArr.clone();
			statusArr[0] = 'status';
			var statusEl = $(statusArr.join('-'));
			if (statusEl) {
				var status = statusEl.innerHTML;
			}
			new Ajax.Request('ajax.php', {
				method: 'get',
				parameters:{script: 'processGroupAdminSelection', 
							action: 'editField', 
							field: identArr[0], 
							mode: identArr[1], 
							id: identArr[2], 
							value: e.value,
							status: status
				},
				onSuccess: function(transport) {
					var response = transport.responseText;
					if (response == 'session expired') {
						window.location.reload();
					}
					else if (response == 'problem') {
						alertBox ('Server had problem recording edited data.');
					}
					else if (response == 'OK'){
						// check for the fields with name has to be done and if the status was Need Full Name 
						// and both names are already IN - then change status for "Not Yet Invited"
						if (identArr[0] == 'first_name' || identArr[0] == 'last_name') {
							var counterpartArr = identArr;
							counterpartArr[0] = (identArr[0] == 'first_name')? 'last_name': 'first_name';
							if($(counterpartArr.join('-')).value) {
								statusEl.update('Not Invited Yet');
								updateInvitationCounts();
							}
						}
					}
					else {
						// error message from email verification
					resp=response.evalJSON();
						errors = resp.errors;
						errorArr=[];
						errors.each(function(pair) {
							errorArr.push(pair[1] + ' : "' + pair[0] + '"');
						});
						alertBox('Email errors were detected:<br />'+errorArr.join('<br />'));
					}
				},
				onFailure: function(transport) {alertBox('Technical problems while connecting with the server, your selection was not submitted. You may try again.')}
			});			
		}
	} 
}

var adminAssignAction = function(event){
	if (!event.element().down()) {
		var e = event.element();
	}
	else {
		var e = event.element().down();
	}
	var identArr = e.identify().split('-');
	if (identArr[1] == 'i'){
		alertBox('Invited person cannot become Administrator before s/he accepts the invitation and becomes a member.');
	}
	else {
		mode = (e.innerHTML == 'A')? 'remove': 'add';
		new Ajax.Request('ajax.php', {
			method: 'get',
			parameters:{script: 'processGroupAdminSelection', 
						action: 'adminAction', 
						mode: mode, 
						id: identArr[2]
			},
			onSuccess: function(transport) {
				var response = transport.responseText;
				if (response == 'session expired') {
					window.location.reload();
				}
				else if (response == 'problem') {
					alertBox ('Server had problem recording edited data.');
				}
				else if (response == 'OK'){
					e.innerHTML = (mode == 'add')? 'A': ' ';
				}
				else {
					alertBox ('Server reported unspecified error.');
				}
			},
			onFailure: function(transport) {alertBox('Technical problems while connecting with the server, your selection was not submitted. You may try again.')}
		});			
	}
}
