// JavaScript Document

function MM_findObj(n, d) { //v4.01
  var p,i,x;  if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
    d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
  if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
  for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
  if(!x && d.getElementById) x=d.getElementById(n); return x;
}

function MM_changeProp(objName,x,theProp,theValue) { //v6.0
  var obj = MM_findObj(objName);
  if (obj && (theProp.indexOf("style.")==-1 || obj.style)){
    if (theValue == true || theValue == false)
      eval("obj."+theProp+"="+theValue);
    else eval("obj."+theProp+"='"+theValue+"'");
  }
}
function MM_validateForm() { //v4.0
  var i,p,q,nm,test,num,min,max,errors='',args=MM_validateForm.arguments;
  for (i=0; i<(args.length-2); i+=3) { test=args[i+2]; val=MM_findObj(args[i]);
    if (val) { nm=val.name; if ((val=val.value)!="") {
      if (test.indexOf('isEmail')!=-1) { p=val.indexOf('@');
        if (p<1 || p==(val.length-1)) errors+='- '+nm+' must contain an e-mail address.\n';
      } else if (test!='R') { num = parseFloat(val);
        if (isNaN(val)) errors+='- '+nm+' must contain a number.\n';
        if (test.indexOf('inRange') != -1) { p=test.indexOf(':');
          min=test.substring(8,p); max=test.substring(p+1);
          if (num<min || max<num) errors+='- '+nm+' must contain a number between '+min+' and '+max+'.\n';
    } } } else if (test.charAt(0) == 'R') errors += '- '+nm+' is required.\n'; }
  } if (errors) alert('The following error(s) occurred:\n'+errors);
  document.MM_returnValue = (errors == '');
}
function MM_swapImage() { //v3.0
  var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
   if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}

function MM_swapImgRestore() { //v3.0
  var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_preloadImages() { //v3.0
  var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
    var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
    if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}

function isPhoneNumber(s){
     // Check for correct phone number
     rePhoneNumber = new RegExp(/^\([1-9]\d{2}\)\s?\d{3}\-\d{4}$/);

     if (!rePhoneNumber.test(s)) {
          alert("Phone Number Must Be Entered As: (555) 555-1234");
          return false;
     }

	return true;
}
function toggleLayer(whichLayer){
	if (document.getElementById)	{
		// this is the way the standards work
		var style2 = document.getElementById(whichLayer).style;
	}else if (document.all){
		// this is the way old msie versions work
		var style2 = document.all[whichLayer].style;
	}else if (document.layers){
		// this is the way nn4 works
		var style2 = document.layers[whichLayer].style;
	}
	if(style2.display=='block'){
		style2.display ='none';
	}else{
		style2.display='block';
	}
}
function fillDiv(which,what){
	if (document.getElementById)	{
		// this is the way the standards work
		var e = document.getElementById(which);
	}else if (document.all){
		// this is the way old msie versions work
		var e = document.all[which];
	}else if (document.layers){
		// this is the way nn4 works
		var e = document.layers[which];
	}
	e.innerHTML=what;
}

function callscreen(s,p){
	document.csform.action.value=s;
	document.csform.p.value=p;
	document.csform.submit();
}
function trimString(str){
 if (str.trim)
  return str.trim()
 else
  return str.replace(/(^\s*)|(\s*$)/g, "") //find and remove spaces from left and right hand side of string
}
function isEmpty(str){
  return (str == null) || (str.length == 0);
}
function isEmail(str){
	str=trimString(str);
  if(isEmpty(str)) return false;
  //var re = /^[^\s()<>@,;:\/]+@\w[\w\.-]+\.[a-z]{2,}$/i
  var re = /^[^\s()<>@,;:\/]+@[\w\.-]+\.[a-z]{2,}$/i
  return re.test(str);
}
function setTypePassword(element){
	try {
	   element.setAttribute("type", "password");
	} catch (e) {
	   var newElement = null;
	   var tempStr = element.getAttribute("name");
	   try {
		  newElement = document.createElement("<input type=\"" +typeStr+ "\" name=\"" +tempStr+ "\">");
	   } catch (e) {}
	   if (!newElement) {
		  newElement = document.createElement("input");
		  newElement.setAttribute("type", "password");
		  newElement.setAttribute("name", tempStr);
	   }
	   if (tempStr = element.getAttribute("value")) {
		  newElement.setAttribute("value", tempStr);
	   }
	   element.parentNode.replaceChild(newElement, element);
	}
}
function saveSubNav(id,setSession){
	// this toggles subnavs open/closed and keeps state in session via savsubnav.php
	var subDiv='subnavdiv'+id;// contains subnav list
	var subDivA='subnavadiv'+id;// contains + or - 
	new Ajax.Request("savesubnav.php",{
		method:'post',
		parameters: {
			id:id,
			setSession:setSession
		},
		onSuccess: function(transport){
		  var response = transport.responseText || "";
		  if(response==""){
			  $(subDiv).hide();
			  $(subDivA).innerHTML='[+]';
		  }else{
			  $(subDiv).show();
			  $(subDiv).innerHTML=response;
			  $(subDivA).innerHTML='[&#8211;]';
		  }
		}
	  }
	);
}
function checkMax(tarea,ndisp,submitbutton,maxchars){
	var l=maxchars-$(tarea).value.length;
	$(ndisp).innerHTML=l;
	if(l<0){
		$(submitbutton).disabled=true;
	}else{
		$(submitbutton).disabled=false;
	}
}

function updConfig(which,status_div,config_name){
	with(which){
		var pars="config_name="+config_name+"&config_value="+checked;
		var myAjax = new Ajax.Updater(
			status_div,
			'updconfig.php',
			{
				method : 'post',
				parameters: pars
			}
		);
	}
}

function updConfigText(which,status_div,config_name){
	with(which){
		var pars="config_name="+config_name+"&config_value="+value;
		var myAjax = new Ajax.Updater(
			status_div,
			'updconfig.php',
			{
				method : 'post',
				parameters: pars
			}
		);
	}
}

function scValidateForm(){
	// this is a replacement for mm_validateform so we can add a parm to deal with the visibility issue for multi-seat tickets
	var args=scValidateForm.arguments;
	var s=new String;
	var i;
	var doit=true;
  	for (i=0; i<(args.length-2); i+=3) {
		fieldName=args[i];// name of form field
		arrayChk=args[i+1];// optional name of select that chooses guest or member
		testType=args[i+2];// either R, N or RisEmail
		if(arrayChk!=''){
			// special case where we check against the vis array. if its index is 1 its set to member so we can ignore this test
			if(MM_findObj(arrayChk).selectedIndex==0){
				doit=true;// guest selected
			}else{
				doit=false;// member selected (member droplist can't be blank so no need to verify it)
			}
		}else{
			doit=true;// default is to check the fields
		}
		if(doit){
			obj=MM_findObj(fieldName);
			if(testType=='R'){
				if(obj.value=='') s=s+fieldName+" must not be blank\n";
			}else if(testType=='N'){
				if(isNaN(obj.value) || obj.value==0) s=s+fieldName+" must be greater than zero\n";
			}else if(testType=='RisEmail'){
				if(!isEmail(obj.value)) s=s+fieldName+" must contain an email address\n";
			}
		}
	}
	if(s.length>0){
		alert(s);
		return false;
	}
	return true;
}
function function_exists (function_name) {
    // http://kevin.vanzonneveld.net
    // +   original by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
    // +   improved by: Steve Clay
    // +   improved by: Legaev Andrey
    // *     example 1: function_exists('isFinite');
    // *     returns 1: true

    if (typeof function_name == 'string') {
        return (typeof this.window[function_name] == 'function');
    } else {
        return (function_name instanceof Function);
    }
}

function scValidateForm3(){
	// version 3. we add another parm for the name to use to refer to the field
	// this is a replacement for mm_validateform so we can add a parm to deal with the visibility issue for multi-seat tickets
	var args=scValidateForm3.arguments;
	var s=new String;
	var i;
	var doit=true;
	for (i=0; i<(args.length-3); i+=4) {
		fieldName=args[i];// name of form field
		arrayChk=args[i+1];// optional name of select that chooses guest or member
		testType=args[i+2];// either R, N or RisEmail
		displayName=args[i+3];// name to use for alert
		if(arrayChk!=''){
			// special case where we check against the vis array. if its index is 1 its set to member so we can ignore this test
			// it can also be set to g or m when the droplist is not actually used
			if($(arrayChk).selectedIndex==0 || $(arrayChk).value=='g'){
				doit=true;// guest selected
			}else{
				doit=false;// member selected (member droplist can't be blank so no need to verify it)
			}
		}else{
			doit=true;// default is to check the fields
		}
		if(doit){
			obj=MM_findObj(fieldName);
			if(testType=='R'){
				if(obj.value=='') s=s+displayName+" must not be blank\n";
			}else if(testType=='N'){
				if(isNaN(obj.value) || obj.value==0) s=s+displayName+" must be greater than zero\n";
			}else if(testType=='RisEmail'){
				if(!isEmail(obj.value)) s=s+displayName+" must contain an email address\n";
			}
		}
	}
	if(function_exists('scValidateForm_extension')){
		s=s+scValidateForm_extension();
	}
	if(s.length>0){
		alert(s);
		return false;
	}
	return true;
}

	

