function showLoader() {
	document.getElementById("submitbutton").style.visibility="hidden";
	document.getElementById("submitbutton").style.position="absolute";
	document.getElementById("loadingimage").style.visibility="visible";
	document.getElementById("loadingimage").style.position="static";
}

function ValidateForm(testform) {
	var msg = "";
	
	if(testform.elements["00N50000001gwh9"].value == "") msg = "Please enter the first name.\n";
	if(testform.elements["00N50000001gwh4"].value == "") msg += "Please enter the last name.\n";
	if(testform.elements["street"].value == "") msg += "Please enter the street address.\n";
	if(testform.elements["city"].value == "") msg += "Please enter the city.\n";
	if(testform.elements["state"].value == "") msg += "Please enter the state.\n";
	if(testform.elements["zip"].value == "") msg += "Please enter the zip code.\n";
	if(testform.elements["00N50000001gnfM"].value == "") msg += "Please enter the daytime phone.\n";
	if(testform.elements["00N50000001h5gs"].value == "") msg += "Please enter the email address.\n";
	if(testform.elements["00N50000001h5gs"].value != testform.elements["repeat_email"].value) msg += "Both email address fields must match.\n";
	if(testform.elements["00N50000001gnfa"].options[testform.elements["00N50000001gnfa"].options.selectedIndex].value == "") msg += "Please answer the question \"Do you have a passport?\". \n";
	if(testform.elements["00N50000001gwmc"].options[testform.elements["00N50000001gwmc"].options.selectedIndex].value == "") msg += "Please answer the question \"How did you hear about Dayo? \".\n";
	if(!testform.elements["00N50000001h0h2"].checked) msg += "You must agree to the terms and conditions.\n";
	if(msg != "") {
		alert(msg);
		return false;
	} else {
		showLoader();
		return true;
	}
}

function getgenrelist(genrelist, genrelist2) {
	var thelist = genrelist.options;
	var keycount = thelist.length;

	var item = "";
	var items = "";

	for(i=0;i<keycount;i++){
		item = thelist[i].value;
		items += (items!="") ? "; " : "";
		items += item;
	} //-- end of for ---
	genrelist2.value = items;
}

function add_genre(genrelist,toaddkey,toaddvalue){
	var lastindex = genrelist.options.length;
	//var maxkeywords = 16;
	var inthelist=false;

	if (toaddkey!="") {
		//-- check if existing in option list --
		for(var i=0; i<lastindex; i++) {
			if(toaddkey==genrelist.options[i].value){
				inthelist=true;
				break;
			}
		} //-- end of for --

		if(!inthelist) {
			genrelist.options[lastindex] = new Option(toaddvalue,toaddkey);
			genrelist.value="";
			genrelist.focus();
			//form.keycount.value=lastindex+1;
		} else {
			alert(toaddvalue+" already added in the list.");
			return false;
		}

	} //-- end of if toadd --
}

//delete keyword from <select> keywords
function delete_genre(genrelist){
	var frmObj	= genrelist.options;

	if(frmObj.selectedIndex!=-1) {
		frmObj[frmObj.selectedIndex] = null;
		form.keycount.value=frmObj.length;
		frmObj.focus();
	} else {
		alert("Please select from the list of genre.");
	}
}



//----------------------- Functions for moving multiple select options ------------------------------

var currOption;
var nextOption;
var prevOption;
var associatedListID = '';

function moveOptionsUp(interval)
{
	if (!isAssociatedList()) return false;
	aSelect = document.getElementById(associatedListID);
	
	if (isSelectedOptions(aSelect)) {
		firstSelected = getSelectedIndex(aSelect, 'firstSelected');
		selectedOptions = Array();
		
		for (var i=0; i < aSelect.length; i++) {
			currOption = aSelect.options[i];
			if ( currOption.selected && (firstSelected > 0) ) {
				//alert('firstSelected: '+ ' > 0');
				prevOption = aSelect.options[i - interval];
				swapOptions(aSelect, i, interval, 'Up');
				selectedOptions[selectedOptions.length] = aSelect.options[i - interval].value;
			}
			else {
				if (firstSelected == 0) {
					alert('This is begin of list. No way to move selected items!');
					break;
				}
			}			
		}
		setSelected(selectedOptions, aSelect);
	}
	else
		alert('Please select items to perform moving!');			
}
	
function moveOptionsDown(interval)
{
	if (!isAssociatedList()) return false;
	aSelect = document.getElementById(associatedListID);
			
	if (isSelectedOptions(aSelect)) {
		lastSelected = getSelectedIndex(aSelect, 'lastSelected');
		selectedOptions = Array();
		
		for (var i=aSelect.length-1; i >= 0; i--) {
			currOption = aSelect.options[i];
			if ( currOption.selected && (aSelect.length - (lastSelected + 1) > 0)) {
				//alert('left: '+(aSelect.length - (lastSelected + 1)) + ' > 0');
				nextOption = aSelect.options[i + interval];
				swapOptions(aSelect, i, interval, 'Down');
				selectedOptions[selectedOptions.length] = aSelect.options[i + interval].value;
			}
			else {
				if ((aSelect.length - (lastSelected + 1) == 0)) {
					alert('This is end of list. No way to move selected items!');
					break;
				}
			}
		}
		setSelected(selectedOptions, aSelect);
	}
	else
		alert('Please select items to perform moving!');			
}

function isAssociatedList()
{
	ret = true;
	if (associatedListID == '') {
		alert("Please specify associated list! Set variable associatedListID.\nFor example: var associatedListID = 'thisListID';");
		ret = false;
	}
	return ret;
}

function setSelected(selectedOptions, aSelect)
{
	if (selectedOptions.length > 0) {
		for (var i=0; i < aSelect.length; i++) {
			for (var k=0; k < selectedOptions.length; k++) {
				if (aSelect.options[i].value == selectedOptions[k])
					aSelect.options[i].selected = true;
			}
		}
	}		
}

function getSelectedCount(theList)
{
	count = 0;
	for (var i=0; i < theList.length; i++) {
		currOption = theList.options[i];
		if (currOption.selected) {
			count++;
		}
	}
	return count;
}

function getSelectedIndex(theList, typeIndex)
{
	index = 0;
	for (var i=0; i < theList.length; i++) {
		currOption = theList.options[i];
		if (currOption.selected) {
			index = i;
			if (typeIndex == 'firstSelected') break;
		}
	}
	return index;
}

function isSelectedOptions(theList)
{
	ret = false;
	for (var i=0; i < theList.length; i++) {
		currOption = theList.options[i];
		if (currOption.selected) {
			ret = true;
			break;
		}
	}
	return ret;
}	

function swapOptions(theList, itemNo, interval, direction) {
	temp1Option = new Option("Temp1", "tmp1");
	temp2Option = new Option("Temp2", "tmp2");
	
	if (direction == '') {
		alert('WARNING: Direction not defined! Moving not performed.');
		return false;
	}
	
	switch (direction) {
		case 'Up':
			theList.options[itemNo] = temp1Option;
			theList.options[itemNo - interval] = temp2Option;
			theList.options[itemNo] = prevOption;
			theList.options[itemNo - interval] = currOption;
			theList.options[itemNo - interval].selected = false;
			break;
			
		case 'Down':
			theList.options[itemNo] = temp1Option;
			theList.options[itemNo + interval] = temp2Option;
			theList.options[itemNo] = nextOption;
			theList.options[itemNo + interval] = currOption;
			theList.options[itemNo + interval].selected = false;
			break;
	}
}

function getOptionsOrder(theListID) {
	tempListID = associatedListID;
	associatedListID = theListID;
	
	if (!isAssociatedList()) return false;
	var order = '';
	aSelect = document.getElementById(associatedListID);
	
	for (var i=0; i < aSelect.length; i++) {
		cur = aSelect.options[i];
		order += cur.value + ',';
	}
	associatedListID = tempListID;
	return order.substr(0, order.length-1);
}
		
//--------------------------------------------------------------------------------------------------

//digits & valid phone/fax chas
function ValidatePhoneFax(frmObj) {
	var regNotPhone=/[^- +_,.#\/(0-9)]/gi;
	var tmpStr=frmObj.value;
	if(tmpStr.match(regNotPhone)) {
		frmObj.value=tmpStr.replace(regNotPhone,"");
	}
}

//integers input only
function ValidateInt(frmObj) {
	var regNotInt=/[^0-9]/gi;
	var tmpStr=frmObj.value;
	frmObj.value=tmpStr.replace(regNotInt,"");
}

//float input
function ValidateFloat(frmObj) {
	var regNotInt=/[^0-9.]/gi;
	var tmpStr=frmObj.value;
	frmObj.value=tmpStr.replace(regNotInt,"");
}

//old e-mail address validation
/*
function ValidateEmail(frmObj) {
	var regEmail=/\b(^(\S+@).+((\.com)|(\.net)|(\.edu)|(\.mil)|(\.gov)|(\.org)|(\.biz)|(\..{2,2}))$)\b/gi;
	frmObj.value = frmObj.value.toLowerCase();
	if(trim(frmObj.value)){
		if(!regEmail.test(frmObj.value)) {
			alert("Sorry, invalid email address format.");
			frmObj.value = "";
			//frmObj.select();
			frmObj.focus();
		}
	} else { frmObj.value = ""; }
}
*/

//e-mail address
function ValidateEmail(addr,man,db) {
	if (addr == '' && man) {
	   if (db) alert('email address is mandatory');
	   return false;
	}
	var invalidChars = '\/\'\\ ";:?!()[]\{\}^|';
	for (i=0; i<invalidChars.length; i++) {
	   if (addr.indexOf(invalidChars.charAt(i),0) > -1) {
		  if (db) alert('email address contains invalid characters');
		  return false;
	   }
	}
	for (i=0; i<addr.length; i++) {
	   if (addr.charCodeAt(i)>127) {
		  if (db) alert("email address contains non ascii characters.");
		  return false;
	   }
	}
	
	var atPos = addr.indexOf('@',0);
	if (atPos == -1) {
	   if (db) alert('email address must contain an @');
	   return false;
	}
	if (atPos == 0) {
	   if (db) alert('email address must not start with @');
	   return false;
	}
	if (addr.indexOf('@', atPos + 1) > - 1) {
	   if (db) alert('email address must contain only one @');
	   return false;
	}
	if (addr.indexOf('.', atPos) == -1) {
	   if (db) alert('email address must contain a period in the domain name');
	   return false;
	}
	if (addr.indexOf('@.',0) != -1) {
	   if (db) alert('period must not immediately follow @ in email address');
	   return false;
	}
	if (addr.indexOf('.@',0) != -1){
	   if (db) alert('period must not immediately precede @ in email address');
	   return false;
	}
	if (addr.indexOf('..',0) != -1) {
	   if (db) alert('two periods must not be adjacent in email address');
	   return false;
	}
	var suffix = addr.substring(addr.lastIndexOf('.')+1);
	if (suffix.length != 2 && suffix != 'com' && suffix != 'net' && suffix != 'org' && suffix != 'edu' && suffix != 'int' && suffix != 'mil' && suffix != 'gov' & suffix != 'arpa' && suffix != 'biz' && suffix != 'aero' && suffix != 'name' && suffix != 'coop' && suffix != 'info' && suffix != 'pro' && suffix != 'museum') {
	   if (db) alert('invalid primary domain in email address');
	   return false;
	}
	return true;
}