
    
function Validate(fform, bgColor) {	  
	  var tmpval;
	  var y = 0;
	  var x = 0;
	  var alertMsg = '';
	  if (bgColor == null || bgColor == "")
	  {
	     bgColor = "yellow";
	  }
	  
	
	  //check for required fields
	  for (x=0; x<fform.elements.length; x++){	
	  
	        var IsRequired, IsType, IsSelected
	        var temp = new Array();	        
	        tmpVal = fform.elements[x].className
            indx = tmpVal.indexOf('|')
	        if (indx >= -1) {
              temp = tmpVal.split('|');
              IsRequired = temp[0]
              IsType = temp[1]
            }else{
              IsRequired = 0
              IsType = ''
            }
	    	  
		    if (IsRequired == 1){	
		      	
			  
			  if (fform.elements[x].type == 'radio') {
			  
			     IsSelected = false;
			     ele = eval("fform." + fform.elements[x].name);
			     for (var i = 0;i < ele.length; i++){
                   if (ele[i].checked == true){
                     IsSelected = true;
                   }
                 }
                 if (IsSelected == false){ 
                   for (var j = 0;j < ele.length; j++){                    
                     ele[j].style.backgroundColor = bgColor;                     		
                   }       
                   
                   
                   
			       if (y==0) {
				     alertMsg = 'The following fields are required: \n\n';
				     ele[0].focus();
				     y=1;
			       }
				   var mySearch = '"' + fform.elements[x].title + '"\n' 
                   var index = alertMsg.indexOf(mySearch);
                   if (index == -1) {
				      alertMsg = alertMsg + '"' + fform.elements[x].title + '"\n' 
				   } 
			    
			    }else{
		  		  for (var i = 0;i < ele.length; i++){
                     ele[i].style.backgroundColor = 'transparent';		
                   }
			    } 
			     
			    
			  }else if (fform.elements[x].type == 'checkbox'){  
			     




                 IsSelected = false;
			     ele = eval("fform." + fform.elements[x].name);
			     for (var i = 0;i < ele.length; i++){
                   if (ele[i].checked == true){
                     IsSelected = true;
                   }
                 }
                 if (IsSelected == false){ 
                   for (var j = 0;j < ele.length; j++){                    
                     ele[j].style.backgroundColor = bgColor;                     		
                   }       
                   
                   
                   
			       if (y==0) {
				     alertMsg = 'The following fields are required: \n\n';
				     ele[0].focus();
				     y=1;
			       }
				   var mySearch = '"' + fform.elements[x].title + '"\n' 
                   var index = alertMsg.indexOf(mySearch);
                   if (index == -1) {
				      alertMsg = alertMsg + '"' + fform.elements[x].title + '"\n' 
				   } 
			    
			    }else{
		  		  for (var i = 0;i < ele.length; i++){
                     ele[i].style.backgroundColor = 'transparent';		
                   }
			    } 



			     
			  }else{
			  
			    tmpval = fform.elements[x].value 			
		        if (tmpval.length == 0){ 
		  	       fform.elements[x].style.backgroundColor = bgColor;		
			       if (y==0) {
				     alertMsg = 'The following fields are required: \n\n';
				     fform.elements[x].focus();
				     y=1;
			       }
				   var mySearch = '"' + fform.elements[x].title + '"\n' 
                   var index = alertMsg.indexOf(mySearch);
                   if (index == -1) {
				      alertMsg = alertMsg + '"' + fform.elements[x].title + '"\n' 
				   } 
			    
			    }else{
		  		  fform.elements[x].style.backgroundColor = 'white';	
			    }
			  }
			  
			  
			  
		  }
	  }
	  if (alertMsg.length) {
		  alert(alertMsg);
		  return false;
	  }
	  

	  
	  //check for validation
	  y=0;
	  for (x=0;x<fform.elements.length;x++){	
	    
	    var IsRequired, IsType
	        var temp = new Array();
	        tmpVal = fform.elements[x].className
            indx = tmpVal.indexOf('|')
	        if (indx >= -1) {
              temp = tmpVal.split('|');
              IsRequired = temp[0]
              IsType = temp[1]
            }else{
              IsRequired = 0
              IsType = ''
            }
	    	  
		if (IsType != '' && IsType){			  
			  switch(IsType){
			    case 'areasServed':
			        var cb = document.getElementsByName('areasServed');
			        var ii = 0;
			        var sel = 0;
			        for (ii=0;ii<cb.length;ii++)
			        {
			            if(cb[ii].value == 'Other')
			            {   
			                if (cb[ii].checked)
			                {
			                    if(fform.areasServedOther.value != '')
			                    {
			                        sel=1;
			                    }
			                    else
			                    {
			                        sel=0;
			                        break;
			                    }
			                }			                    
			            }
			            else
			            {
			                if (cb[ii].checked)
			                    sel=1;
			            }
			        }
			        
			        if (sel == 0)
			        {
			             if (y==0) {				
				          alertMsg = 'Your information could not be submited for the following reason(s): \n\n';
			              fform.elements[x].focus();
			              y = 1;
		                } 
		                fform.elements[x].style.backgroundColor = 'yellow';	
					    alertMsg = alertMsg + 'Please select one or more geographic locations your organization serves.\n' 
			        }
			        break;
			        
			    case 'totalAmount':
			    
			        var str = fform.elements[x].value;
					
			        if (str == '' || str == '$0.00')
			        {
			            if (y==0) {				
				          alertMsg = 'Your information could not be submited for the following reason(s): \n\n';
			              fform.elements[x].focus();
			              y = 1;
		                } 
			            fform.elements[x].style.backgroundColor = 'yellow';	
					    alertMsg = alertMsg + 'Please select one or more products.\n' 
					}
					else
					{
					    fform.elements[x].style.backgroundColor = 'white';	
			        }
			        
			        break;
			        
                case 'email':
				    var str = fform.elements[x].value;
					
				    if (window.RegExp) {
                      var reg1str = "(@.*@)|(\\.\\.)|(@\\.)|(\\.@)|(^\\.)";
                      var reg2str = "^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$";
                      var reg1 = new RegExp(reg1str);
                      var reg2 = new RegExp(reg2str);
                      if (!reg1.test(str) && reg2.test(str)  || str == ''){
					    //return true;
						fform.elements[x].style.backgroundColor = 'white';	
					  }else{
                        //return false;
						if (y==0) {				
					      alertMsg = 'Your information could not be submited for the following reason(s): \n\n';
				          fform.elements[x].focus();
				          y = 1;
			            } 
					    fform.elements[x].style.backgroundColor = 'yellow';	
					    alertMsg = alertMsg + '"' + fform.elements[x].title + '" is not a valid email address.\n' 
					  }
                   } else {
                      if(str.indexOf("@") >= 0 || str == ''){
                        //return true;
						fform.elements[x].style.backgroundColor = 'white';	
					  }else{
                        //return false;
						if (y==0) {				
					      alertMsg = 'Your information could not be submited for the following reason(s): \n\n';
				          fform.elements[x].focus();
				          y = 1;
			            } 
					    fform.elements[x].style.backgroundColor = bgColor;	
					    alertMsg = alertMsg + '"' + fform.elements[x].title + '" is not a valid email address.\n' 

					  }
                   }							          
                   break ;
				case 'numeric':
				  if (isNaN(fform.elements[x].value)) {
					  fform.elements[x].style.backgroundColor = bgColor;	
					  var mySearch = '"' + fform.elements[x].title + '" is not a valid number.\n'   
                      var index = alertMsg.indexOf(mySearch);
                      if (index = -1) {
					    alertMsg = alertMsg + '"' + fform.elements[x].title + '" is not a valid number.\n'   
					  }
				  }else{
					  fform.elements[x].style.backgroundColor = 'white';	  
					  
				  }
				  break;
				case 'digits':
				case 'digit':
				  if (isDigits(fform.elements[x].value) || fform.elements[x].value == '') {
				    fform.elements[x].style.backgroundColor = 'white';	
				  }else{
					fform.elements[x].style.backgroundColor = bgColor;	
					
	
					var mySearch = '"' + fform.elements[x].title + '" is not a valid number.\n'   
                    var index = alertMsg.indexOf(mySearch);
                    if (index = -1) {
					  alertMsg = alertMsg + '"' + fform.elements[x].title + '" is not a valid number.\n'   
					}
				  }				  
				  break;
				case 'zip':
				   var z=fform.elements[x].value;  // put zipCode into working var
                   var digits="0123456789";
                   var flag=true; // innocent til proven guilty
                   if (z.length > 0) {
				     if(z.length==10) {
                      if(z.charAt(5)!='-')
                        flag=false;
                      else
                        z=z.substr(0, 5)+z.substr(6, 4);
                     }
                     switch(z.length) {
                       case 5:
                       case 9:
						  for(var i=0;i<z.length;i++)
							if(digits.indexOf(z.charAt(i))<0) flag=false;   // invalid digit character
						  break;    
                       default:
                          flag=false;
                      }
					  if(flag) {
                       fform.elements[x].style.backgroundColor = 'white';	   
                      }else{                       
					   fform.elements[x].style.backgroundColor = bgColor;	
					   alertMsg = alertMsg + '"' + fform.elements[x].title + '" is not a valid zip code.\n'
			          }
				   }
				    break;
                case 'phone':
			    case 'phoneno':
				case 'phonenumber':
				  var ph=fform.elements[x].value;  // put value into working var 
				  if (ph == '') {
				     fform.elements[x].style.backgroundColor = 'white';		           
				  }else{
				    if (checkInternationalPhone(ph)==false){
		             fform.elements[x].style.backgroundColor = bgColor;	
		             alertMsg = alertMsg + '"' + fform.elements[x].title + '" is not a valid phone number.\n'   
		            }else{
		             fform.elements[x].style.backgroundColor = 'white';
		            }
		          }  
				  break;
                     case 'time':
			if (IsValidTime(fform.elements[x].value) || fform.elements[x].value == '') {
			    fform.elements[x].style.backgroundColor = 'white';	
			}else{
			    fform.elements[x].style.backgroundColor = bgColor;	
			    alertMsg = alertMsg + '"' + fform.elements[x].title + '" is not a valid time.\n'   
			}				  
			break;
              }			  
		}
	  }
	  //alert(alertMsg.length)
	   if (alertMsg.length) {
		  alert(alertMsg);
		  return false;
	   }else{
	      return true;
	   }
	  
	  
  }
  
  
  
  
function setRadioValue(ele, val){
  var strVal1, strVal2
  for (var i = 0; i < ele.length; i ++) {
    strVal1 = ele[i].value;
    strVal2 = val;
    if (strVal1.toUpperCase() == strVal2.toUpperCase()) {
      ele[i].checked = true;
      return;    
    }  
  }
}

function IsValidTime(timeStr) {
// Checks if time is in HH:MM:SS AM/PM format.
// The seconds and AM/PM are optional.

var timePat = /^(\d{1,2}):(\d{2})(:(\d{2}))?(\s?(AM|am|PM|pm))?$/;

var matchArray = timeStr.match(timePat);
if (matchArray == null) {
//alert("Time is not in a valid format.");
return false;
}
hour = matchArray[1];
minute = matchArray[2];
second = matchArray[4];
ampm = matchArray[6];

if (second=="") { second = null; }
if (ampm=="") { ampm = null }

if (hour < 0  || hour > 23) {
//alert("Hour must be between 1 and 12.");
return false;
}
if (minute<0 || minute > 59) {
//alert ("Minute must be between 0 and 59.");
return false;
}
if (second != null && (second < 0 || second > 59)) {
//alert ("Second must be between 0 and 59.");
return false;
}
return true;
}

function isDigits(value) {
  var digits="0123456789", x=value.toString();
  if(x.length) {
	var tmp = true;
    for(var i=0; i<x.length; i++){
      if(!(digits.indexOf(x.charAt(i))+1)) {
		tmp = false;
	    break;
	  }
	}
	return tmp;
  }else{
    return false;
  }
}
  
function setSelectValue(ele, val){
  var strVal1, strVal2
  for (var i = 0; i < ele.length; i ++) {
    strVal1 = ele.options[i].value;
    strVal2 = val;
    if (strVal1.toUpperCase() == strVal2.toUpperCase()) {
      ele.options[i].selected = true;
      return;    
    }  
  }
  ele.selectedIndex = -1;
}

function IsEqualDate(d1, d2)  {
  if ((d1 != '') && (d2 != '')) {  
    var date1 = new Date(d1);
    var date2 = new Date(d2); 
  
    if (date1.getTime() == date2.getTime()){
      return true;
    }else{
      return false;
    }  
  }else{
    return false;
  }
}

function IsGreaterDate(d1, d2)  {
  if ((d1 != '') && (d2 != '')) {  
    var date1 = new Date(d1);
    var date2 = new Date(d2); 
  
    if (date1.getTime() > date2.getTime()){
      return true;
    }else{
      return false;
    }  
  }else{
    return false;
  }
}

function IsLesserDate(d1, d2)  {
  if ((d1 != '') && (d2 != '')) {  
    var date1 = new Date(d1);
    var date2 = new Date(d2); 
  
    if (date1.getTime() < date2.getTime()){
      return true;
    }else{
      return false;
    }  
  }else{
    return false;
  }
}

function textCounter( field, maxlimit ) {
  if ( field.value.length > maxlimit ){
    field.value = field.value.substring( 0, maxlimit );
    return false;
  }else{
    return true;
  }
}

 function moveItem1(selFrom, selTo, optionIndex) {  
  var oListItem = selFrom.options[selFrom.selectedIndex];
  var oSelected=selFrom.selectedIndex;
  selFrom.options[selFrom.selectedIndex] = null;
  selTo.options.add(oListItem);
    
}
 function moveItem(selFrom, selTo) {
     var setIndex=-1;  
     while(selFrom.selectedIndex > -1) {
        moveItem1(selFrom, selTo, selFrom.selectedIndex);  
     }
 }   
 function addItem(remList, addList) {
    moveItem(remList, addList);
 }
 function removeItem(addList, remList) {
    moveItem(addList, remList);
 }

function compareOptionText(a,b) { 
  /* 
   * return >0 if a>b 
   *         0 if a=b 
   *        <0 if a<b 
   */ 
  // textual comparison 
  return a.text!=b.text ? a.text<b.text ? -1 : 1 : 0; 
  // numerical comparison 
//  return a.text - b.text; 



} 


function sortOptions(list) { 
  var items = list.options.length; 
  // create array and make copies of options in list 
  var tmpArray = new Array(items); 
  for ( i=0; i<items; i++ ) 
    tmpArray[i] = new 
Option(list.options[i].text,list.options[i].value); 
  // sort options using given function 
  tmpArray.sort(compareOptionText); 
  // make copies of sorted options back to list 
  for ( i=0; i<items; i++ ) 
    list.options[i] = new Option(tmpArray[i].text,tmpArray[i].value); 


}

function compareOptionText2(a,b) { 
  /* 
   * return >0 if a>b 
   *         0 if a=b 
   *        <0 if a<b 
   */ 
  // textual comparison 
  return a.text!=b.text ? a.text>b.text ? -1 : 1 : 0; 
  // numerical comparison 
//  return a.text - b.text; 



} 

function sortOptionsReverse(list) { 
    var items = list.options.length; 
    // create array and make copies of options in list 
    var tmpArray = new Array(items); 
    for ( i=0; i<items; i++ ) 
      tmpArray[i] = new 
      Option(list.options[i].text,list.options[i].value); 
      // sort options using given function 
      tmpArray.sort(compareOptionText2); 
     // make copies of sorted options back to list 
     for ( i=0; i<items; i++ ) 
       list.options[i] = new Option(tmpArray[i].text,tmpArray[i].value); 


}  
// Declaring required variables
var digits = "0123456789";
// non-digit characters which are allowed in phone numbers
var phoneNumberDelimiters = "()- ";
// characters which are allowed in international phone numbers
// (a leading + is OK)
var validWorldPhoneChars = phoneNumberDelimiters + "+";
// Minimum no of digits in an international phone no.
var minDigitsInIPhoneNumber = 10;

function isInteger(s)
{   var i;
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character is number.
        var c = s.charAt(i);
        if (((c < "0") || (c > "9"))) return false;
    }
    // All characters are numbers.
    return true;
}

function stripCharsInBag(s, bag)
{   var i;
    var returnString = "";
    // Search through string's characters one by one.
    // If character is not in bag, append to returnString.
    for (i = 0; i < s.length; i++)
    {   
        // Check that current character isn't whitespace.
        var c = s.charAt(i);
        if (bag.indexOf(c) == -1) returnString += c;
    }
    return returnString;
}

function checkInternationalPhone(strPhone){
s=stripCharsInBag(strPhone,validWorldPhoneChars);
return (isInteger(s) && s.length >= minDigitsInIPhoneNumber);
}



today=new Date();
// Build an array initializer

function isnArray() {
argnr=isnArray.arguments.length
for (var i=0;i<argnr;i++) {
  this[i+1] = isnArray.arguments[i];
}
}
// And months and day arrays
var isnMonths=new isnArray("January","February","March","April","May","June","July","August","September","October","November","December");
var isnDays= new isnArray("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday");
isnDays[0]="Sunday";
function MM_displayStatusMsg(msgStr) { //v1.0
status=msgStr;
document.MM_returnValue = true;
}
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 disable_all() { 
    document.getElementsByName('mem_ex')[0].style.display = 'none'; 
    document.getElementsByName('evt_ex')[0].style.display = 'none'; 
    document.getElementsByName('bill_ex')[0].style.display = 'none'; 
    document.getElementById("txtCVV2").maxLength = "3"; 
    document.getElementById("txtCVV2").size = "3"; 
    document.getElementById('memorials_tributes').disabled = true; 
    document.getElementById("friends_of_GSRI").disabled = true; 
    document.getElementById("alumnae").disabled = true; 
    document.getElementById("camperships").disabled = true; 
    document.getElementById("family_partners").disabled = true; 
    document.getElementById('help_link').style.display = ''; 
}

function display_mem(selected) { 
if (selected.checked)  {  
document.getElementsByName('mem_ex')[0].style.display = '';  
document.getElementById('memorials_tributes').disabled = false;  
} else  {  
document.getElementsByName('mem_ex')[0].style.display = 'none';  
document.getElementById('memorials_tributes').disabled = true;  } }

function display_evt(selected) { 
    if (selected.checked)  {  
        document.getElementsByName('evt_ex')[0].style.display = '';  
        document.getElementById('evtCookies_donation').disabled = false;  
    } else  {  
        document.getElementsByName('evt_ex')[0].style.display = 'none';  
        document.getElementById('evtCookies_donation').disabled = true;  
        
        document.getElementById('evtCookies_Reg').value='#';
        document.getElementById('evtCookies_VIP').value='#';
        document.getElementById('evtCookies_donation').value='';
    } 
}

function display_bill(selected) { 

  
  if (selected.id == "billing_same_above_no")  {  
     document.getElementsByName('bill_ex')[0].style.display = '';  
     
     document.getElementById('txtFirstName2').className = "1|"
     document.getElementById('txtLastName2').className = "1|"
     document.getElementById('txtAddress1_2').className = "1|"
     document.getElementById('txtCity2').className = "1|"
     document.getElementById('selState2').className = "1|"
     document.getElementById('txtZip2').className = "1|zip"
     document.getElementById('txtHomePhone2').className = "1|phone"
     document.getElementById('selCountry2').className = "1|"
    
    
  }else{  
     document.getElementsByName('bill_ex')[0].style.display = 'none'; 
     
     document.getElementById('txtFirstName2').className = "0|"
     document.getElementById('txtLastName2').className = "0|"
     document.getElementById('txtAddress1_2').className = "0|"
     document.getElementById('txtCity2').className = "0|"
     document.getElementById('selState2').className = "0|"
     document.getElementById('txtZip2').className = "0|"
     document.getElementById('txtHomePhone2').className = "0|"
     document.getElementById('selCountry2').className = "0|"
      
  } 
  
  
}
     
    
     function change_code_length() { 
     if (document.getElementById("selCCType").value == "AMEX")  {  
     document.getElementById("txtCVV2").maxLength = "4";  
     document.getElementById("txtCVV2").size = "4";  } 
     else  {  
     document.getElementById("txtCVV2").maxLength = "3";  
     document.getElementById("txtCVV2").size = "3";  } }
     
     function display_help() { document.getElementsByName('help_ex')[0].style.display = ''; }
     
     function CheckNumberIn(obj)
     {
        if (obj.value == '#')
        {
            obj.value = '';
        }
     }
     function CheckNumberOut(obj)
     {
        var m = obj.value;
        m = m.replace(/^\s+|\s+$/g, '');

        if (isNaN(m) || m == "" || m == '0')
        {
            obj.value = '#';
        }  

        // Add to Total
        var reg = document.getElementById('evtCookies_Reg');
        var vip = document.getElementById('evtCookies_VIP');
        var totalBox = document.getElementById('evtCookies_donation');
        var total = 0;
        
        if (reg.value != '#')
            total += (reg.value * 75);
        if (vip.value != '#')
            total += (vip.value * 125);
        totalBox.value = total;
        // Doing this to add the event total to the grand total. 
        totalBox.focus(); 
        totalBox.blur();
     }  
     
     
  function formatNumber(num,dec,thou,pnt,curr1,curr2,n1,n2) {var x = Math.round(num * Math.pow(10,dec));if (x >= 0) n1=n2='';var y = (''+Math.abs(x)).split('');var z = y.length - dec; if (z<0) z--; for(var i = z; i < 0; i++) y.unshift('0');y.splice(z, 0, pnt); while (z > 3) {z-=3; y.splice(z,0,thou);}var r = curr1+n1+y.join('')+n2+curr2;return r;}
  
  var doc = document.forms[0];
  function MySubmit(ele, btn){
  
  
    if (Validate(ele)) {
       btn.disabled = true;
       btn.value = 'Processing...';
       ele.submit(); 
    }else{
      return false;
    }
  
  
  
  }
    function ToggleAmount(obj)
    {
        var tb = document.getElementById('txtAmount');
        var span = document.getElementById('spanAmountOther');
        tb.value = obj.value;
        if (tb.value == '')
            span.style.visibility='visible';
        else
            span.style.visibility='hidden';
    }
    
    
    
    
    function ShowSecurityDiv()
    {
        var div = document.getElementById('divSecure');
        if (div.style.visibility == 'hidden')
        {
            div.style.visibility = 'visible'; 
            var lnk = document.getElementById('lnkSecure');
            
            var gc = getCoords(lnk);
          
            div.style.left = gc.x + gc.width + 5;
            div.style.top = gc.y - 200; //Makes it kind of halfway down the link
              
        }        
 
    }    
    function CloseSecurityDiv()
    {
        document.getElementById('divSecure').style.visibility = 'hidden';
    }
    
    function ShowCycleDiv()
    {
        var div = document.getElementById('divCycle');
        if (div.style.visibility == 'hidden')
        {
            div.style.visibility = 'visible'; 
            var lnk = document.getElementById('lnkCycle');
            
            var gc = getCoords(lnk);
          
            div.style.left = gc.x + gc.width - 480;
            div.style.top = gc.y - 50; //Makes it kind of halfway down the link
              
        }        
 
    }    
    function CloseCycleDiv()
    {
        document.getElementById('divCycle').style.visibility = 'hidden';
    }
    
    function getCoords (element) {
        var coords = { x: 0, y: 0, width: element.offsetWidth, height:
        element.offsetHeight };
        while (element) {
            coords.x += element.offsetLeft;
            coords.y += element.offsetTop;
            element = element.offsetParent;
        }
        return coords;
    }
    
