if (!('trim' in String.prototype)) {
    String.prototype.trim= function() {
        return this.replace(/^\s+/, '').replace(/\s+$/, '');
    };
}

function checkPassword(pw,pw2,reset) {
	var ret = "";
	//Check to be sure pw has a value
	if (!pw || pw.trim()==='') {
		if (reset)
			ret = ENTER_NEW_PW_ERR + "\n";
		else
			ret = ENTER_PW_ERR + "\n";
	//Check to be sure pw is the correct length
	} else if (pw.length < 6) {
		ret = PW_TOO_SHORT_ERR + "\n";
	//Check to be sure that pw2 matches pw
	} else if (pw != pw2) {
		ret = PW_DONT_MATCH + "\n";
	}
	return ret;
}

function checkRequired(f,fname,txt) {
	var ret = "";
	if (!f.fname.value ||  f.fname.value.trim()==='') {
		ret = ENTER + " " + txt + ".\n";
	}
	return ret;
}


function checkEmail(email,err_txt) {
	var reg = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
	var error = "";
	if(reg.test(email) == false) {
		if (err_txt)
			error = err_txt;
		else
	       error = INVALID_EMAIL + "\n";
	}
	return error;
}


function checkRadio(checkvalue) {
	var error = "";
	   if (!(checkvalue)) {
	       error = CHECK_RADIO + "\n";
	    }
	return error;    
}

function checkDropdown(choice, name) {
    var error = "";
    if (choice == 0) {
       error = SELECT_AT_LEAST_ONE + " " + name + " " + CATEOGRY + ".\n";
    }    
return error;
}

function checkPhone(strng) {
	var stripped = strng.replace(/[\(\)\.\-\ ]/g, '');
	//strip out acceptable non-numeric characters
	if (isNaN(parseInt(stripped))) {
	   error = ILLEGAL_PHONENUM + "\n";
	}
	/*
	if (!(stripped.length == 10)) {
		error = PHONE_TOO_SHORT + "\n";
	}
	*/
	return error;
}

function checkMedia(f)
{
	var checked = false;
	for (var i=0; i < f.elements.length; i++){
		if (f.elements[i].name.indexOf("media") != -1) {
			if (f.elements[i].checked) {
				checked = true;
				break;
		   }
		}
	}
	return checked;
}


function checkPasswordForm(f) {
    var why = "";
	if (!f.orig_pw.value || f.orig_pw.value.trim()==='')
		why += ENTER_ORIG_PW_ERR + "\n";
	why += checkPassword(f.pw.value,f.pw2.value,true);
    if (why != "") {
		alert(why);
       	return false;
    } else {
		return true;
	}
}


function checkAccountForm(f) {
	
    var why = "";
	var err_intro = ACCT_ERR_INTRO;

    why += checkEmail(f.userid.value,INVALID_USERNAME + "\n");
   	why += checkPassword(f.pw.value,f.pw2.value,false);

	if (!f.zc_firstname.value || f.zc_firstname.value.trim()==='') {
		why += ENTER_FIRSTNAME + "\n";
	}
	if (!f.zc_lastname.value || f.zc_lastname.value.trim()==='') {
		why += ENTER_LASTNAME + "\n";
	}
	if (!f.zc_street_address.value || f.zc_street_address.value.trim()==='') {
		why += ENTER_STREET + "\n";
	}
	if (!f.zc_city.value || f.zc_city.value.trim()==='') {
		why += ENTER_CITY + "\n";
	}
	if (!f.zc_country_id.value) {
		why += SELECT_COUNTRY + "\n";
	}
	
	if (f.zc_state.disabled && f.zc_zone_id.value == "") {
		why += SELECT_STATE + "\n";
	}

	if (!f.zc_telephone.value || f.zc_telephone.value.trim()==='') {
		why += ENTER_PHONE + "\n";
	}

	//Only check the terms box if update=false
	if (!f.terms.checked)
		why += 	AGREE_TERMS + "\n";

    if (why != "") {
		alert(why);
       	return false;
    } else {
		return true;
	}
}



function monthNameToNum(month) {

	var nameToMonth = {
		'January' : '1',
		'February' : '2',
		'March' : '3',
		'April' : '4',
		'May' : '5',
		'June' : '6',
		'July' : '7',
		'August' : '8',
		'September' : '9',
		'October' : '10',
		'November' : '11',
		'December' : '12'
	};
	
	var monum = nameToMonth[month];
	if (!monum) {
		monum = month;
	}
	return monum;
	
}
/*
 * Date Format 1.2.3
 * (c) 2007-2009 Steven Levithan <stevenlevithan.com>
 * MIT license
 *
 * Includes enhancements by Scott Trenda <scott.trenda.net>
 * and Kris Kowal <cixar.com/~kris.kowal/>
 *
 * Accepts a date, a mask, or a date and a mask.
 * Returns a formatted version of the given date.
 * The date defaults to the current date/time.
 * The mask defaults to dateFormat.masks.default.
 */

var dateFormat = function () {
	var	token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZ]|"[^"]*"|'[^']*'/g,
		timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g,
		timezoneClip = /[^-+\dA-Z]/g,
		pad = function (val, len) {
			val = String(val);
			len = len || 2;
			while (val.length < len) val = "0" + val;
			return val;
		};

	// Regexes and supporting functions are cached through closure
	return function (date, mask, utc) {
		var dF = dateFormat;

		// You can't provide utc if you skip other args (use the "UTC:" mask prefix)
		if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object String]" && !/\d/.test(date)) {
			mask = date;
			date = undefined;
		}

		// Passing date through Date applies Date.parse, if necessary
		date = date ? new Date(date) : new Date;
		if (isNaN(date)) throw SyntaxError("invalid date");

		mask = String(dF.masks[mask] || mask || dF.masks["default"]);

		// Allow setting the utc argument via the mask
		if (mask.slice(0, 4) == "UTC:") {
			mask = mask.slice(4);
			utc = true;
		}

		var	_ = utc ? "getUTC" : "get",
			d = date[_ + "Date"](),
			D = date[_ + "Day"](),
			m = date[_ + "Month"](),
			y = date[_ + "FullYear"](),
			H = date[_ + "Hours"](),
			M = date[_ + "Minutes"](),
			s = date[_ + "Seconds"](),
			L = date[_ + "Milliseconds"](),
			o = utc ? 0 : date.getTimezoneOffset(),
			flags = {
				d:    d,
				dd:   pad(d),
				ddd:  dF.i18n.dayNames[D],
				dddd: dF.i18n.dayNames[D + 7],
				m:    m + 1,
				mm:   pad(m + 1),
				mmm:  dF.i18n.monthNames[m],
				mmmm: dF.i18n.monthNames[m + 12],
				yy:   String(y).slice(2),
				yyyy: y,
				h:    H % 12 || 12,
				hh:   pad(H % 12 || 12),
				H:    H,
				HH:   pad(H),
				M:    M,
				MM:   pad(M),
				s:    s,
				ss:   pad(s),
				l:    pad(L, 3),
				L:    pad(L > 99 ? Math.round(L / 10) : L),
				t:    H < 12 ? "a"  : "p",
				tt:   H < 12 ? "am" : "pm",
				T:    H < 12 ? "A"  : "P",
				TT:   H < 12 ? "AM" : "PM",
				Z:    utc ? "UTC" : (String(date).match(timezone) || [""]).pop().replace(timezoneClip, ""),
				o:    (o > 0 ? "-" : "+") + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
				S:    ["th", "st", "nd", "rd"][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10]
			};

		return mask.replace(token, function ($0) {
			return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1);
		});
	};
}();

// Some common format strings
dateFormat.masks = {
	"default":      "ddd mmm dd yyyy HH:MM:ss",
	shortDate:      "m/d/yy",
	mediumDate:     "mmm d, yyyy",
	longDate:       "mmmm d, yyyy",
	fullDate:       "dddd, mmmm d, yyyy",
	shortTime:      "h:MM TT",
	mediumTime:     "h:MM:ss TT",
	longTime:       "h:MM:ss TT Z",
	isoDate:        "yyyy-mm-dd",
	isoTime:        "HH:MM:ss",
	isoDateTime:    "yyyy-mm-dd'T'HH:MM:ss",
	isoUtcDateTime: "UTC:yyyy-mm-dd'T'HH:MM:ss'Z'"
};

// Internationalization strings
dateFormat.i18n = {
	dayNames: [
		"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat",
		"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
	],
	monthNames: [
		"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec",
		"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"
	]
};

// For convenience...
Date.prototype.format = function (mask, utc) {
	return dateFormat(this, mask, utc);
};




function checkLocationForm(f) {
	
	var pressed = document.pressed;
	if (pressed == "upload_image") {
		if (!f.file.value) {
			alert(SELECT_IMAGE);
			return false;
		} else {
			var conf_txt = '\n' + IMAGE_INSTR;
			if (confirm(conf_txt)) {
				//do upload
				return true;
			} else {
				//cancel
				return false;
			}
		}
	} else {
		if (!pressed)
			pressed = "Save";
	
		var errspan = document.getElementById("form_errors");
		errspan.className = "errors_hidden";
		errspan.innerHTML = "";

	    var why = "";
	
		var isevent = (f.isevent.value == "1" || f.isevent.value == "true");
		var today_only = false;

		if (isevent) {
			//make sure a type of event has been set
			var et = parseInt(f.event_type.value);
			if (!(et > 0))
				why += SELECT_EVENT_TYPE + "\n";

			var now = new Date();
			var today = dateFormat(now, "mmmm dd, yyyy");
			
			if (f.event_start_date.value == today && f.event_end_date.value == today) {
				today_only = true;
			}
			
			//see if end date is before start date
			var sd = new Date(f.event_start_date.value);
			var ed = new Date(f.event_end_date.value);
			var difference = ed - sd;
			if (difference < 0) {
				why += "Start date must be before end date \n";
			}
		} else if (f.location_type.selectedIndex == 0) {
			why += CHOOSE_TYPE + "\n"
		}

		//Check required fields
		if (!f.display_name.value || f.display_name.value.trim()==='') {
			if (isevent)
				why += ENTER_EVENT_NAME + "\n";
			else
				why += ENTER_NAME + "\n";
			
		}

		if (!f.brief_desc.value || f.brief_desc.value.trim()==='') {
			switch(parseInt(f.location_type.value))
			{
				case 1:
				  why += ENTER_DESC1 + "\n";
				  break;
				case 2:
				  why += ENTER_DESC2 + "\n";
				  break;
				case 3:
				  why += ENTER_DESC3 + "\n";
				  break;
				case 4:
				  why += ENTER_DESC4 + "\n";
				  break;
				case 5:
				  why += ENTER_DESC5 + "\n";
				  break;
				case 6:
				  why += ENTER_DESC6 + "\n";
				  break;
				case 7:
				  why += ENTER_DESC7 + "\n";
				  break;
				case 8:
				  why += ENTER_DESC8 + "\n";
				  break;
				default:
				  why += ENTER_DESC + "\n";
			}
		}

		if (!isevent) {
			//Make sure they have checked at least 1 media category
			if (f.location_type.options[f.location_type.selectedIndex].value == 1 || f.location_type.options[f.location_type.selectedIndex].value == 2) {
			 	if (!checkMedia(f))
					why += SELECT_MEDIA + "\n";
			}

			if (f.location_type.selectedIndex == 0) {
				if (typeof f.onwebsite != "undefined" && f.on_website.checked && !f.url.value) {
					why += ENTER_WEBSITE + "\n\n";
				}
				//Check at_gallery, and on_website
				/*
				//This code does NOT work
				if (f.at_gallery.checked && (!f.at_gallery_text.value || f.at_gallery_text.value==='<p><br mce_bogus="1"></p>' || f.at_gallery_text.value.trim()==='')) {
					why += GALLERY_TEXT_ERR + "\n\n";
				}
				*/
			}
		}

		if (!f.city.value || f.city.value.trim()==='') {
			why += ENTER_CITY + "\n";
		}
	
		if (f.state.disabled && f.zone_id.value == "") {
				why += SELECT_STATE + "\n";
		}
	
		if (!f.country_id.value) {
			why += SELECT_COUNTRY + "\n";
		}

		var err_intro = LOC_ERR_INTRO + "\n";
		if (f.update.value == "true")
			err_intro = LOC_ERR_INTRO_UPDATE + "\n";

		if (pressed.indexOf("Preview") != -1) {
			err_intro = LOC_ERR_INTRO_PREVIEW + "\n";
			f.action = "preview.php";
			f.preview.value = "true";
		} else {
			f.action = "account.php";
			f.preview.value = "false";
		}
		
	    if (why != "") {
			alert(err_intro + "\n" + why);
	       	return false;
	    } else {
			if (today_only)
				return confirm("Your event is set to occur today only. \nIf that is intentional click OK. \nIf not, click cancel, and update the dates.");
			else
				return true;
		}
	}
}

function previewLoaded() {
	var pf = document.getElementById("preview_frame");
	pf.className = "previewFrame";
	scrollTo(0,0);
}

function closePreview() {
	var pf = document.getElementById("preview_frame");
	pf.className = "hiddenFrame";
	pf.src = "blank.php";
}


function toggleDeleteImage(checked,origImage,origThumb) {
	if (checked) {
		document.location_form.image.value = "";
		document.location_form.file.value = "";
		document.location_form.previewImage.value = "";
		document.location_form.thumb.value = "";
		document.getElementById("locImage").src = "";
	} else {
		document.location_form.image.value = "";
		document.location_form.previewImage.value = origImage;
		document.location_form.thumb.value = origThumb;
		document.getElementById("locImage").src = artist_image_path + "/" + origImage;
	}
	
	
}

function deleteImage() {
	document.location_form.image.value = "";
	document.location_form.file.value = "";
	document.location_form.previewImage.value = "";
	document.location_form.thumb.value = "";
	document.getElementById("noImageTxt").className = "showSwitch";
	document.getElementById("haveImageField").className = "hideSwitch";
	document.getElementById("haveImageTxt").className = "hideSwitch";
}

function saveImage(image,thumb) {
	document.location_form.image.value = "";
	document.location_form.previewImage.value = image;
	document.location_form.thumb.value = thumb;
	document.getElementById("noImageTxt").className = "hideSwitch";
	document.getElementById("haveImageField").className = "showSwitch";
	document.getElementById("haveImageTxt").className = "showSwitch";
	document.getElementById("locImage").src = artist_image_path + "/" + image;
}

function setZone(f,zonefieldname,val) {
	if (val && val != 0) {
		//select from zone drop-down if there's a value
		var zoneSelect = document.location_form.elements[zonefieldname];
		if (zoneSelect) {
			for (var idx=0; idx < zoneSelect.length; idx++) {
				if (zoneSelect.options[idx].value == val) {
					zoneSelect.selectedIndex = idx;
					break;
				}
			}
		}
	}
}

function toggleFormByType(type) {
	
	var name_sublabel_div = document.getElementById("name_sublabel");
	var brief_desc_label_div = document.getElementById("brief_desc_label");
	var brief_desc_sublabel_div = document.getElementById("brief_desc_sublabel");
	var statement_label_div = document.getElementById("statement_label");
	var hours_label_div = document.getElementById("hours_label");
	var hours_sublabel_div = document.getElementById("hours_sublabel");
	var studio_contact_div = document.getElementById("studio_contact_div");

	var name_sublabel = labels.name_sublabel[type];
	var brief_desc_label = labels.brief_desc_label[type];
	var brief_desc_sublabel = labels.brief_desc_sublabel[type];
	var statement_label = labels.statement_label[type];
	var hours_label = labels.hours_label[type];
	var hours_sublabel = labels.hours_sublabel[type];

	name_sublabel_div.innerHTML = name_sublabel;
	brief_desc_label_div.innerHTML = brief_desc_label;
	brief_desc_sublabel_div.innerHTML = brief_desc_sublabel;
	statement_label_div.innerHTML = statement_label;

	hours_label_div.innerHTML = hours_label;
	if (type == "1" || type == "2") {
		document.getElementById("media_label").className = 'showSwitch';
		document.getElementById("media_div").className = 'showSwitch';
		document.getElementById("subjstyle_label").className = 'showSwitch';
		document.getElementById("subjstyle_div").className = 'showSwitch';
	} else {
		document.getElementById("media_label").className = 'hideSwitch';
		document.getElementById("media_div").className = 'hideSwitch';
		document.getElementById("subjstyle_label").className = 'hideSwitch';
		document.getElementById("subjstyle_div").className = 'hideSwitch';
	}

	if (type == "1") {
		document.getElementById("studio_contact_div").className = 'showSwitch';
		document.getElementById("hours_div").className = 'hideSwitch';
		document.getElementById("website_label").innerHTML = WEBSITE_OR_BLOG + ":";
	} else {
		hours_sublabel_div.innerHTML = hours_sublabel;
		document.getElementById("studio_contact_div").className = "hideSwitch";
		document.getElementById("hours_div").className = 'showSwitch';
		document.getElementById("website_label").innerHTML = WEBSITE + ":";
	}

	if (type in TYPES_WITH_MEMBERSHIP) {
		document.getElementById("membership_label").className = 'showSwitch';
		document.getElementById("membership_div").className = 'showSwitch';
	} else {
		document.getElementById("membership_label").className = 'hideSwitch';
		document.getElementById("membership_div").className = 'hideSwitch';
	}

	if (type in INSTRTYPES) {
		document.getElementById("art_instr_orgs_label").innerHTML =  labels.art_instr_label[type];
		document.getElementById("art_instr_orgs_label").className = "showSwitch";
		document.getElementById("art_instr_orgs").className = "showSwitch";
	} else {
		document.getElementById("art_instr_orgs_label").className = "hideSwitch";
		document.getElementById("art_instr_orgs").className = "hideSwitch";
	}

	if (type == "2") {
		document.getElementById("nfp_div").className = 'showSwitch';
	} else {
		var nfpd = document.getElementById("nfp_div");
		if (nfpd)
			nfpd.className = 'hideSwitch';
	}

	if (type == "6") {
		document.getElementById("pa_div").className = 'showSwitch';
	} else {
		var pad = document.getElementById("pa_div");
		if (pad)
			pad.className = 'hideSwitch';
	}

	if (type == "9") {
		document.getElementById("hours_label").className = 'hideSwitch';
		document.getElementById("hours_div").className = 'hideSwitch';
		document.getElementById("event_hours_label").className = 'showSwitch';
		document.getElementById("event_hours_div").className = 'showSwitch';
		document.getElementById("event_type_label").className = 'showSwitch';
		document.getElementById("event_type_div").className = 'showSwitch';
	} else {
		document.getElementById("event_hours_label").className = 'hideSwitch';
		document.getElementById("event_hours_div").className = 'hideSwitch';
		var div = document.getElementById("event_type_label");
		if (div)
			document.getElementById("event_type_label").className = 'hideSwitch';
		div = document.getElementById("event_type_div");
		if (div)
			document.getElementById("event_type_div").className = 'hideSwitch';
	}
	
}


