function showComments(productId){
	location.href = 'comments.do?productId=' + productId; 
}

function showAround(element, targetElement, offsetX, offsetY, direction){
	var targetPosition = Position.cumulativeOffset(targetElement);
	var pos = { left: targetPosition[0], top: targetPosition[1]};	
	
	if (direction.indexOf('east') >= 0) {
		pos.left += targetElement.getDimensions().width;
	}
	else if (direction.indexOf('south') >= 0) {
		pos.top += targetElement.getDimensions().height;
	}
	else if (direction.indexOf('west') >= 0) {
		pos.left -= element.getDimensions().width;
	}
	else if (direction.indexOf('north') >= 0) {
		pos.top -= element.getDimensions().height;
	}	
	 
	pos.left += offsetX;
	pos.top += offsetY;
	
	var setPos = { left: pos.left + 'px', top: pos.top + 'px' };			
	
	element.setStyle(setPos);		
	
	Element.show(element);
}

function cancelTrial(trialId){
	var cancelTrialWindow = window.open('canceltrial.do?trialId=' + trialId,'CancelTrialWin',
	'width=800,height=600,status=yes,scrollbars=yes,resizable=yes');
	cancelTrialWindow.focus();
}

function closeWindow(){
	window.close();
}

function gotoUrl(url){
	location.href = url;
}


function showTrialDetail(trialId){
    var trial_detail = Windows.getWindow("trial_detail");
    
    if (!trial_detail){    
        trial_detail = new Window("trial_detail", {className: "mac_os_x", title: "Product Trial Detail", 
            resizable: true, draggable:true, destroyOnClose:false,
            minimizable:false, maximizable:false,closable:false,recenterAuto:false, 
            width:600, height:500});    
            
        trial_detail.setCloseBar("Click Here to Close");        
    }
    
    trial_detail.setURL('trialDetail.do?trialId='+ trialId);
    
    trial_detail.showCenter(true, 20);  
}

function showReg(url) {
    var regWindow = Windows.getWindow("Reg_Window");
    
    if (!regWindow){    
        editWindow = new Window("Reg_Window", {className: "mac_os_x", title: "Registration", 
            resizable: true, draggable:true, destroyOnClose:false,
            minimizable:false, maximizable:true, recenterAuto:false, 
            width:850, height:600});            
        // editWindow.setCloseBar("<img src=\"style/themes/mac_os_x/close-button.gif\"/>");        
    }
    
    regWindow.setURL(url);
    
    regWindow.showCenter(true, 20);
}

function createRegPopup(){
	$$('.ttitle').each(function(element){
		var alink = element.down('a', 0); 
		if (alink) {
			observeRegClick(alink);
		}
	});

	$$('.signupUrl').each(function(element){
		observeRegClick(element);
	});	
}

function observeRegClick(element){
	element.observe('click', function(event){
		var url = Event.element(event).href;
		window.open(url);
		new Ajax.Request("tryit.jsp?url=" + escape(url));
		Event.stop(event);
	});	
}

function popupReg(link){
	var url = link.href;
	window.open(url);
	new Ajax.Request("tryit.jsp?from=snapshot&url=" + escape(url));	
	return false;
}

var snapShot = {	
	initSnapshot: function(){
		snapShot.snapShotWin = $('snapshotWin');
		snapShot.attachSelf();
	},
	
	cancel_HideSnapShot: function(event){
		var queue = Effect.Queues.get('snapShots');
		queue.each(function(e) { e.cancel() });	
		snapShot.snapShotWin.setOpacity(1);
	},

	showSnapshot: function(trialId) {
		var ttitile = $('ttitle' + trialId);

		var tlink = ttitile.down('a', 0);
		 
		if (tlink) {
			$('snapshotImage').update('<a id="ssLink' + trialId + '" href="' + tlink.href + '"><img src="snapshot?u=' + escape(tlink.href) + '" width="640" height="480"/></a>');
			
			var ssLink = $("ssLink" + trialId);
			
			if (ssLink) {
					ssLink.observe('click', function(event){
						var url = tlink.href;
						window.open(url);
						new Ajax.Request("tryit.jsp?from=snapshot&url=" + escape(url));
						Event.stop(event);
					});
			}
			
			showAround(snapShot.snapShotWin, tlink, 120, -50, 'south');
		}	
	},
	
	start_showSnapshot: function(trialId){	
		snapShot.cancel_HideSnapShot();		
		
		if (snapShot.timeoutId_snapshotWin) {
			window.clearTimeout(snapShot.timeoutId_snapshotWin);
			snapShot.timeoutId_snapshotWin = null;
		}
		snapShot.timeoutId_snapshotWin = 
			window.setTimeout("snapShot.showSnapshot('" +  trialId + "')", 200);		
	},
		
	start_hideSnapshot: function(event){
		if (snapShot.timeoutId_snapshotWin) {
			window.clearTimeout(snapShot.timeoutId_snapshotWin);
			snapShot.timeoutId_snapshotWin = null;
		}

		new Effect.Fade(snapShot.snapShotWin, {delay:0.3, duration:0, queue: {scope: 'snapShots'} });
	},
	
	tlinkOverHandler: function(event){	
		var element = Event.element(event);
		var trialId = element.identify().replace("ttitle", "");	
		snapShot.start_showSnapshot(trialId);	
	},

	ssimageOverHandler: function(event){	
		var element = Event.element(event);
		var trialId = element.identify().replace("ss", "");	
		snapShot.start_showSnapshot(trialId);	
	},
		
	attach: function(element){
		var trialId = element.identify().replace("ttitle", "")

		var alink = element.down('a', 0); 
		if (alink) {
			alink.observe('mouseover', function (event){snapShot.start_showSnapshot(trialId);});
			alink.observe('mouseout', snapShot.start_hideSnapshot);	
		}
		
		var ssimg = element.down('.ssimg', 0); 
		
		if (ssimg) {
			ssimg.observe('mouseover', function (event){snapShot.start_showSnapshot(trialId);});
			ssimg.observe('mouseout', snapShot.start_hideSnapshot);			
		}

		//element.observe('mouseout', snapShot.start_hideSnapshot);	
		//var trialId = element.identify().replace("ttitle", "");	
		//$('ss' + trialId).observe('mouseover', snapShot.ssimageOverHandler);	
		//$('ss' + trialId).observe('mouseout', snapShot.start_hideSnapshot);		
	},
	
	attachSelf: function(){
		snapShot.snapShotWin.observe('mouseover', snapShot.cancel_HideSnapShot);		
		snapShot.snapShotWin.observe('mouseout', snapShot.start_hideSnapshot);	
	}
};

function initSnapshot(){
	//snapShot.initSnapshot();
	
	//$$('.ttitle').each(function(element){
	//	snapShot.attach(element);
	//});
}

function addTrial(trialId){
	new Ajax.Updater('remindMeMsg', "userInputDialog.do", {
		asynchronous:true, 
		evalScripts:true, 				
		
		onComplete:function(request){	
			cancelMsgWinEffect();
								
			var notifyLink = $('ttry' + trialId);
			
			showAround($('remindMeMsgWin'), notifyLink, 50, -35, 'east');

			//$('email').focus();
			initUserInputForm();
		}, 
		
		onCreate:function(request){
		}, 
		
		parameters: 'trialId=' + trialId + '&confirm=true'
	});	
}

var reminderMe = {	
	init: function(){
		reminderMe.reminderWin = $('remindMeMsgWin');
		reminderMe.attachSelf();
	},
	
	cancelHideHandler: function(event){
		var queue = Effect.Queues.get('reminders');
		queue.each(function(e) { e.cancel() });	
		reminderMe.reminderWin.setOpacity(1);
	},

	showWin: function(trialId) {
	
		new Ajax.Updater('remindMeMsg', "userInputDialog.do", {
			asynchronous:true, 
			evalScripts:true, 				
			
			onComplete:function(request){
				cancelMsgWinEffect();
									
				var notifyLink = $('ttry' + trialId);
				
				showAround(reminderMe.reminderWin, notifyLink, -30, -30, 'east');
	
				//$('email').focus();
				initUserInputForm();
			}, 
			
			onCreate:function(request){
			}, 
			
			parameters: 'trialId=' + trialId + '&confirm=true'
		});	
	},
	
	startShow: function(trialId){	
		reminderMe.cancelHideHandler();		
		
		if (reminderMe.winTimeoutId) {
			window.clearTimeout(reminderMe.winTimeoutId);
			reminderMe.winTimeoutId = null;
		}
		reminderMe.winTimeoutId = 
			window.setTimeout("reminderMe.showWin('" +  trialId + "')", 200);		
	},
		
	startHideHandler: function(event){
		//if (reminderMe.winTimeoutId) {
		//	window.clearTimeout(reminderMe.winTimeoutId);
		//	reminderMe.winTimeoutId = null;
		//}

		//new Effect.Fade(reminderMe.reminderWin, {delay:1, duration:0, queue: {scope: 'reminders'} });
	},
	
	linkOverHandler: function(event){	
		var element = Event.element(event);
		alert(element.identify());	
		var trialId = element.identify().replace("ttry", "");	
		alert(trialId);
		reminderMe.startShow(trialId);	
	},
		
	attach: function(element){
		var trialId = element.identify().replace("ttry", "");
		element.observe('click', function(event){
			reminderMe.showWin(trialId);
			Event.stop(event);
		});			
		//element.observe('mouseover', function(event){reminderMe.startShow(trialId);});
		//element.observe('mouseout', reminderMe.startHideHandler);
	},
	
	attachSelf: function(){
		//reminderMe.reminderWin.observe('mouseover',  reminderMe.cancelHideHandler);		
		//reminderMe.reminderWin.observe('mouseout',  reminderMe.startHideHandler);	
	}
};

function initReminderLink() {
	reminderMe.init();
	$$('.reminderLink').each(function(element){
		reminderMe.attach(element);
	});	
}

var loginTip = {	
	initTip: function(isAuthenticated){
		loginTip.loginDiv = $('tratingMsg');
		loginTip.attachSelf();
		loginTip.isAuthenticated = isAuthenticated;
	},
	
	cancel_HideLoginTip: function(event){
		var queue = Effect.Queues.get('LoginTips');
		queue.each(function(e) { e.cancel() });	
		loginTip.loginDiv.setOpacity(1);
	},

	start_HideLoginTip: function(event){
		new Effect.Fade(loginTip.loginDiv, {delay:6, duration:2, queue: {scope: 'LoginTips'} });
	},
	
	attach: function(element, aroundElement){
		element.observe('mouseover', function(event){
			if (!loginTip.isAuthenticated) {
				loginTip.cancel_HideLoginTip();
				showAround(loginTip.loginDiv, aroundElement, -5, -5, 'north');
			} 
 		});					

		element.observe('mouseout', function(event){
			if (!loginTip.isAuthenticated) {			
				loginTip.start_HideLoginTip();
			}
		});			
	},
	
	attachSelf: function(){
		loginTip.loginDiv.observe('mouseover', loginTip.cancel_HideLoginTip);		
		loginTip.loginDiv.observe('mouseout', loginTip.start_HideLoginTip);	
	}
};

function loginToVote(){
    var login_win = Windows.getWindow("login_win");
    if (!login_win){    
        login_win = new Window("login_win", {className: "mac_os_x", title: "Sign On", 
            resizable: false, draggable:false, destroyOnClose:false,
            minimizable:false, maximizable:false,closable:false,recenterAuto:true, 
            width:380, height:200});    
            
        login_win.setCloseBar("Click Here to Close");        
    }
    
    login_win.setURL(signOnURL_browse);
    
    login_win.showCenter(true); 
}

function closeLoginWin(){
    var login_win = Windows.getWindow("login_win");
	if (login_win) {
		login_win.close();
	}
}

function rateTrial(trialId, rating){
	
	new Ajax.Request('rating.do', {
		method:'post',
		parameters: {t:trialId, r: rating},
		
		onCreate: function(){
			$('trating' + trialId).setStyle({visibility:'hidden'});
			Element.show('tindicator' + trialId);
		},
		  				
		onSuccess: function(transport){
 			var response = transport.responseText.evalJSON(); 	
 			
 			if (response.result == 'success'){
				$('trating' + response.trialId).src = "images/" + response.rating + "star.gif"; 
				$('tratingCount' + response.trialId).innerHTML = '' + response.count + ' ratings';		
 			}
 			else if (response.result == 'unknownUser'){
 				loginTip.isAuthenticated = false;
 				loginToVote();
				//loginTip.cancel_HideLoginTip();
				//var dislikeId = 'tdislike' + response.trialId;
				//showAround(loginTip.loginDiv, $(dislikeId), -5, -5, 'north');
				//loginTip.start_HideLoginTip();
 			}
 			else {
 				alert('Oops, failed to rate!');
 			}
 			 			
		},
		onFailure: function(transport){
			alert('Oops, failed to rate!');
		},
		
		onComplete: function(){
			new Effect.Fade('tindicator' + trialId, {duration:0.3,
	 		afterFinish: function(){
	 			$('trating' + trialId).setStyle({visibility:'visible'});
  			}});
		}
	});
}

function initRating(isAuthenticated){
	$$('.tdislike').each(function(element){
		element.observe('click', function(event){
			var dislikeId = element.identify();
			var trialId = dislikeId.replace("tdislike", "");			
			rateTrial(trialId, "down");			
 		});			
	});

	$$('.tlike').each(function(element){
		element.observe('click', function(event){
			var likeId = element.identify();
			var trialId = likeId.replace("tlike", "");			
			rateTrial(trialId, "up");			
 		});			
	});

	loginTip.initTip(isAuthenticated);
	
	//if (isShowingLoginTip) {		
		$$('.tratingWrapper').each(function(element){
			var wrapperId = element.identify();
			var dislikeId = wrapperId.replace("tratingWrapper", "tdislike");
			//var ratingId = wrapperId.replace("tratingWrapper", "trating");
					
			loginTip.attach(element,$(dislikeId));
		});
 	//}
}


function cancelMsgWinEffect(){
	//if (timeoutId_msgWin)
	//	window.clearTimeout(timeoutId_msgWin);
	var queue = Effect.Queues.get('reminders');	
	queue.each(function(e) { e.cancel() });
}

function closeMsgWin(){
	//timeoutId_msgWin = window.setTimeout(fadeMsgWin, 8000);	
	//fadeMsgWin();
	 new Effect.Opacity('UserInputPage', {delay:7, duration:2, from:1.0, to:0.5, 
	 		queue: {scope: 'reminders'},
	 		afterFinish: function(){
    				Element.hide('remindMeMsgWin'); 
  			}
  		} 
	 );
	
	if ($('freeText')){
		$('freeText').clear();
		$('freeText').focus();
	}
}

function initUserInputForm(){
	if ($F('channel') == 'email') {
		$('email').activate();
	}
	else {
		$('phone').activate();	
	}
	
	$('userInputForm').onsubmit = function() {
		if ($F('channel') == 'email') {
			if ($F('email') == '') {
				$('email').addClassName('errFld');	
				$('email_msg').update('Email is required.');
				$('email').focus();
				return false;
			}
	
			if (!isValidEmail($F('email'))) {
				$('email').addClassName('errFld');	
				$('email_msg').update('Please provides a valid email.');
				$('email').focus();
				return false;
			}
		}
		else {
			if ($F('phone') == '') {
				$('phone').addClassName('errFld');	
				$('phone_msg').update('Phone number is required.');
				$('phone').focus();
				return false;
			}
	
			if (!isValidPhone($F('phone'))) {
				$('phone').addClassName('errFld');	
				$('phone_msg').update('Please provides a valid phone number.');
				$('phone').focus();
				return false;
			}
		}

		$('userInputForm').request({
			onComplete: function(transport) {
		    	//if (transport.responseText.match(/href="http:\/\/prototypejs.org/))
		      	$('remindMeMsg').update(transport.responseText);
		  	}
		});
  				
		return false;	
	}
};

function initRemindMeForm(){
	$('remindMeForm').onsubmit = function() {
		if ($F('freeText').strip() != '') {
			new Ajax.Updater('remindMeMsg', "userInputDialog.do", {
				asynchronous:true, 
				evalScripts:true, 				
				
				onComplete:function(request){
					cancelMsgWinEffect();				
					
					showAround($('remindMeMsgWin'), $('freeText'), -60, 38, 'south'); 

					//$('email').focus();
					
					initUserInputForm();
				}, 
				
				onCreate:function(request){
					//Element.show('indicator')
				}, 
				
				parameters: $('remindMeForm').serialize()
			});
		}
		return false;
	}
}

function showReminderHelp(){
	new Ajax.Updater('remindMeMsg', "whatisreminder.jsp", {
		asynchronous:true, 
		evalScripts:true, 				
		
		onComplete:function(request){
			cancelMsgWinEffect();			
			showAround($('remindMeMsgWin'), $('freeText'), -60, 38, 'south'); 							
		}, 
		
		onCreate:function(request){
		} 
	});
}

function cancelInput(){
	Element.hide('remindMeMsgWin');
	if ($('freeText'))
		$('freeText').activate();	
}

function closeReminderHelp(){
	Element.hide('remindMeMsgWin');
	if ($('freeText'))
		$('freeText').activate();	
}

function showEdit(){
	$('EditPane', 'hideEditLink').invoke('show'); 
	$('showEditLink').hide();
}

function hideEdit(){
	$('EditPane', 'hideEditLink').invoke('hide'); 
	$('showEditLink').show();
}

function notifyBy(channel){
	if (channel == 'email'){
		$('channelEmail').addClassName('activeChannel');
		$('channelSms').removeClassName('activeChannel');
		$('channel').value = 'email';	
		Element.hide('carrier');	
		Element.hide('phone');	
		Element.hide('phone_msg');	
		Element.show('email_msg');	
		Element.show('email');	
		$('email').focus();
	}
	else if (channel == 'sms'){
		$('channelEmail').removeClassName('activeChannel');
		$('channelSms').addClassName('activeChannel');	
		$('channel').value = 'sms';	
		Element.show('carrier');	
		Element.show('phone');	
		Element.show('phone_msg');	
		Element.hide('email_msg');	
		Element.hide('email');	
		$('phone').focus();
	}
}

function isValidEmail(strEmail){
	var validRegExp = /^[^@]+@[^@]+.[a-z]{2,}$/i;
	
	if (strEmail.search(validRegExp) == -1) 
	{
    	return false;
    }    
    return true; 
}

function isValidPhone(strPhone){		
	var validRegExp = /^\s*\(?[1-9][0-9][0-9]\)?\-?[0-9][0-9][0-9]\-?[0-9][0-9][0-9][0-9]\s*$/i;
	
	if (strPhone.search(validRegExp) == -1) 
	{
    	return false;
    }    
    return true; 
}

function queryBoxFirstFocus(event){
	var qbox = $('query_box');
	qbox.value = '';
	qbox.setStyle({color:''});
	qbox.stopObserving('focus', queryBoxFirstFocus);
 }

function initQueryBox(){
	var qbox = $('query_box');
		
	if (qbox.value == '' || qbox.value == 'Search Free Trials') {
		qbox.value = 'Search Free Trials';
		qbox.setStyle({color:'gray'});			
		qbox.observe('focus', queryBoxFirstFocus);		
	}
			
	$('search_form').onsubmit = function() {
		if ($F('query_box') == '' || $F('query_box') == 'Search Free Trials') {
	  		return false;
	  	}
	  	
		return true;	
	}	
}