/*
File: tripwire.js
Description: Contains several functions used on the site (ie. callouts, menus, etc.)
- expand and collapse for the internationl site
- controls the superfish drop down menus
- slideshow script for quick links, featured resources, etc.
- handles tab modules
*/

$(function(){

	// scroll the page to display the international section AND control "plus" and "minus" sign.
	$('#util-international').toggle(function() {
		$("#util-regions").remove().prependTo("#placeholder-regions").slideToggle('swing');
		$("#expandSign").html('[&minus;]');
	}, function() {
		$("#util-regions").slideToggle('swing');
		$("#expandSign").html('[+]');
	});

	// Watermark function for inputs.
	// Put class="swap_value" on all inputs needing watermark
	$(function(){
		swapValues=[];
		$(".swap_value").each(function(i){
			swapValues[i]=$(this).val();
			$(this).focus(function(){
				if( $(this).val()==swapValues[i] ){
					$(this).val("")
				}
			}).blur(function(){
				if( $.trim($(this).val())=="" ){
					$(this).val(swapValues[i])
				}
			})
		})
	});
	
	// form validation for signup form
	$("#signup-form").validate({
		rules: {
			fname: { required: true, minlength:2, maxlength:255 },
			lname: { required: true, minlength:2, maxlength:255 },
			zip:   { required: true, minlength:2, maxlength:50 },
			company:  { required: true, minlength:2, maxlength:500 },
			title:    { required: true, minlength:2, maxlength:500 },
			email:    { required: true },
			phone:    { required: true, minlength:2, maxlength:100 }
		},
		messages: {
			fname: { required: "Please specify your first name.",
						minlength: "First name should be between 2 - 255 characters <br/>in length.",
						maxlength: "First name should be between 2 - 255 characters <br/>in length." 
					},
			lname: { required: "Please specify your last name.",
						minlength: "Last name should be between 2 - 255 characters <br/>in length.",
						maxlength: "Last name should be between 2 - 255 characters <br/>in length."
					},
			state: "Please specify your state.",
			country: "Please specify your country.",
			zip: { required: "Please specify your zip/post code.",
					minlength: "Zip/post code should be between 2 - 50 characters <br/>in length.",
					maxlength: "Zip/post code should be between 2 - 50 characters in length." 
				},
			company: { required: "Please specify your company.",
					minlength: "Company should be between 2 - 500 characters <br/>in length.",
					maxlength: "Company should be between 2 - 500 characters <br/>in length." 
				},
			title: { required: "Please specify your title.",
						minlength: "Title should be between 2 - 500 characters <br/>in length.",
						maxlength: "Title should be between 2 - 500 characters <br/>in length." 
					},
			email: {
				required: "Please specify your email address.",
				email: "Please enter a valid email address."
			},
			phone: { required: "Please specify your phone.",
						minlength: "Phone should be between 2 - 100 characters <br/>in length.",
						maxlength: "Phone should be between 2 - 100 characters <br/>in length." 
					}
		},
		onkeyup: false
	});
	
	$("#country").change(function() {
		var selectedItem = $('#country').val();
		if(selectedItem == 'USA' || selectedItem == 'Canada' ) { 
			//alert(selectedItem);
			$("#state").rules("add", {
				required: true
			});
			$("#state").valid();
		} else {
			$("#state").rules("add", {
				required: false
			});
			$("#state").valid();
		}
	});
	
	// form validation for login form
	$("#login-form").validate({
		rules: {
			fname: { required: true, minlength:2, maxlength:255 },
			lname: { required: true, minlength:2, maxlength:255 },
			zip:   { required: true, minlength:2, maxlength:50 },
			company:  { required: true, minlength:2, maxlength:500 },
			title:    { required: true, minlength:2, maxlength:500 },
			email:    { required: true },
			phone:    { required: true, minlength:2, maxlength:100 }
		},
		messages: {
			fname: { required: "Please specify your first name.",
						minlength: "First name should be between 2 - 255 characters <br/>in length.",
						maxlength: "First name should be between 2 - 255 characters <br/>in length." 
					},
			lname: { required: "Please specify your last name.",
						minlength: "Last name should be between 2 - 255 characters <br/>in length.",
						maxlength: "Last name should be between 2 - 255 characters <br/>in length."
					},
			state: "Please specify your state.",
			country: "Please specify your country.",
			zip: { required: "Please specify your zip/post code.",
					minlength: "Zip/post code should be between 2 - 50 characters <br/>in length.",
					maxlength: "Zip/post code should be between 2 - 50 characters <br/>in length." 
				},
			company: { required: "Please specify your company.",
					minlength: "Company should be between 2 - 500 characters <br/>in length.",
					maxlength: "Company should be between 2 - 500 characters <br/>in length." 
				},
			title: { required: "Please specify your title.",
						minlength: "Title should be between 2 - 500 characters <br/>in length.",
						maxlength: "Title should be between 2 - 500 characters <br/>in length." 
					},
			email: {
				required: "Please specify your email address.",
				email: "Please enter a valid email address."
			},
			phone: { required: "Please specify your phone.",
						minlength: "Phone should be between 2 - 100 characters in length.",
						maxlength: "Phone should be between 2 - 100 characters in length." 
					}
		},
		onkeyup: false
	});
	
	// add style hooks to first and last list items to make CSS easier
	$("ul li:first-child").addClass("firstchild");
	$("ul li:last-child").addClass("lastchild");
	$(".accordion h4:first-child").addClass("firstchild");

	// use superfish menus
	$("ul.sf-menu").superfish({ 
		pathClass:  'youarehere',
		dropShadows: false,
		disableHI: true,
		speed: 'fast'
	});
	$("#nav > li > a").addClass("lvl1");
	$("#nav > li > ul").addClass("lvl2");
	$("#nav > li > ul > li").addClass("lvl2");
	$("#nav > li > ul > li > a").addClass("lvl2");
	$("#nav > li > ul > li > ul > li").addClass("lvl3");
	$("#nav > li > ul > li > ul > li > ul > li").addClass("lvl4");
	$("#nav > li > ul > li > ul > li > ul > li > ul > li").addClass("lvl5");

	/*
		Slideshow functions: We have to define these all individually,
		otherwise their next and previous buttons affect each other.
	*/

	// slideshow for featured resources module
	$('#featured .slides').cycle({
		speed: 1,
		timeout: 0,
		next: '#featured .next',
		prev: '#featured .prev',
		cleartype: 1
	});

	// slideshow for resources module, tab 1
	$('#resources1 .slides').cycle({
		speed: 1,
		timeout: 0,
		next: '#resources1 .next',
		prev: '#resources1 .prev',
		cleartype: 1,
		after: onBefore,
		after: onAfter1
	});

	// slideshow for resources module, tab 2
	$('#resources2 .slides').cycle({
		speed: 1,
		timeout: 0,
		next: '#resources2 .next',
		prev: '#resources2 .prev',
		cleartype: 1,
		after: onBefore,
		after: onAfter2
	});

	// slideshow for resources module, tab 3
	$('#resources3 .slides').cycle({
		speed: 1,
		timeout: 0,
		next: '#resources3 .next',
		prev: '#resources3 .prev',
		cleartype: 1,
		after: onBefore,
		after: onAfter3
	});

	// slideshow for resources module, tab 4
	$('#resources4 .slides').cycle({
		speed: 1,
		timeout: 0,
		next: '#resources4 .next',
		prev: '#resources4 .prev',
		cleartype: 1,
		after: onBefore,
		after: onAfter4
	});
	
	//onAfter function for resources slides
	function onBefore() { 
	}
	function onAfter1() { 
		//writes navigation for resources module from hidden <li>
		$('#resources1 strong.slideNavigation').html($('.hide',this).html()) 
	}
	function onAfter2() { 
		//writes navigation for resources module from hidden <li>
		$('#resources2 strong.slideNavigation').html($('.hide',this).html()) 
	}
	function onAfter3() { 
		//writes navigation for resources module from hidden <li>
		$('#resources3 strong.slideNavigation').html($('.hide',this).html()) 
	}
	function onAfter4() { 
		//writes navigation for resources module from hidden <li>
		$('#resources4 strong.slideNavigation').html($('.hide',this).html()) 
	}

	// tabs for resources module
	$("#resources-tabs").tabs();

	// generic tabbed module
	$(".tabbed").tabs();
	
	// quicklinks accordion module function
	$("#quicklinks .accordion").accordion({
		autoHeight: false,
		collapsible: true,
		active: false
	});

	// generic accordion module function
	$(".accordion").accordion({
		autoHeight: false
	});
	
	$(function() {
	    $('a[href^=http://my.tripwire.com/]').click( function() {
	        window.open(this.href);
	        return false;
	    });
	});

	//email modified nospam plugin :: http://plugins.jquery.com/project/nospam
	jQuery.fn.nospam = function(settings) {
		settings = jQuery.extend({
			replaceText: true, 	// optional, accepts true or false
			filterLevel: 'low' 	// optional, accepts 'low' or 'normal'
		}, settings);
		
		return this.each(function(){
			e = null;
			t = null;
			l = null;
			//if(settings.filterLevel == 'low') { // Can be a switch() if more levels added
			if($(this).is('a[rel]')) {
				e = $(this).attr('rel').replace('[ at ]', '@').replace('[ dot ]', '.');
				t = $(this).attr('title').replace('[ at ]', '@').replace('[ dot ]', '.');
				l = $(this).attr('href').replace('[ at ]', '@').replace('[ dot ]', '.');
			} else {
				e = $(this).text().replace('[ at ]', '@').replace('[ dot ]', '.');
				t = $(this).attr('title').replace('[ at ]', '@').replace('[ dot ]', '.');
				l = $(this).attr('href').replace('[ at ]', '@').replace('[ dot ]', '.');
			}
			//} else { // 'normal'
			//	if($(this).is('a[rel]')) {
			//		e = $(this).attr('rel').split('').reverse().join('').replace('[ at ]', '@').replace('[ dot ]', '.');
			//	} else {
			//		e = $(this).text().split('').reverse().join('').replace('[ at ]', '@').replace('[ dot ]', '.');
			//	}
			//}
			if(e) {
				$(this).text(e);
				$(this).attr('title', t);
				$(this).attr('href', l);
			}
		});
	};

	//
	$('a.email').nospam();

	$("#featured .loading").addClass("hide");
	$("#featured .slides").removeClass("hide");
	$(".tab").removeClass("hide");
});

function goTo() {
	var sE = null, url;
	if(document.getElementById) {
		sE = document.getElementById('urlList');
	} else if(document.all) {
		sE = document.all['urlList'];
	}
	if(sE && (url = sE.options[sE.selectedIndex].value)) {
		location.href = url;
	}
}

//simple pop-up
function openWin(URL,w,h) {
	eval("page" + " = window.open(URL, '', 'toolbar=0,scrollbars=1,location=0,statusbar=0,menubar=0,resizable=0, width=' + w + ',height=' + h);");
}
