/* Javascript placeholder file for Uni Master Javascripts */

var searchMenuRules = {
  'div#Search img#SearchEngine' : function(element) {
    element.onclick = function() {
      HandleSearchExpansion();
    }
  }
};

Behaviour.register(searchMenuRules);

var searchRules = {
  'div#Search input#QueryText' : function(element) {
    element.onfocus = function() {
      if (element.value == '' || element.value == 'Search') {
        this.value = '';
        this.style.color = '#4E5150';
      }
    }
    element.onblur = function() {
      if (element.value == '' || element.value == 'Search') {
        element.value = 'Search';
        element.style.color = '#999999';
      }
    }
  }
};

Behaviour.register(searchRules);

var bodyRules = {
  'body' : function(element) {
    element.onclick = function() {
      if ($('DirectLinksMenuContent').offsetHeight > 0) {
        if ($('DirectLinksMenu').className.indexOf('Open') != -1) {
          HandleMenuExpansion('DirectLinksMenu');
        }
      }
      if ($('SearchOptions').offsetHeight > 0) {
        HandleSearchExpansion();
      }
    }
  }
}

Behaviour.register(bodyRules);


function HandleSearchExpansion() {
  var SearchOptions = document.getElementById('SearchOptions');
  if (SearchOptions) {
    if (SearchOptions.className.indexOf('Hidden') != -1) {
      SearchOptions.className = SearchOptions.className.replace("Hidden","");
    }
    if (SearchOptions.offsetHeight > 0) {
      $('SearchEngine').src = '/rsrc/images/menus/search_arrow_right.gif';
    } else {
      $('SearchEngine').src = '/rsrc/images/menus/search_arrow_down.gif';
    }
    new fx.Height(SearchOptions, {duration: 150}).toggle();
  }
}

/* Search Javascript */

var engineToUse = 0;

function SubmitSearch(){
  var query = $('QueryText').value;
  var url = "";
  if (engineToUse == 1) {
    url = "http://search.newcastle.edu.au/staffdirectory/index.jsp?QueryText="+query;
  } else if (engineToUse == 2) {
    url = "http://search.newcastle.edu.au/policy/?query=" + query;
  } else if(engineToUse == 3) {
    url = "http://www.google.com.au/search?q="+query;
  } else {
    url = "http://search.newcastle.edu.au/search/index.jsp?QueryText="+query;
  }
  
  window.location = url;
}

function changeEngine(engine){
  engineToUse = engine;
  
  var q = $('QueryText').value;
  if (q != 'Search' && q != '') {
    SubmitSearch();
  }
  
  $('QueryText').focus();
  
  HandleSearchExpansion();
}


/* New Form Handler Functions
 *   Requires behaviour.js->document.getElementsBySelector()
 * 
 *   Functions which will allow a form to be validated.
 *   First prototypes for future development of Form Builder Tool.
 */

/* validateForm(form)
 *   Will validate a form's fields based on their css class.
 *     Return: true  - If the form is valid.
 *             false - If otherwise.
 *     Usage:  <form onsubmit="return validateForm(this);">
 */
function validateForm(form) {
  writeFormError(null, form);
  fixTextAreaLines(form);
  return checkRequiredFields(form) && checkEmailFields(form);
}

/* checkRequiredFields(form)
 *   Will verify that all required fields of a given form have values.
 *   Required fields have a "required" class attached to them. Invalid
 *   fields will have a red border outlined around them.
 *     Return: true  - If all required fields are valid.
 *             false - If otherwise.
 */
function checkRequiredFields(form) {
  var fields = document.getElementsBySelector("#" + form.id + " .required");
  var result = true;
  for (var i = 0; i < fields.length; i++) {
    if (fields[i].value == "") {
      result = false;
      fields[i].parentNode.style.border = "1px solid red";
      writeFormError("The " + fields[i].name + " required field must have a value.", form);
    } else {
      fields[i].parentNode.style.border = "none";
    }
  }
  return result;
}

/* checkEmailFields(form)
 *   Will verify that all email fields of a given form are in the correct
 *   syntax of "aaa@aaa.com". Invalid fields will have a red border attached.
 *     Return: true  - If all email fields are valid.
 *             false - If otherwise.
 */
function checkEmailFields(form) {
  var fields = document.getElementsBySelector("#" + form.id + " .email_field");
  var result = true;
  for (var i = 0; i < fields.length; i++) {
    if (fields[i].value.match(".+@.+[\.].+") == null) {
      result = false;
      fields[i].parentNode.style.border = "1px solid red";
      writeFormError("The " + fields[i].name + " field must be in the correct email format (aaa@aaa.com).", form);
    } else {
      fields[i].parentNode.style.border = "none";
    }
  }
  return result;
}

function writeFormError(error, form) {
  var errorTag = document.getElementsBySelector("#" + form.id + " .errorInfo")[0];
  if (error == null) {
    errorTag.innerHTML = "";
    errorTag.style.border = "none";
  } else {
    errorTag.style.border = "1px solid red";
    errorTag.innerHTML += "<p><strong>Error:</strong>&nbsp;" + error + "</p>";
  }
}

function fixTextAreaLines(form) {
  var fields = document.getElementsBySelector("#" + form.id + " textarea");
  for (var i = 0; i < fields.length; i++) {
    fields[i].value = fields[i].value.replace(/\n/g," ");
  }
}
