// checkCities() used by Search Box to see if cities are selected in refine search area
function checkCities(frm){
	var cities = document.getElementById('city-search');
	if(!cities) return true;
	cities = cities['city[]'];
	var str = "";
	for(var c=0;c<cities.length;c++){
		if(cities[c].checked){
			var inp = document.createElement("input");
			inp.setAttribute("type", "hidden");
			inp.setAttribute('name', 'city[]');
			inp.setAttribute('value', cities[c].value);
			frm.appendChild(inp);			
		}
	}	
	return true;
}
function doBookmark(pageName){	
	var urlAddress = document.location;
	if (window.sidebar) { // Mozilla Firefox Bookmark
		window.sidebar.addPanel(pageName, urlAddress,"");
	} else if( window.external ) { // IE Favorite
		window.external.AddFavorite( urlAddress, pageName); }
	else if(window.opera && window.print) { // Opera Hotlist
		return true;
	}
}
function mailpage(subject, copy,linktitle){
	mail_str = "mailto:?subject="+subject
	mail_str += "&body="+copy+"  \n";
	mail_str += linktitle + " ,\r\n " + document.location+"";
	location.href = mail_str;
}
function doSearch(){
	var skey = document.getElementById('basicsearch0').value;	
	document.location = "./pages/results/search/"+skey;
}
function checkEnter(e){ 
	var characterCode;
	if(e && e.which){ //if which property of event object is supported (NN4)
		e = e;
		characterCode = e.which; //character code is contained in NN4's which property
	}else{
		e = event;
		characterCode = e.keyCode; //character code is contained in IE's keyCode property
	}
	if(characterCode == 13){ //if generated character code is equal to ascii 13 (if enter key)
		doSearch();
		return true; 
	}
	else{
		return false; 
	}
}
function doNothing() { }

// used by shopping and registration modules (sometimes)
function popupWindow(pageName) 
{
    tmpWindow = window.open(pageName, 'itemEditor', 'scrollbars=yes,toolbar=no,status=no, menubar=no,directories=no,location=no,resizable=no,width=500,height=480,top=100,left=200');
    tmpWindow.parentFrame = 'qwerty';
    tmpWindow.focus();	
}

function initArray(requirements) {
        var length = requirements.length;
        var betterArray = new Array(length);
        
        for (var i = 0; i < length; i++) {
        	if (typeof requirements[i] == 'object') {
        		betterArray[requirements[i][0][0]] = requirements[i];
        	} else {
                betterArray[requirements[i]] = true;
        	}
        }
        return betterArray;
}

function validateField(curField, i) {
	var curValid = true;	
    elName = curField.name;
    curTitle = curField.title;
	curValue = curField.value;	        
	fieldType = curField.type;
	curFm = curField.form;
	var elNameOrig = elName;
        if (elName.indexOf('[]') != -1) elName = elName.substr(0, elName.length - 2);
        if ((betterArray[elName] != null) || (i == -1)) {
				switch (fieldType) {
					case 'text': if(curValue == curTitle) { curValid = false; focusField = curField;break;}
					case 'textarea':
					case 'password':
					case 'file':
						if (curValue == '') {
							curValid = false; 
							focusField = curField;					
						}
						break;
					case 'select-one':
					case 'select-multiple':
						if (curField.selectedIndex != -1 && curField.options[curField.selectedIndex].value != '') {
							curValid = true;
						} else {
							curValid = false;
							focusField = curField;
						}
						break;
					case 'radio':
					case 'checkbox':
						numSelected = 0;
						curValid = false;
						sameField = true;
						while(sameField) {				
							if (curFm.elements[i].checked) {
								numSelected++;
								curValid = true;
							}
							if(curFm.elements[i+1].name.indexOf(elNameOrig) != -1) {
								sameField = true;
								i++;
							} else {
								sameField = false;
								if(!numSelected){
									focusField = 'unsupportedType';
								}
							}										
						}
						fieldPos = i;
						break;
				}
        	}	
       return curValid;
}

var focusField;
var fieldPos;
var betterArray;

function validateForm(requirements, curFm) {	
	betterArray = initArray(requirements);
	var isValid = true;
	var alertMessage = false;
	var reEmail = /^.+\@.+\..+$/
	var elms = curFm.elements;	
    for (fieldPos = 1; fieldPos < elms.length; fieldPos ++) {
    	theField = elms[fieldPos];
    	theName = theField.name;
    	theValue = theField.value;
    	if (typeof theField.type == 'undefined') continue;
		isValid = validateField(theField, fieldPos);
		
    	if (!isValid && (typeof betterArray[theName] == 'object')) {
    		for (var j in betterArray[theName]) {
    			altName = betterArray[theName][j][0];
    			altEl = curFm.elements[altName];
    			if (theField.type != 'checkbox') isValid = validateField(altEl, -1);
    			if (isValid) break;
    		}
    		if (!isValid) {
    			alertMessage = 'Please fill in ';
    			fieldLabels = new Array();
    			var firstTerm = true;
    			for (var j in betterArray[theName]) {
    				if (firstTerm) {
    					alertMessage += ' either ';
    					firstTerm = false;
    				} else {
    					alertMessage += ' or ';	
    				}
	    			altName = betterArray[theName][j][1];
	    			alertMessage += altName;
    			}
    			focusField = 'unsupportedType';
    		}	
    	}
        if (!isValid) {
			if(focusField == 'unsupportedType'){
				if (!alertMessage) alertMessage = 'You have left out a required piece of information.';		
			} else {
				alertMessage = 'You have left out a required piece of information. Your cursor will now move to the required field. Please fill it in and submit the form again.';
				focusField.focus();
			}
			window.alert(alertMessage);
			return false;
		}
	else	{
			if ((theName.indexOf('Email') != -1) && (!reEmail.test(theValue)))
			{
				alert('This email address does not appear to be valid');
				theField.focus();
				return false;				
			}
		}
		
    }		
			
	return true;
}

//avoid errors in case these are called outside of the tools area
if (typeof writeHelpFrame == 'undefined') {
	function writeHelpFrame(one, two, three) {}
}

if (typeof restoreHelp == 'undefined') {
	function restoreHelp() {}
}

// custom function to prevent short usernames, added by gabriel 2009-03-06
function validateUsername(requirements, curFm) {
	var userfield = $(curFm).find("input[name='UserName']").eq(0);
	if (userfield.val().length < 3) {
		alert('Username must be at least 3 characters long.');
		userfield.focus();
		return false;
	}
	return validateForm(requirements, curFm);
}