/*
 * author: jeff pratt
 * function: inputAllowed(e,obj,len)
 * description: Only allow a user to enter 'len' number of characters
 * e = event
 * obj = the object
 * len = number of chars to allow
 *
 */
function inputAllowed(e,obj,len)
{
	if(window.event) // IE
  	{
  		keynum = e.keyCode;
  	}
	else if(e.which) // Netscape/Firefox/Opera
  	{
  		keynum = e.which;
  	}

	var str = document.getElementById(obj.id);
	
	// Allow only 'len' many characters, along with arrow keys, delete, and backspace
	if(str.value.length < len || (keynum >= 37 && keynum <= 40) || (keynum == 8 || keynum == 46))
	{
		return true;
	}
	else
	{
    	return false;
	}
}

/* 
 * author: jeff pratt
 * function: inputExists(obj)
 * description: If the 'obj' contains user input, return true
 * obj = the object
 *
 */
function inputExists(obj)
{
	var str = document.getElementById(obj.id);
	
	if(str.value.length > 0)
	{
		return true;
	}
	else
	{
    	return false;
	}
}
/*-----------------------------------------------------------
    Toggles element's display value
    Input: any number of element id's
    Output: none 
---------------------------------------------------------*/
function toggleDisp() {
    for (var i=0;i<arguments.length;i++){
        var d = $(arguments[i]);
        if (d.style.display == 'none')
            d.style.display = 'block';
        else
            d.style.display = 'none';
    }
}
/*-----------------------------------------------------------
    Toggles tabs - Closes any open tabs, and then opens current tab
    Input:     1.The number of the current tab
                    2.The number of tabs
                    3.(optional)The number of the tab to leave open
                    4.(optional)Pass in true or false whether or not to animate the open/close of the tabs
    Output: none 
    ---------------------------------------------------------*/
function toggleTab(num,numelems,opennum,animate) {
    if ($('tabContent'+num).style.display == 'none'){
        for (var i=1;i<=numelems;i++){
            if ((opennum == null) || (opennum != i)){
                var temph = 'tabHeader'+i;
                var h = $(temph);
                if (!h){
                    var h = $('tabHeaderActive');
                    h.id = temph;
                }
                var tempc = 'tabContent'+i;
                var c = $(tempc);
                if(c.style.display != 'none'){
                    if (animate || typeof animate == 'undefined')
                        Effect.toggle(tempc,'blind',{duration:0.2, queue:{scope:'menus', limit: 3}});
                    else
                        toggleDisp(tempc);
                }
            }
        }
        var h = $('tabHeader'+num);
        if (h)
            h.id = 'tabHeaderActive';
        h.blur();
        var c = $('tabContent'+num);
        c.style.marginTop = '2px';
        if (animate || typeof animate == 'undefined'){
            Effect.toggle('tabContent'+num,'blind',{duration:0.2, queue:{scope:'menus', position:'end', limit: 3}});
        }else{
            toggleDisp('tabContent'+num);
        }
    }
}


/*open and closing of the left-hand side menu */
var toggleAdminMenu = {
	init : function(sContainerClass, sHiddenClass) {
		if (!document.getElementById || !document.createTextNode) {return;} // Check for DOM support
		var arrMenus = this.getElementsByClassName(document, 'ul', sContainerClass);
		var arrSubMenus, oSubMenu, oLink;
		for (var i = 0; i < arrMenus.length; i++) {
			arrSubMenus = arrMenus[i].getElementsByTagName('ul');
			for (var j = 0; j < arrSubMenus.length; j++) {
				oSubMenu = arrSubMenus[j];
				oLink = oSubMenu.parentNode.getElementsByTagName('a')[0];
				oLink.ondblclick = function(){toggleMenu.toggle(this.parentNode.getElementsByTagName('ul')[0], sHiddenClass); return false;}
				this.toggle(oSubMenu, sHiddenClass);
			}
		}
	},
	toggle : function(el, sHiddenClass) {
		var oRegExp = new RegExp("(^|\\s)" + sHiddenClass + "(\\s|$)");
		el.className = (oRegExp.test(el.className)) ? el.className.replace(oRegExp, '') : el.className + ' ' + sHiddenClass; // Add or remove the class name that hides the element
	},
/* addEvent function from http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html */
	addEvent : function(obj, type, fn) {
		if (obj.addEventListener)
			obj.addEventListener(type, fn, false);
		else if (obj.attachEvent) {
			obj["e"+type+fn] = fn;
			obj[type+fn] = function() {obj["e"+type+fn](window.event);}
			obj.attachEvent("on"+type, obj[type+fn]);
		}
	},
/*
Written by Jonathan Snook, http://www.snook.ca/jonathan
Add-ons by Robert Nyman, http://www.robertnyman.com
*/
	getElementsByClassName : function(oElm, strTagName, strClassName){
	    var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
	    var arrReturnElements = new Array();
	    strClassName = strClassName.replace(/\-/g, "\\-");
	    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	    var oElement;
	    for(var i=0; i<arrElements.length; i++){
	        oElement = arrElements[i];
	        if(oRegExp.test(oElement.className)){
	            arrReturnElements.push(oElement);
	        }   
	    }
	    return (arrReturnElements)
	}
};
toggleAdminMenu.addEvent(window, 'load', function(){toggleAdminMenu.init('admin_menu','hidden');});

var toggleMenu = {
	init : function(sContainerClass, sHiddenClass) {
		if (!document.getElementById || !document.createTextNode) {return;} // Check for DOM support
		var arrMenus = this.getElementsByClassName(document, 'ul', sContainerClass);
		var arrSubMenus, oSubMenu, oLink;
		for (var i = 0; i < arrMenus.length; i++) {
			arrSubMenus = arrMenus[i].getElementsByTagName('ul');
			for (var j = 0; j < arrSubMenus.length; j++) {
				oSubMenu = arrSubMenus[j];
                                if(oSubMenu.id != 'home' && oSubMenu.id != 'misc' && oSubMenu.id != 'program') {
                                    oLink = oSubMenu.parentNode.getElementsByTagName('a')[0];
                                    oLink.onclick = function(){toggleMenu.toggle(this.parentNode.getElementsByTagName('ul')[0], sHiddenClass); return false;}
                                    if(oSubMenu.id != 'current') {
                                        this.toggle(oSubMenu, sHiddenClass);
                                    }
                                }
			}
		}
	},
	toggle : function(el, sHiddenClass) {
		var oRegExp = new RegExp("(^|\\s)" + sHiddenClass + "(\\s|$)");
		el.className = (oRegExp.test(el.className)) ? el.className.replace(oRegExp, '') : el.className + ' ' + sHiddenClass; // Add or remove the class name that hides the element
	},
/* addEvent function from http://www.quirksmode.org/blog/archives/2005/10/_and_the_winner_1.html */
	addEvent : function(obj, type, fn) {
		if (obj.addEventListener)
			obj.addEventListener(type, fn, false);
		else if (obj.attachEvent) {
			obj["e"+type+fn] = fn;
			obj[type+fn] = function() {obj["e"+type+fn](window.event);}
			obj.attachEvent("on"+type, obj[type+fn]);
		}
	},
/*
Written by Jonathan Snook, http://www.snook.ca/jonathan
Add-ons by Robert Nyman, http://www.robertnyman.com
*/
	getElementsByClassName : function(oElm, strTagName, strClassName){
	    var arrElements = (strTagName == "*" && document.all)? document.all : oElm.getElementsByTagName(strTagName);
	    var arrReturnElements = new Array();
	    strClassName = strClassName.replace(/\-/g, "\\-");
	    var oRegExp = new RegExp("(^|\\s)" + strClassName + "(\\s|$)");
	    var oElement;
	    for(var i=0; i<arrElements.length; i++){
	        oElement = arrElements[i];
	        if(oRegExp.test(oElement.className)){
	            arrReturnElements.push(oElement);
	        }   
	    }
	    return (arrReturnElements)
	}
};
toggleMenu.addEvent(window, 'load', function(){toggleMenu.init('menu','hidden');});


/******* newer stuff *********/

function showCityState() {
	$F('player_location_id') == "" ? $('city_container').show() : $('city_container').hide();
}

function checkSignupForm() {
	var email = $F('player_email_address');
	var emailFilter = /^([a-zA-Z0-9_.-])+@(([a-zA-Z0-9-])+.)+([a-zA-Z0-9]{2,4})+$/;

	var cityState = $F('player_mailing_address_2');
	var cityStateFilter = /^([a-zA-Z]{4,})\s*,\s*([a-zA-Z]{2})/;
	
	var valid = false;
	var errorMessages = [];
	
	$F('player_first_name') != "" ? valid = true : errorMessages.push("First Name can't be blank.");
	$F('player_last_name') != "" ? valid = true : errorMessages.push("Last Name can't be blank.");
	email && emailFilter.test(email) ? valid = true : errorMessages.push("Email address is invalid.");
	cityState && cityStateFilter.test(cityState) ? valid = true : errorMessages.push("City, State is invalid.");
	
	if (valid && errorMessages.length > 0) valid = false;
	$('other_errors').innerHTML = errorMessages.join("<br/>");
	valid ? $('other_errors').hide() : $('other_errors').show();
	
	return valid;
}

function displayDoublesFormStuff() {
  switch ($('doubles_interest').selectedIndex) {
    case 0:
      $('extra_doubles_stuff').hide();
      $('some_doubles_stuff').hide();
      $('extra_doubles_note').hide();
    break;
    case 1:
      $('some_doubles_stuff').show();
      $('extra_doubles_stuff').show();
      $('extra_doubles_note').hide();
    break;
    case 2:
      $('extra_doubles_stuff').hide();
      $('some_doubles_stuff').show();
      $('extra_doubles_note').show();
    break;
  }
}

function checkForBlankReferrals() {
  var blanks = $F($('refer_email_1')).blank() && $F($('refer_email_2')).blank() && $F($('refer_email_3')).blank() && $F($('refer_email_4')).blank() &&
  $F($('refer_email_5')).blank();
  if (blanks) {
    alert('Please fill in at least one email address.');
    return false;
  }
  else {
    $('referral_form').submit();
  }
}

function makeSureSomeoneIsChecked() {
  var checked = jQuery("input[type=checkbox]:checked").length > 0;
  if (!checked) alert('Please select at least one player to email.');
  return checked;
}


/******** facebook ***********/

function facebookButtonLogin() {
  facebookSessionResponse({session: FB.getSession()});
}

function linkAccountButton() {
  var session = FB.getSession();
  jQuery('#fb_link_form #session').val(Object.toJSON(session));
  jQuery('#fb_link_form').submit();
}

// handle a session response from any of the auth related calls
function facebookSessionResponse(response) {
  if (!document.getElementById('logged_in_user') && response.session) {
    jQuery('#session').val(Object.toJSON(response.session));
    jQuery('#fb_login_form').submit();
  }
}

/******** profile ***********/

function showRotationSpinner(image_div) {
  jQuery('#'+image_div+' img').after('<div class="spinner">Rotating...</div>');
  jQuery('#'+image_div+' .spinner').fadeIn();
}

// rotate in 90 degree increments
function rotateImage(image_div) {
  images_to_rotate = [jQuery('#'+image_div+' img')];
  jQuery('#'+image_div+' img').next().remove();
  images_to_rotate.push(jQuery('.user_image'));
  images_to_rotate.each(function(image){
    image.data('rotation') ? image.data('rotation', image.data('rotation') + 90) : image.data('rotation', 90);
    image.css('-webkit-transform', 'rotate('+ image.data('rotation') +'deg)');
    image.css('-moz-transform', 'rotate('+ image.data('rotation') +'deg)');
    image.css('-o-transform','rotate('+ image.data('rotation') +'deg)');
    image.css('filter', 'progid:DXImageTransform.Microsoft.BasicImage(rotation='+ image.data('rotation')/90 +')');
    image.css('rotation', 'rotate('+ image.data('rotation') +'deg)');
  });
}