var lastOpt = '';
var lastObj = '';
var holderArray = new Array();

function countChars(el, counter){		
	if( el.value.length > el.getAttribute('maxLength')*1 ){ el.value = el.value.substring(0,el.getAttribute('maxLength')*1); }
	if(counter) document.getElementById(counter).innerHTML = el.value.length;
}

function checkMember(){
	var member_id = document.getElementById('member_profile_id');
    
    if( member_id.value == '' ){
    	alert('You must select a member name to sign them up for this event.');
        return false;
    }
    
    return true;
}

function setCurSelect(obj){
	if( lastOpt == ''  ){
    	//alert('b: ' + lastObj + ' - ' + lastOpt);
        
		lastOpt = obj.selectedIndex;
        lastObj = obj.id;
        
        //alert('a: ' + lastObj + ' - ' + lastOpt);
    }
}

function checkDuplicates( curOpt ){
	var sel = document.getElementsByTagName('SELECT');

	// loop through all select options
	for( var i = 0; i < sel.length; i++ ){
		var selOpt = sel[i].options[sel[i].selectedIndex];

		// select option - team drop down
		if( selOpt.parentNode.id.substr(0, 4) == 'team' ){
        	
            // duplicate found to exclude blank player slots
        	if( selOpt.value == curOpt.value && selOpt.parentNode.id != curOpt.id && selOpt.value != '' ){
            
            	var msg = "The team player '" + selOpt.text + "' is already assigned to '" + selOpt.parentNode.getAttribute("teamInfo") + "'.\n\n";
                    msg += "Would you like to switch these two team players?";
                
                // it is confirmed - switch the two player slots    
                if( confirm(msg) ){
                	//alert('before: ' + sel[i].id + ' - ' + sel[i].selectedIndex);
                    //alert('blo: ' + lastOpt);
                	sel[i].selectedIndex = lastOpt;
                    //alert('alo: ' + lastOpt);
                    
                    // update player handicap
                    var tmpHandicap = document.getElementById(selOpt.parentNode.id.replace('player', 'handicap')).value; // set matched selection to tmp var
                    document.getElementById(selOpt.parentNode.id.replace('player', 'handicap')).value = (sel[i].options[lastOpt].getAttribute("handicap") ? sel[i].options[lastOpt].getAttribute("handicap") : 0); // current selection
                    document.getElementById(curOpt.id.replace('player', 'handicap')).value = tmpHandicap;
                }else{
                	curOpt.selectedIndex = lastOpt;
                    
                    //handicap stays the same no change
                    document.getElementById(curOpt.id.replace('player', 'handicap')).value = (sel[i].options[lastOpt].getAttribute("handicap") ? sel[i].options[lastOpt].getAttribute("handicap") : 0);
                }
                
                break;
             }
		}else{
        	if( curOpt.value != '' )
				document.getElementById(curOpt.id.replace('player', 'handicap')).value = curOpt.options[curOpt.selectedIndex].getAttribute("handicap");
    		else
            	document.getElementById(curOpt.id.replace('player', 'handicap')).value = 0;
        }
	}       
    
    // recalculate handicap averages
    var inpt = document.getElementsByTagName('INPUT');
    var handicapTotal = 0;
    var x = 0;
    var perTeam = 4;
    
    for( var i = 0; i < inpt.length; i++ ){
    	if( inpt[i].id.substr(0, 4) == 'team' && inpt[i].getAttribute("playerHandicap") ){
        	var tmp = inpt[i].id.split('_');
            
            if( inpt[i].value == '' )
            	inpt[i].value = 0;
            
            if( inpt[i].value == 0 && document.getElementById( inpt[i].id.replace('handicap', 'player') ).selectedIndex == 0 ) 
            	--perTeam;
            
            handicapTotal += (inpt[i].value * 1);
            x++;
            
            if( x % 4 == 0 && x != 0 ){
           		x = 0;
                document.getElementById(tmp[0] + '_' + tmp[1] + '_avgHandicap').value = (handicapTotal / (perTeam > 0 ? perTeam : 4) ).toFixed(2);
                handicapTotal = 0;
                perTeam = 4;
            }
        }
    }
    
    //turn off focus of last changed item
    lastOpt = '';
    document.getElementById('reGenerate').focus();
}

function memberLogin(){
	var userId = document.getElementById('userId');
    var password = document.getElementById('password');
    
    var urlString = 'userId=' + userId.value + '&password=' + password.value; 
    
    var myConn = new XHConn();
	if (!myConn) alert("XMLHTTP not available. Try a newer/better browser.");
	
	var fnWhenDone = function (oXML){	
       	var xml = oXML.responseXML;

        if( xml.selectSingleNode("login/status/text()").nodeValue == 'Valid' ){
        	var cookie_name = xml.selectSingleNode("login/cookie_name/text()").nodeValue;
            var cookie_value = xml.selectSingleNode("login/encrypted_user_id/text()").nodeValue;
            var num_groups = xml.selectSingleNode("login/num_groups/text()").nodeValue;
            
            if( num_groups == 1 ){
	        	setCookie( cookie_name, cookie_value, 0, "/", "", 0 );
    	    	window.location.href = xml.selectSingleNode("login/url/text()").nodeValue;
            }else{
            	setCookie( 'Group_Select', cookie_value, 0, "/", "", 0 );
                window.location.href = xml.selectSingleNode("login/url/text()").nodeValue;
            }
        }else{
        	alert('Error: User Id and/or Password are invalid.');
        }
	};
	
	myConn.connect("/login.php", "GET", urlString, fnWhenDone);	
}

function memberGroupSelect(userId, password, groupProfileId){    
    var urlString = 'userId=' + userId + '&password=' + password + '&groupProfileId=' + groupProfileId; 
    
    var myConn = new XHConn();
	if (!myConn) alert("XMLHTTP not available. Try a newer/better browser.");
	
	var fnWhenDone = function (oXML){	
       	var xml = oXML.responseXML;

        var cookie_name = xml.selectSingleNode("login/cookie_name/text()").nodeValue;
        var cookie_value = xml.selectSingleNode("login/encrypted_user_id/text()").nodeValue;
        
        setCookie( cookie_name, cookie_value, 0, "/", "", 0 );
        window.location.href = xml.selectSingleNode("login/url/text()").nodeValue;
	};
	
	myConn.connect("/login_group.php", "GET", urlString, fnWhenDone);	
}

function checkPairingDate(){
	var game_date = document.getElementById('game_date')
    var course_id = document.getElementById('course_id');
    var team_pairing_id = document.getElementById('team_pairing_id');
    
	var urlString = 'generateTeams=1&team_pairing_id=' + team_pairing_id.value + '&game_date=' + game_date.value + '&course_id=' + course_id.value;
		
	var myConn = new XHConn();
	if (!myConn) alert("XMLHTTP not available. Try a newer/better browser.");
	
	var fnWhenDone = function (oXML){	
        if( oXML.responseText )
        	alert(oXML.responseText);
        else
        	document.randomizeTeams.submit();
	};
	
	myConn.connect("/golfcaptain/includes/inc.team_setup_check.php", "POST", urlString, fnWhenDone);	
}

function setCookie( name, value, expires, path, domain, secure ){
    // set time, it's in milliseconds
    var today = new Date();
    today.setTime( today.getTime() );
    
    if ( expires ) expires = expires * 1000 * 60 * 60 * 24;
    
    var expires_date = new Date( today.getTime() + (expires) );
    
    document.cookie = name + "=" +escape( value ) +
    ( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) + 
    ( ( path ) ? ";path=" + path : "" ) + 
    ( ( domain ) ? ";domain=" + domain : "" ) +
    ( ( secure ) ? ";secure" : "" );
}

function getCookie( name ) {
    var start = document.cookie.indexOf( name + "=" );
    var len = start + name.length + 1;
    
    if ( ( !start ) &&
    ( name != document.cookie.substring( 0, name.length ) ) )
    {
    return null;
    }
    
    if ( start == -1 ) return null;
    
    var end = document.cookie.indexOf( ";", len );
    
    if ( end == -1 ) end = document.cookie.length;
    
    return unescape( document.cookie.substring( len, end ) );
}

function deleteCookie( name, path, domain ){
    if ( Get_Cookie( name ) ) document.cookie = name + "=" +
    ( ( path ) ? ";path=" + path : "") +
    ( ( domain ) ? ";domain=" + domain : "" ) +
    ";expires=Thu, 01-Jan-1970 00:00:01 GMT";
}

function setCalendar(calId, setId, month, day, year){
	var calendar = document.getElementById(calId);
	var set_id = document.getElementById(setId);

	calendar.style.display = 'none';
    set_id.value = month + '/' + day + '/' + year;
}

function showCalendar(calId, setId, dateValue){
	var calendar = document.getElementById(calId);
    
    if( dateValue != 'Select Date' ){
	    var d = dateValue.split('/');
	    var urlString = 'calId=' + calId + '&m=' + d[0] + '&d=' + d[1] + '&y=' + d[2] + '&setId=' + setId;
    }else{
    	var urlString = 'calId=' + calId + '&m=&d=&y=&setId=' + setId;
    }

    var myConn = new XHConn();
    if (!myConn) alert("XMLHTTP not available. Try a newer/better browser.");
    
    var fnWhenDone = function (oXML){	
        calendar.innerHTML = oXML.responseText;
        calendar.style.display = '';
        
        P7_Snap(calId + 'Img', calId , 15, 0);
    };
    
    myConn.connect("/_includes/inc.calendar.php", "GET", urlString, fnWhenDone);
}

function showCalendarRestrict(calId, setId, dateValue){   
    var calendar = document.getElementById(calId);
    
    if( dateValue != 'Select Date' ){
	    var d = dateValue.split('/');
	    var urlString = 'calId=' + calId + '&m=' + d[0] + '&d=' + d[1] + '&y=' + d[2] + '&setId=' + setId;
    }else{
    	var urlString = 'calId=' + calId + '&m=&d=&y=&setId=' + setId;
    }
    
    var myConn = new XHConn();
    if (!myConn) alert("XMLHTTP not available. Try a newer/better browser.");
    
    var fnWhenDone = function (oXML){	
        calendar.innerHTML = oXML.responseText;
        calendar.style.display = '';
        
        P7_Snap(calId + 'Img', calId , 15, 0);
    };
    
    myConn.connect("/_includes/inc.restricted_calendar.php", "GET", urlString, fnWhenDone);	  	
}

function checkEmailAddress( userId, pageName, btnId ){
	var member_number = ( document.getElementById('member_number') ? document.getElementById('member_number') : '' );
	var email_address = document.getElementById('email_address');
    var password = ( document.getElementById('group_password') ? document.getElementById('group_password') : '' );
       
    var urlString = 'userId=' + userId + '&pageName=' + pageName + '&emailAddress=' + email_address.value + '&member_number=' + member_number.value + '&password=' + ( document.getElementById('group_password') ? password.value : '' );
    
    var myConn = new XHConn();
    if (!myConn) alert("XMLHTTP not available. Try a newer/better browser.");
    
    var fnWhenDone = function (oXML){	
    	//alert(oXML.responseText);
    	var xml = oXML.responseXML;
        
    	if( xml.selectSingleNode("status/text()").nodeValue == 'Valid' ){
        	if( document.getElementById(btnId) ) document.getElementById(btnId).disabled = false;
            if( document.getElementById('emailCheck') ) document.getElementById('emailCheck').innerHTML = '';
            if( document.getElementById('emailPassCheck') ) document.getElementById('emailPassCheck').innerHTML = '';
        }else{
        	if( xml.selectSingleNode("status/text()").nodeValue.search(/invalid/i) == -1 ){
        		if( document.getElementById(btnId) ) document.getElementById(btnId).disabled = true;

				if( document.getElementById('emailPassCheck') ){
                	document.getElementById('emailPassCheck').style.display = '';
        			document.getElementById('emailPassCheck').innerHTML = xml.selectSingleNode("status/text()").nodeValue;
                    
                    if( document.getElementById('emailCheck') ) document.getElementById('emailCheck').innerHTML = '';
                }else{                
	                document.getElementById('emailCheck').style.display = '';
        			document.getElementById('emailCheck').innerHTML = xml.selectSingleNode("status/text()").nodeValue;
                }
            }else{
            	if( document.getElementById(btnId) ) document.getElementById(btnId).disabled = true;
                document.getElementById('emailCheck').style.display = '';
        		document.getElementById('emailCheck').innerHTML = xml.selectSingleNode("status/text()").nodeValue;
                
                                
                if( document.getElementById('emailPassCheck') ) document.getElementById('emailPassCheck').innerHTML = '';
            }
        }
    };
    
    myConn.connect("/_includes/inc.check_email.php", "GET", urlString, fnWhenDone);	  
}

function checkMemberNumber( btnId ){
	var member_number = document.getElementById('member_number');
    var email_address = document.getElementById('email_address');
    var urlString = 'emailAddress=' + email_address.value + '&memberNumber=' + member_number.value;
    
    var myConn = new XHConn();
    if (!myConn) alert("XMLHTTP not available. Try a newer/better browser.");
    
    var fnWhenDone = function (oXML){	
    	var xml = oXML.responseXML;

    	if( xml.selectSingleNode("status/text()").nodeValue == 'Invalid' ){
        	var msg  = "Error:\n";
            	msg += "The member profile that you are editing is the member profile of the Golf Captain.\n";
            	msg += "Your member number in your profile cannot match the your golf captain profile password.";
           
            alert(msg);
            
        	document.getElementById(btnId).disabled = true;
            member_number.focus();
        }else{
        	document.getElementById(btnId).disabled = false;
            
                        
            if( document.getElementById('email_address').value != '' ){ checkEmailAddress( '', 'memberProfile', 'save' ); }
        }
    };
    
    myConn.connect("/_includes/inc.check_member_number.php", "GET", urlString, fnWhenDone);	  
}

function setUserId(){
	var emailAddress = document.getElementById('email_address');
    var groupUserId = document.getElementById('group_user_id');
    
    groupUserId.value = emailAddress.value;
}

function checkRequired(){
	var errors = new Array();
	var elAll = document.getElementsByTagName('*');
    var found = false;
    
    // check required items;
    for(var i = 0; i < elAll.length; i++){
    	found = false;
        
    	if( elAll[i].getAttribute("required") == 'true' ){            
            if( elAll[i].getAttribute("preText") ){
            	if( elAll[i].value == elAll[i].getAttribute("preText") || elAll[i].value == '' ){
            		errors.push("  " + elAll[i].getAttribute("txtLabel"));
				}                    
            }else{
            	// check grouped required items;
            	if( elAll[i].getAttribute("group") ){                    
                    if( !checkGroups( elAll[i].getAttribute("group") ) ){
                    	var txtGroup = elAll[i].getAttribute("txtLabel");
                        
                    	for(x = 0; x < errors.length; x++){
                        	if( errors[x] == "  " + txtGroup ){
                            	found = true;
                                break;
							}
						}
                        
                        if( !found )        
	                        errors.push("  " + txtGroup);
					}
                }else{
	                if( elAll[i].value == '' ){
    	                errors.push("  " + elAll[i].getAttribute("txtLabel"));
        	        }else{
                    	if( elAll[i].id.search(/password/) != -1 ){
                            if( elAll[i].value != document.getElementById('confirm_password').value ){
                                errors.push("  Golf Captain's Password and Confirm Password doesn't match");
                            }
                        }
                        
                        if( elAll[i].id.search(/member_number/) != -1 ){
                        	if( document.getElementById('group_password') ){
                                if( elAll[i].value == document.getElementById('group_password').value ){
                                    errors.push("  Member Number and Golf Captain's Password cannot be the same");
                                }
                            }
                        }
                    }
				}
           }
        }
    }
    
    if( errors.length > 0 ){
    	var msg = "Error: The following required* fields are missing:\n\n";
        	msg += errors.join("\n");
            
            alert(msg);
            return false;
    }   	
        
    return true;
}

function checkGroups( groupId ){
	var elAll = document.getElementsByTagName('*');
    var isChecked = false;
    
    for(var i = 0; i < elAll.length; i++){
    	if( elAll[i].getAttribute("required") == 'true' ){            
            if( elAll[i].getAttribute("group") == groupId ){
            	if( elAll[i].checked ){
                    isChecked = true;
                    var txtLabel = elAll[i].getAttribute("txtLabel");
                    break;
				}
            }
		}
	}  

	return isChecked;     
}

function toggleCommitDays( memberId, obj, sURL ){    
	var urlString = 'status=' + obj.value + '&memberId=' + memberId;
    
    var myConn = new XHConn();
    if (!myConn) alert("XMLHTTP not available. Try a newer/better browser.");
    
    var fnWhenDone = function (oXML){	
		/* refresh page */
		window.location.href = sURL;
    };
    
    myConn.connect("/_includes/inc.toggle_commit_days.php", "GET", urlString, fnWhenDone);	  	
}

function XHConn()
{
  var xmlhttp, bComplete = false;
  try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); }
  catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); }
  catch (e) { try { xmlhttp = new XMLHttpRequest(); }
  catch (e) { xmlhttp = false; }}}
  if (!xmlhttp) return null;
  this.connect = function(sURL, sMethod, sVars, fnDone)
  {
    if (!xmlhttp) return false;
    bComplete = false;
    sMethod = sMethod.toUpperCase();

    try {
      if (sMethod == "GET")
      {
        xmlhttp.open(sMethod, sURL+"?"+sVars, true);
        sVars = "";
      }
      else
      {
        xmlhttp.open(sMethod, sURL, true);
        xmlhttp.setRequestHeader("Method", "POST "+sURL+" HTTP/1.1");
        xmlhttp.setRequestHeader("Content-Type",
          "application/x-www-form-urlencoded");
      }
      xmlhttp.onreadystatechange = function(){
        if (xmlhttp.readyState == 4 && !bComplete)
        {
          bComplete = true;
          fnDone(xmlhttp);
        }};
      xmlhttp.send(sVars);
    }
    catch(z) { return false; }
    return true;
  };
  return this;
}

// mozXPath [http://km0ti0n.blunted.co.uk/mozxpath/] km0ti0n@gmail.com
// Code licensed under Creative Commons Attribution-ShareAlike License 
// http://creativecommons.org/licenses/by-sa/2.5/
if( document.implementation.hasFeature("XPath", "3.0") ){
	if( typeof XMLDocument == "undefined" ){ XMLDocument = Document; }
  XMLDocument.prototype.selectNodes = function(cXPathString, xNode){
    if( !xNode ) { xNode = this; } 
		var oNSResolver = this.createNSResolver(this.documentElement)
		var aItems = this.evaluate(cXPathString, xNode, oNSResolver, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null)
		var aResult = [];
		for( var i = 0; i < aItems.snapshotLength; i++){aResult[i] =  aItems.snapshotItem(i);	}
		return aResult;
	}
	XMLDocument.prototype.selectSingleNode = function(cXPathString, xNode){
		if( !xNode ) { xNode = this; } 
		var xItems = this.selectNodes(cXPathString, xNode);
		if( xItems.length > 0 ){return xItems[0];	}
		else{return null;	}
	}
	Element.prototype.selectNodes = function(cXPathString){
		if(this.ownerDocument.selectNodes){	return this.ownerDocument.selectNodes(cXPathString, this);}
		else{throw "For XML Elements Only";}
	}
	Element.prototype.selectSingleNode = function(cXPathString){	
		if(this.ownerDocument.selectSingleNode){return this.ownerDocument.selectSingleNode(cXPathString, this);	}
		else{throw "For XML Elements Only";}
	}
}

//Snap Junk
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 P7_Snap() { //v2.62 by PVII
  var x,y,ox,bx,oy,p,tx,a,b,k,d,da,e,el,args=P7_Snap.arguments;a=parseInt(a);
  for (k=0; k<(args.length-3); k+=4)
   if ((g=MM_findObj(args[k]))!=null) {
    el=eval(MM_findObj(args[k+1]));
    a=parseInt(args[k+2]);b=parseInt(args[k+3]);
    x=0;y=0;ox=0;oy=0;p="";tx=1;da="document.all['"+args[k]+"']";
    if(document.getElementById) {
     d="document.getElementsByName('"+args[k]+"')[0]";
     if(!eval(d)) {d="document.getElementById('"+args[k]+"')";if(!eval(d)) {d=da;}}
    }else if(document.all) {d=da;} 
    if (document.all || document.getElementById) {
     while (tx==1) {p+=".offsetParent";
      if(eval(d+p)) {x+=parseInt(eval(d+p+".offsetLeft"));y+=parseInt(eval(d+p+".offsetTop"));
      }else{tx=0;}}
     ox=parseInt(g.offsetLeft);oy=parseInt(g.offsetTop);var tw=x+ox+y+oy;
     if(tw==0 || (navigator.appVersion.indexOf("MSIE 4")>-1 && navigator.appVersion.indexOf("Mac")>-1)) {
      ox=0;oy=0;if(g.style.left){x=parseInt(g.style.left);y=parseInt(g.style.top);
      }else{var w1=parseInt(el.style.width);bx=(a<0)?-5-w1:-10;
      a=(Math.abs(a)<1000)?0:a;b=(Math.abs(b)<1000)?0:b;
      x=document.body.scrollLeft + event.clientX + bx;
      y=document.body.scrollTop + event.clientY;}}
   }else if (document.layers) {x=g.x;y=g.y;var q0=document.layers,dd="";
    for(var s=0;s<q0.length;s++) {dd='document.'+q0[s].name;
     if(eval(dd+'.document.'+args[k])) {x+=eval(dd+'.left');y+=eval(dd+'.top');break;}}}
   if(el) {e=(document.layers)?el:el.style;
   var xx=parseInt(x+ox+a),yy=parseInt(y+oy+b);
   if(navigator.appName=="Netscape" && parseInt(navigator.appVersion)>4){xx+="px";yy+="px";}
   if(navigator.appVersion.indexOf("MSIE 5")>-1 && navigator.appVersion.indexOf("Mac")>-1){
    xx+=parseInt(document.body.leftMargin);yy+=parseInt(document.body.topMargin);
    xx+="px";yy+="px";}e.left=xx;e.top=yy;}}
}
//End Snap Junk