function extendNav(){
	/*$('#mainnav li').hover(
		function(){
			$(this).find('ul').slideDown().end().addClass('sfhover');
		},function(){
			$(this).removeClass('sfhover');
		}
	);*/	
	$('#mainnav li').each(function(){
		$(this).mouseover(function(){
			$(this).addClass('sfhover');
			//console.log('this:',this);
			$(this).css('visibility','visible');
			//console.log('visibility:',$(this).css('visibility'));
			//console.log('display:',$(this).css('display'));
		}).mouseout(function(){
			$(this).removeClass('sfhover');
		});
	});	
}

function newsLinks(){
	var $newsbox = $('#news');
	if(!$newsbox.length){return}
	$('#news p:odd').addClass('odd');
}

$(document).ready(function(){
	newsLinks();
	extendNav();
	addBrowserClasses();
	disableLoginForm();
	popupLinks();
});

function popupLinks(){
	$('a.maplink').live("click",function(event){
		/**/
		var $link = $(this);
		var sHref = $link.attr('href');
		var winFeatures = ($link.hasClass('largerwin')) ? 'width=620,height=420,resizable=1,scrollbars=1':'width=400,height=400';
		var newWin = window.open(sHref,'newWin',winFeatures);
		if(window.focus){
			newWin.focus();
		}
		
		//alert('hi');
		event.preventDefault();
	});
}

function disableLoginForm(){
	var $f = $('form[name="login"]');
	$f.bind('submit',function(){
		$('#pw').val('');
		$('#un').val('Login is not available.');
		return false;
	});
}

function addBrowserClasses(){
	var nVersion;
	var nIntVersion;
	var nFloatVersion;
	var sBrowserClasses="";
	var sua = navigator.userAgent.toLowerCase();
	if($.browser.msie){
		nIntVersion = parseInt($.browser.version); 
		nFloatVersion = parseFloat($.browser.version);
		sBrowserClasses += ("ie " + "ie"+nIntVersion+" ie"+nFloatVersion+" ");
	}
	if($.browser.safari){
		sBrowserClasses += "webkit ";
		nIntVersion = parseInt($.browser.version); 
		nFloatVersion = parseFloat($.browser.version);
		if(sua.indexOf('safari') != -1){sBrowserClasses += ("safari safari"+ nIntVersion+" safari"+ nFloatVersion+" ")}
		if(sua.indexOf('chrome') != -1){sBrowserClasses += ("chrome chrome"+nIntVersion+"  chrome"+nFloatVersion+" ")}		
	}
	if($.browser.mozilla){
		sBrowserClasses += "mozilla ";
		nIntVersion = parseInt($.browser.version); 
		nFloatVersion = parseFloat($.browser.version);
		if(sua.indexOf('firefox') != -1){sBrowserClasses += ("firefox firefox"+nIntVersion+"  ")}
	}
	$('body').addClass(sBrowserClasses);
}

//forms

function setUpForms(){
	setupEventHandlersAndTxtHelpers();
	$('#maincopy form').submit(function(){ return validateFields(this)});
}

function setupEventHandlersAndTxtHelpers(){
	$('#maincopy label').each(function(){
		var $label = $(this);
		var sLabelFor = $label.attr('for');
		var sLabelText = $label.text();
		var $input = $('#'+sLabelFor);
		if($input.val() == sLabelText){$input.addClass('inputhelpertext')}
		$input.bind('keyup',function(){isValueValid(this)}).bind('blur',function(){inputBlur(sLabelText,$input)}).bind('focus',function(){inputFocus(sLabelText,$input)}).attr('title',sLabelText).trigger('blur');
		$label.remove();
	});
	
	$('select').each(function(){
		var $input = $(this);
		if($input.hasClass('required')){
			$input.bind('change',function(){isValueValid(this)}).bind('blur',function(){inputBlur('',$input)}).bind('focus',function(){inputFocus('',$input)});			
		}
		if($input.val()==''){$input.addClass('inputhelpertext')}
	});

}

function validateFields(oForm){
	var nErrorCount = 0;
	var $form = $(oForm);
	$form.find('input').each(function(){
		var $field=$(this);
		var sfieldID=$field.attr('id');
		var $label=$('label[for='+sfieldID+']');
		if($label.length !=0){
			if($field.val()==$label.text()){
				$field.val('');
			}
		}
	});
	$form.find(':input.required,:input.emailtype').each(function(){
		var $input = $(this);
		var goodValue = isValueValid($input);
		if(!goodValue){
			nErrorCount++;
		}
	});
	if (nErrorCount > 0){
		var $submit = $form.find(':submit,input[type=image]');
		//$submit.shake(2, 1, 300);
		if(window.console){console.log('nErrorCount:',nErrorCount)}
		return false;
	} else {
		return true;
	}
}

function isValueValid(oField){
	var $input = $(oField);
	var sInputValue = $input.val();
	var sInputTitle = $input.attr('title');
	var sInputID = $input.attr('id');
	var sValFeedbackID = 'feedback-'+sInputID;
	var $feedback = $('#'+sValFeedbackID);
	if($input.hasClass('required')){
		if((isEmptyOrWhitespace(sInputValue)) || (sInputValue==sInputTitle)){
			//if(window.console){console.log('about to add invalidvalue class to:',$input)}
			$input.addClass('invalidvalue');
			if(!$feedback.exists()){$input.after(' <span id="'+sValFeedbackID+'" class="validationfeedback"></span>')}
			$('#'+sValFeedbackID).html('This&nbsp;is&nbsp;required.')
			return false;
		} else {
			$input.removeClass('invalidvalue');
			$feedback.empty();
		}
	}
	if($input.hasClass('emailtype')){
		if(!isValidEmailAddress(sInputValue)){
			$input.addClass('invalidvalue');
			if(!$feedback.exists()){$input.after('<span id="'+sValFeedbackID+'" class="validationfeedback"></span>')}
			$('#'+sValFeedbackID).html('Please&nbsp;enter&nbsp;a&nbsp;valid&nbsp;email.')
			return false;
		} else {
			$input.removeClass('invalidvalue');
			$feedback.empty();
		}
	}
	return true;
}

function inputBlur(sLabelText,oInput){
	var $input = oInput;
	var sInputValue = $input.val();
	if(isEmptyOrWhitespace(sInputValue)){
		$input.addClass('inputhelpertext');		
		$input.val(sLabelText);
		//$input.attr('style','color:#999');
	} else {
		isValueValid(oInput);
	}
	//if(window.console){console.log('$input:',$input,' sLabelText:',sLabelText)}
}

function inputFocus(sLabelText,oInput){
	var $input = oInput;
	var sInputValue = $input.val();
	if(sInputValue == sLabelText){
		$input.val('').removeClass('inputhelpertext');
		$input.val('');
		//$input.removeAttr('style');
	}
}

//utils
function gup(name){
	//get url parameter
	name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	var regexS = "[\\?&]"+name+"=([^&#]*)";
	var regex = new RegExp( regexS );
	var results = regex.exec( window.location.href );
	if( results == null ) {
		return "";
	} else {
		return results[1];
	}
}
function gupCaseInsensitive(name){
	//get url parameter
	var currentUrl = window.location.href;
	var lowerCurrentUrl = currentUrl.toLowerCase();
	name = name.toLowerCase();
	name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
	var regexS = "[\\?&]"+name+"=([^&#]*)";
	var regex = new RegExp( regexS );
	var results = regex.exec( lowerCurrentUrl );
	if( results == null ) {
		return "";
	} else {
		return results[1];
	}
}

function removeSubString(s, t) {
  // Remove all occurrences of a token in a string
  // s  string to be processed
  // t  token to be removed
  // returns new string
  i = s.indexOf(t);
  r = "";
  if (i == -1) return s;
  r += s.substring(0,i) + removeSubString(s.substring(i + t.length), t);
  return r;
}

function replaceQueryString(url,param,value) {
    var re = new RegExp("([?|&])" + param + "=.*?(&|$)","i");
    if (url.match(re)){
        return url.replace(re,'$1' + param + "=" + value + '$2');
	} else {
        return url + '&' + param + "=" + value;
	}
}

var whitespace = " \t\n\r";
var digits = "0123456789";

function isEmpty(s) {   
	return ((s == null) || (s.length == 0))
}
function isEmptyOrWhitespace (s) {   
	var i;
    if (isEmpty(s)) return true;
    for (i = 0; i < s.length; i++) {   
        var c = s.charAt(i);
        if (whitespace.indexOf(c) == -1) return false;
    }
    return true;
}
function isValidEmailAddress(s) {
	//		/^[a-zA-Z0-9_.-]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$/
	//		/^[-a-z0-9~!$%^&*_=+}{\'?]+(\.[-a-z0-9~!$%^&*_=+}{\'?]+)*@([a-z0-9_][-a-z0-9_]*(\.[-a-z0-9_]+)*\.(aero|arpa|biz|com|coop|edu|gov|info|int|mil|museum|name|net|org|pro|travel|mobi|[a-z][a-z])|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,5})?$/i
	var temp = s.replace(/\s/g, "")
	return (temp.match(/^[\w\.\-\']+\x40[\w\.\-]+\.\w{2,3}$/)) && 
			temp.charAt(0) != "." && !(temp.match(/\.\./))
}

jQuery.fn.exists = function(){return jQuery(this).length>0;}

jQuery.fn.shake = function(intShakes /*Amount of shakes*/, intDistance /*Shake distance*/, intDuration /*Time duration*/) {
	this.each(function() {
		$(this).css({position:'relative'});
		for (var x=1; x<=intShakes; x++) {
			$(this).animate({left:(intDistance*-1)}, (((intDuration/intShakes)/4)))
				.animate({left:intDistance}, ((intDuration/intShakes)/2))
				.animate({left:0}, (((intDuration/intShakes)/4)));
		}
	});
	return this;
};

if(typeof Array.indexOf != 'function') {
	Array.prototype.indexOf = function(f, s) {
		if (typeof s == 'undefined') s = 0;
		for (var i = s; i < this.length; i++) {
			if (f === this[i]) return i;
		}
		return -1;
	}
}
