/* ------------------------------------------------------------------------
 * SANDIA NATIONAL LABS
 * ------------------------------------------------------------------------
 *
 * File Name:      epi.js
 * Written On:     November 08, 2001 09:48
 * Author:         Emily Dickinson (09517)
 * Description:    Javascript code for Epistemic app
 * ------------------------------------------------------------------------
 * PVCS Header Information
 * ------------------------------------------------------------------------
 * @(#)PVCSID:  $Archive:  $
 * @(#)PVCSID:  $Revision: $
 * @(#)PVCSID:  $Date:     $
 * @(#)PVCSID:  $Author:   $
 * ------------------------------------------------------------------------
 */


/* Trim leading and trailing whitespace from str; return result */
function trimString(str)   {
	return( str.replace(/^\s+/g,"").replace(/\s+$/g,"") );
}

/* Return true if str is blank; false otherwise */
function isBlank(str) {
    var trimmedStr = trimString(str);
	if (trimmedStr.length > 0) {  return false; }
	else { return true; }
}	

/* OPERATION: do_unsubscribe
 * First Confirm user really wants to unsubscribe.
 */
function do_unsubscribe(form) {
    if ( ! confirm('Really unsubscribe?') ) {
		return false;
	}
	form.operation.value="do_unsubscribe";
   form.submit();
}	

/* Validate new category.  Used by admin/cats.cgi */
function validateNewCat(form)  {
   var cat_name = form.new_cat_name.value;
   var cat_dir = form.new_cat_dir.value;

   if ( isBlank(cat_name)) {
      alert("Please specify category name");
      form.cat_name.focus();
      return false;
   }

   if ( isBlank(cat_dir)) {
      alert("Please specify category directory or path");
      form.cat_dir.focus();
      return false;
   }

   return true;
}

/* OPERATION: show_unsubscribe */
function show_unsubscribe(form)  {
   form.action = "epi.cgi";
   form.operation.value="show_unsubscribe";
   form.submit();
}

/* OPERATION: show_reg */
function show_reg(form)  {
   form.action = "epi.cgi";
   form.operation.value="show_reg"; 
   form.email.value="";
   form.login_password.value="";
   form.submit();
}

/* OPERATION: show_services */
function show_services(form)  {
   form.action = "epi.cgi";
   form.operation.value="show_services"; 
   form.submit();
}

/* OPERATION: show_profile */
function show_profile(form)  {
   form.action = "epi.cgi";
   form.operation.value="show_profile";
   form.submit();
}

/* OPERATION: show_user_profile
 * Show the profile corresponding to email passed in. CALLED BY admin script only! 
 */
/* FIX THIS: WE ARE LITERALLY CHANGING THE ADMIN USERS EMAIL */
function show_user_profile(form, email)  {
   form.email.value = email;   
   form.action = "epi.cgi";
   form.operation.value="show_profile";
   form.submit();
}

/* OPERATION: do_profile */
function do_profile(form)  {
   if (! validateReg(form)) {
      return false;
   }
   form.action = "epi.cgi";
   form.operation.value="do_profile";
   form.submit();
}


function isEmail(str) {
   if  ( (str.indexOf("@") != -1) && (str.indexOf(".") != -1)) {
	   return true;
   }
   return false;
}

/* OPERATION: do_reg. */
function do_reg(form)  {
   if (! validateReg(form)) {
      return false;
   }
   form.login.value=form.email.value;
   form.action = "epi.cgi";
   form.operation.value="do_reg";
   form.submit();
}

/* validateReg */
function validateReg(form)  {
   var email = form.email.value;
   var first_name = form.first_name.value;
   var last_name = form.last_name.value;
   var password = form.password.value;
   var password2 = form.password2.value;
   var hint = form.hint.value;

   if ( isBlank(first_name)) {
      alert("Please specify First Name");
      form.first_name.focus(); 
      return false;
   }

   if ( isBlank(last_name)) {
      alert("Please specify Last Name");
      form.last_name.focus();
      return false;
   }

   if ( isBlank(email)) {
      alert("Please specify email address");
      form.email.focus();
      return false;
   }

   if (! isEmail(email))  {
      alert("Please specify a valid email address");
      form.email.focus();
      return false;
   }

   if ( isBlank(password)) {
      alert("Please specify a password");
      form.password.focus();
      return false;
   }

   if ( isBlank(password2)) {
      alert("Please re-type password");
      form.password2.focus();
      return false;
   }

   if (password != password2) {
      alert("The first password you typed differs from the second one. Please re-type.");
      form.password.value = "";
      form.password2.value = "";
      form.password.focus();
      return false;
   }

   if ( isBlank(hint)) {
      alert("Please specify password hint to help you remember your password");
      form.hint.focus();
      return false;
   }

   return true;
}


function validateLoginAndLoginPassword(form)  {
   if (! validateLogin(form)) {
      return false;
   }
   if (! validateLoginPassword(form)) {
      return false;
   }
   return true;
}

function validateLoginPassword(form)  {
   var login_password = form.login_password.value;

   if ( isBlank(login_password)) {
      alert("Please specify password");
      form.login_password.focus();
      return false;
   }

   return true;
}

function validateEmail(form)  {
   var email = form.email.value;

   if ( isBlank(email)) {
      alert("Please specify email address");
      form.email.focus();
      return false;
   }

   return true;
}

function validateLogin(form)  {
   var login = form.login.value;
   if ( isBlank(login)) {
      alert("Please specify email address");
      form.login.focus();
      return false;
   }

   return true;
}

/* OPERATION: show_submit_msg */
function show_submit_msg(form)   {
   form.post_type.value="reply";
   form.message_id.value="";
   form.operation.value="show_submit_msg";
   form.action="epi.cgi";
   form.submit();
}

/* OPERATION: show_login
 * OPERATION does not get changed. It remains whatever it was before!! 
 */
function show_login(form)   {
      form.action="epi.cgi";
   	  form.submit();
}


/* Validate vals; then set login value to email */
function do_login(form)   {
   if (validateLoginAndLoginPassword(form) == false)  { 
	   return false; 
   }
  form.submit();
}

/* ------------------------------------------------------------------------
 * forum 
 * ------------------------------------------------------------------------ */

function validateNewMessage(form)  {
   var subject = form.subject.value;
   var body = form.body.value;

   if ( isBlank(subject)) {
      alert("Please specify title");
      form.subject.focus();
      return false;
   }

   if ( isBlank(body)) {
      alert("Please specify comment");
      form.body.focus();
      return false;
   }
  return true;
}

/* OPERATION: show_submit_msg.  POST_TYPE: reply */
function show_submit_reply(form)   {
   form.action = "epi.cgi";
   form.operation.value="show_submit_msg";
   form.post_type.value="reply";
   form.submit();
}

/* OPERATION: do_approve_msg */
function do_approve_msg(form)   {
   form.operation.value="do_approve_msg";
   form.submit();
}

/* OPERATION: show_preview */
function show_preview(form, admin, post_type)   {
   var email = form.email.value;
   var subject = form.subject.value;
   var body = form.body.value;
   var paper_path_override = form.paper_path_override.value;
   var paper_path = form.paper_path.value;

   /* The email address gets TYPED IN when admin is 
   * PRETENDING to be someone else. 
   * HACK! But it's what the customer ordered.
   */
   if (! isEmail(email))  {
      alert("Please specify a valid email address");
      form.email.focus();
      return false;
   }


   if ( isBlank(subject)) {
      alert("Please specify title");
      form.subject.focus();
      return false;
   }

   if ( isBlank(body)) {
      alert("Please specify comment");
      form.body.focus();
      return false;
   }


   var is_private = "";
   if (post_type !="edit" && 
       form.is_private_button[0].checked == false &&
       form.is_private_button[1].checked == false) {
         alert("Please specify whether or not the Epistemic Project Team has your permission to post this document and your name to the Epistemic website.");
      return false;
   }

   form.operation.value="show_preview";
   form.submit();
   return true;
}

/* Submit the message */
function do_submit_msg(form)   {
   form.operation.value="do_submit_msg";
   form.submit();
}

/* Show message with id given. */
function show_msg(form, message_id)   {
   form.operation.value="show_msg";
   form.action="epi.cgi";
   form.message_id.value=message_id;
   form.submit();
}

/* OPERATION: show_submit_msg.  POST_TYPE: edit */
function show_edit_msg(form, message_id)   {
   form.action="epi.cgi";
   form.operation.value="show_submit_msg";
   form.post_type.value="edit";
   form.message_id.value=message_id;
   form.submit();
}

/* OPERATION: do_delete_msg. */
function do_delete_msg(form, message_id)   {
    if ( ! confirm('Really delete message?') ) {
		return false;
	}
   form.action="epi.cgi";
   form.operation.value="do_delete_msg";
   form.post_type.value="delete";
   form.message_id.value=message_id;
   form.submit();
}


/* NOT IMPLEMENTED BUT KEEP! */
function handleNewThread(form)   {
   form.operation.value="show_submit_msg";
   form.post_type.value="thread";
	  form.submit();
}

/* OPERATION: show_challenge */
function show_challenge(form)  {
   form.action = "epi.cgi";
   form.operation.value="show_challenge";
   form.submit();
}

/* OPERATION: show_workshop */
function show_workshop(form)  {
   form.action = "epi.cgi";
   form.operation.value="show_workshop";
   form.submit();
}

/* OPERATION: show_posts */
function show_posts(form)  {
   form.action = "epi.cgi";
   form.operation.value="show_posts";
   form.submit();
}

/* OPERATION: show_team */
function show_team(form)  {
   form.action = "epi.cgi";
   form.operation.value="show_team";
   form.submit();
}

/* OPERATION: show_home */
function show_home(form)  {
   form.action = "epi.cgi";
   form.operation.value="show_home";
   form.submit();
}

/* Returns true if browser version is Netscape 4.6, false otherwise. */
function isNetscape4_6() {
  if (navigator.appName != "Netscape") {
     return false;
  }

  var mainAppVersion = navigator.appVersion.substr(0, 3);
  if (mainAppVersion == "4.6") {
     return true;
  }

  return false;
}

/* Open a new window to view the file passed in (a PDF).
 * If browser is Netscape 4.6, simply show the file --
 * 4.6 AUTOMATICALLY opens up a new window for you,
 * and then leaves it empty after launching Adobe Acrobat
 * in yet another window.
 */
function viewPDF(file) {
  if (isNetscape4_6()) {
     document.location = file;
  } else {
     window.open(file, "pdf_window", "status=yes,menu=yes, resizeable=yes");
   }
}

