function validateCustomForm(frm){
         var name=frm.name;
         var ret=true;
         var RE_txt = /\S+/;
         var radioGroups = new Array();
         var useCaptcha = '';
         var cval       = '';
         for(var i=0 ; ret && i < frm.elements.length ; i++){
             var ctrlName = frm.elements[i].name;
             //skips certain elements
             if (ctrlName == 'frm_mailfrom' || ctrlName == 'frm_mailto' || ctrlName == 'frm_submit' || ctrlName == 'frm_reset')
                 continue;
             //captcha elements
             if (ctrlName == 'frm_usecha'){
             	useCaptcha = frm.elements[i].value;
             	continue;
             }
             if (ctrlName == 'frm_usechaval'){
             	cval = frm.elements[i];
             	continue;
             }
             //skips hidden elements
             if (frm.elements[i].tagName.toUpperCase() == 'INPUT' && frm.elements[i].type.toUpperCase() == 'HIDDEN')
                 continue;
             //finds label cell and checks reqattr
             var labelCell = document.getElementById(name+'_'+ctrlName);
             if (labelCell.getAttribute('reqattr') == 'required'){
                 //must validate that this has been filled in
                 var tag = frm.elements[i].tagName.toUpperCase();
                 if (tag == 'SELECT'){
                     if (frm.elements[i].selectedIndex == -1)
                         ret=false;
                 }else if (tag == 'TEXTAREA'){
                     if (!RE_txt.test(frm.elements[i].value))
                          ret=false;
                 }else{
                     var typeAttr = frm.elements[i].type.toUpperCase();
                     if (typeAttr == 'TEXT'){
                         if (! RE_txt.test(frm.elements[i].value))
                               ret=false;
                     }else if (typeAttr == 'CHECKBOX'){
                         if (! frm.elements[i].checked)
                               ret=false;
                     }else if (typeAttr == 'RADIO'){
                         //must verify that one radio control with this same name has the checked property in ON
                         //first checks if this radio group has already been processed
                         var found=false;
                         for(var j=0; !found && j < radioGroups.length ; j++){
                             if (radioGroups[j] == ctrlName)
                                 found=true;
                         }
                         if (!found){
                              for(var j=0;!found && j < frm.elements.length; j++){
                                  if (frm.elements[j].name == ctrlName && frm.elements[j].checked)
                                      found=true;
                              }
                              radioGroups[radioGroups.length] = ctrlName;
                              if (! found)
                                    ret=false;
                         }
                     }
                 }
             }
         }
         if (ret){
         	//if captcha, verify it before going on
			if (useCaptcha == 'Y'){
				var params = 'rnd=' + new Date().getTime();
				params += '&entr=' + escape(cval.value);
				var url = '/shared/captchav.php';
				http.abort();
				http.open("POST", url, false);
				http.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');				  	
			  	http.send(params);
				if (http.responseText != 'Y'){
					alert("Incorrect CAPTCHA string. Please try again.\nA new image will be displayed now for you");
					//reload the captcha image
					var imgObj = document.getElementById(frm.name + "_CAPCHIMG");
					if (imgObj){
						var src    = imgObj.src;
						src        = src.replace(/r=[0-9A-Za-z]*/,'r=' + new Date().getTime());
						imgObj.src = src;
						cval.value = '';
					}
					return false;
				}				
			}
         }else{
              alert("Please fill in all required fields");
         }
         return ret;
}

//Tip Text Functions and related code
var dofade=true;     // ENABLES FADE-IN EFFECT FOR IE4+ AND NS6 ONLY
var center=false;     // CENTERS THE BOX UNER THE MOUSE, OTHERWISE DISPLAYS BOX TO THE RIGHT OF THE MOUSE
var centertext=false; // CENTERS THE TEXT INSIDE THE BOX. YOU CAN'T SIMPLY DO THIS VIA STYLE BECAUSE OF NS4.

var DOM = (document.getElementById) ? true: false;
var NS4 = (navigator.appName.indexOf("Netscape")>=0 && !DOM)? true : false;
var IE4 = (document.all && !DOM)? true : false;
var IE5 = ((navigator.userAgent.indexOf("MSIE")>-1)  && DOM)? true : false;
var NS6 = (document.getElementById && navigator.appName.indexOf("Netscape")>=0 )? true: false;
var W3C = (document.getElementById)? true : false;
var w_y, w_x, navtxt, boxheight, boxwidth;
var ishover=false;
var isloaded=false;
var ieop=0;
var op_id=0;
var offX= 20;	
var offY= 12; 

function getwindowdims(){
w_y=(NS4||NS6)? window.innerHeight : (IE5||IE4)? document.body.clientHeight : 0;
w_x=(NS4||NS6)? window.innerWidth : (IE5||IE4)? document.body.clientWidth : 0;
}

function getboxwidth(){
if(NS4)boxwidth=(navtxt.document.width)? navtxt.document.width : navtxt.clip.width;
if(IE5||IE4)boxwidth=(navtxt.style.pixelWidth)? navtxt.style.pixelWidth : navtxt.offsetWidth;
if(NS6)boxwidth=(navtxt.style.width)? parseInt(navtxt.style.width) : parseInt(navtxt.offsetWidth);
}

function getboxheight(){
if(NS4)boxheight=(navtxt.document.height)? navtxt.document.height : navtxt.clip.height;
if(IE4||IE5)boxheight=(navtxt.style.pixelHeight)? navtxt.style.pixelHeight : navtxt.offsetHeight;
if(NS6)boxheight=parseInt(navtxt.offsetHeight);
}

function getpagescrolly(){
if(NS4||NS6)return window.pageYOffset;
if(IE5||IE4)return document.body.scrollTop;
}

function getpagescrollx(){
if(NS4||NS6)return window.pageXOffset;
if(IE5||IE4)return document.body.scrollLeft;
}

function writeindiv(text){
  if(NS4){
	navtxt.document.open();
	navtxt.document.write(text);
	navtxt.document.close();
  }else{
	navtxt.innerHTML=text;
  }
}
//**** END UTILITY FUNCTIONS ****//

function writetxt(text,bgcolor,fgcolor){
 if (arguments.length == 2) fgcolor = '#000000'; 
 if(isloaded){
	if(text!=0){
		ishover=true;
		if(NS4){
			text='<div class="navtext" style="background-color:'+bgcolor+'; layer-background-color:'+bgcolor+'; color:'+fgcolor+'">'+((centertext)?'<center>':'')+text+((centertext)?'</center>':'')+'</div>';
		}else{
		 	navtxt.style.backgroundColor = bgcolor; 
			navtxt.style.layerBackgroundColor = bgcolor;
			navtxt.style.color = fgcolor;
		}
		writeindiv(text);
		getboxheight();
		if((W3C || IE4) && dofade){
			ieop=0;
			incropacity();
		}
	}else{
		if(NS4)navtxt.visibility="hide";
		if(IE4||W3C){
			if(dofade)clearTimeout(op_id);
			navtxt.style.visibility="hidden";
		}
		writeindiv('');
		ishover=false;
	}
 }
}

function incropacity(){
  if(ieop<=100){
	ieop+=7;
	if(IE4 || IE5)
		navtxt.style.filter="alpha(opacity="+ieop+")";
	if(NS6)
		navtxt.style.MozOpacity=ieop/100;
	op_id=setTimeout('incropacity()', 50);
  }
}


var mouseX, mouseY;

function moveobj(evt){
	if (isloaded && ishover){
		mouseX = (NS4||NS6)? evt.pageX: window.event.clientX + document.body.scrollLeft;
		mouseY = (NS4||NS6)? evt.pageY: window.event.clientY + document.body.scrollTop;
		
		var tpWd = (NS4||NS6)? navtxt.width: (IE4)? navtxt.clientWidth: navtxt.offsetWidth;
		var tpHt = (NS4||NS6)? navtxt.height: (IE4)? navtxt.clientHeight: navtxt.offsetHeight;
		// document area in view (subtract scrollbar width for ns)
		var winWd = (NS4)? window.innerWidth-20+window.pageXOffset: document.body.clientWidth+document.body.scrollLeft;
		var winHt = (NS4)? window.innerHeight-20+window.pageYOffset: document.body.clientHeight+document.body.scrollTop;
	
		if ((mouseX+offX+tpWd)>winWd) 
			navtxt.style.left = (NS4)? mouseX-(tpWd+offX): mouseX-(tpWd+offX)+"px";
		else navtxt.style.left = (NS4)? mouseX+offX: mouseX+offX+"px";
		if ((mouseY+offY+tpHt)>winHt) 
			navtxt.style.top = (NS4)? winHt-(tpHt+offY): winHt-(tpHt+offY)+"px";
		else navtxt.style.top = (NS4)? mouseY+offY: mouseY+offY+"px";
		if(NS4)navtxt.visibility="show";
		if(W3C||IE4)navtxt.style.visibility="visible";
	}
}

var onImageGallery = false;

function writetip(imgvarname,bgcolor,fgcolor){
 if (arguments.length == 2) fgcolor = '#000000'; 
 if(isloaded){
	if(imgvarname!=0){
		onImageGallery = true;
		var text = eval(imgvarname);
		ishover=true;
		if(NS4){
			text='<div class="navtext" style="background-color:'+bgcolor+'; layer-background-color:'+bgcolor+'; color:'+fgcolor+'">'+((centertext)?'<center>':'')+text+((centertext)?'</center>':'')+'</div>';
		}else{
		 	navtxt.style.backgroundColor = bgcolor; 
			navtxt.style.layerBackgroundColor = bgcolor;
		}
		writeindiv(text);
		getboxheight();
		if((W3C || IE4) && dofade){
			ieop=0;
			incropacity();
		}
	}else{
		onImageGallery = false;
		if(NS4)navtxt.visibility="hide";
		if(IE4||W3C){
			if(dofade)clearTimeout(op_id);
			navtxt.style.visibility="hidden";
		}
		writeindiv('');
		ishover=false;
	}
 }
}

if(NS4)document.captureEvents(Event.MOUSEMOVE);
document.onmousemove=moveobj;

if (window.attachEvent){
	window.attachEvent('onload',initializeTips);
}else if (window.addEventListener){
	window.addEventListener('load',initializeTips,false);
}

function initializeTips(){
  navtxt=(NS4)? document.layers['navtxt'] : (IE4)? document.all['navtxt'] : (W3C)? document.getElementById('navtxt') : null;
  if (navtxt){
	  getboxwidth();
	  getboxheight();
	  getwindowdims();
	  isloaded=true;
	  if((W3C || IE4) && centertext)navtxt.style.textAlign="center";
	  if(W3C)navtxt.style.padding='4px';
  	  if(IE4 || IE5 && dofade)navtxt.style.filter="alpha(opacity=0)";
  }
}

window.onresize=getwindowdims;

//AJAX function to get HTTP object, cross/browser

function getHTTPObject() {
  var xmlhttp;
  /*@cc_on
  @if (@_jscript_version >= 5)
    try {
      xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (E) {
        xmlhttp = false;
      }
    }
  @else
  xmlhttp = false;
  @end @*/
  if (!xmlhttp && typeof XMLHttpRequest != 'undefined') {
    try {
      xmlhttp = new XMLHttpRequest();
      xmlhttp.overrideMimeType('text/xml');
    } catch (e) {
      xmlhttp = false;
    }
  }
  return xmlhttp;
}

var http = getHTTPObject();

function reloadCaptcha(frmName){
	//reload the captcha image
	var frm = document.forms[frmName];
	var imgObj = document.getElementById(frm.name + "_CAPCHIMG");
	if (imgObj){
		var src    = imgObj.src;
		src        = src.replace(/r=[0-9A-Za-z]*/,'r=' + new Date().getTime());
		imgObj.src = src;
		var done=false;
        for(var i=0 ; !done && i < frm.elements.length ; i++){
        	if (frm.elements[i].name == 'frm_usechaval'){
        		frm.elements[i].value = '';
        		done=true;
        	}        	
        }
	}
	return false;
}

function reloadCaptchaElem(imgID,elemID){
	//reload the captcha image
	var imgObj = document.getElementById(imgID);
	if (imgObj){
		var src    = imgObj.src;
		src        = src.replace(/r=[0-9A-Za-z]*/,'r=' + new Date().getTime());
		imgObj.src = src;
		var elem   = document.getElementById(elemID);
		elem.value = '';
	}
	return false;
}

function findObjectPosition(obj) {
	var curleft = curtop = 0;
	if (obj.offsetParent) {
		curleft = obj.offsetLeft
		curtop = obj.offsetTop
		while (obj = obj.offsetParent) {
			curleft += obj.offsetLeft
			curtop += obj.offsetTop
		}
	}
	return [curleft,curtop];
}

//function to display membership cost, in member signup form
function displayCostForPlan(obj){
  if (obj.selectedIndex >= 0){
	  var planid = obj.options[obj.selectedIndex].value;
	  var plans  = document.getElementById("theplans").value.split(',');
	  for(var i=0; i < plans.length; i++){
	  	var thediv = document.getElementById("plancost_block_" + plans[i]);
		if (thediv){
			if (plans[i]-0 == planid-0){
			  thediv.style.display = 'block';
			}else{
			  thediv.style.display = 'none';
			}  
		}  
	  }
  }
}

//function to direct subscription page to the right place
function membershipProceed(){
   var planobj= document.getElementById("plan_id");
   if (planobj && planobj.selectedIndex >= 0){
	   var planid = planobj.options[planobj.selectedIndex].value;
	   var frm    = document.forms['pickplan'];
	   var plancost = '';
	   var onlycost = '';
	   for(var i=0; i < frm.elements.length; i++){
	   		if (frm.elements[i].name == 'plan_cost_'+planid){
	   			if (onlycost == '') onlycost = frm.elements[i].value;
			   	if (frm.elements[i].checked){
					plancost = frm.elements[i].value;     
				}
			}
	   }
	   if (plancost == '') plancost = onlycost;
	   if (plancost == 'F-0'){
	      	document.forms['gf'].elements['mpid'].value = planid;
	   		document.forms['gf'].submit();  
	   }else{
	      	document.forms['gc'].elements['mplanid'].value = planid;
	     	document.forms['gc'].elements['mpcost'].value = plancost;
	     	//document.forms['gc'].elements['memberid'].value = '0';
	     	document.forms['gc'].submit();
	   }
   }
   return false;
}
