function hideTooltips() {
  tooltips = document.getElementsByTagName('div');
  for(var i = 0; i < tooltips.length; i++) {
    if(tooltips[i].className.indexOf('tooltip') > -1) {
      tooltips[i].style.display = 'none';
    }
  }
}
function showTooltip(id) {if(document.getElementById(id+'tooltip')) {document.getElementById(id+'tooltip').style.display = 'block';}}

/**
 * Validate a field given the fields' id.
 * @param elementid - The id of the element to validate
 * @param expr - (Optional) an expression to validate the field against. If no expression is set, checks only against ''
 */
function validate(elementId, expr) {
  if((element = document.getElementById(elementId))) {  
    hideTooltips();   

    // Check against the empty string 
    if(element.value == '' || element.value == 'Search for a domain name') {showTooltip(elementId); element.focus(); return false;}
    
    // Check against any pre-defined regular expressions
    if(expr) {
      switch(expr) {
        case 'domain':
          regex = /^(www\.|)[A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9]$/
          break;        
        case 'email':
          regex = /^[0-9a-zA-Z]([-_.]?[0-9a-zA-Z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,4}$/
          break;
        case 'phone':
          regex = /^[-\+\s\.0-9]{8,}$/
          break;
        case 'name':
          regex = /^[-\'a-zA-Z]+$/
          break;
        default: regex = expr;
      }      
      if(!element.value.match(regex)) {
        showTooltip(elementId); 
        element.focus(); 
        return false;   
      }
    }
    
    // If we are here then field is validated!
    return true;
  }
}
function validateLogin() {
  hideTooltips();
  if(document.getElementById('username').value == '' || document.getElementById('username').value == 'USERNAME') { 
    showTooltip('username'); 
    document.getElementById('username').focus(); 
    return false;
  }
  if(document.getElementById('password').value == '') {
    showTooltip('password'); 
    document.getElementById('password').focus(); 
    return false;
  }
  return true;        
}

function stripIllegalChars(dirty) {
  return dirty.replace(/[<>]/g, "");  
}

/**
 * Convert a form into a query string
 * Taken from: http://www.state26.com/downloads/formdata2querystring.txt
 * Modified by me to add the 'select-multiple' case and fix a few bugs
 * and also strip the naughty chars from the text fields
 * @param {Object} docForm - the form to turn into a query string
 */
function formData2QueryString(docForm)
{   
   var submitString = '?';
   var formElement = '';
   var lastElementName = '';
   
   for(i = 0 ; i < docForm.elements.length ; i++)
   {
     formElement = docForm.elements[i];
     switch(formElement.type)
     {    
        case 'text' :
        case 'select-one' :
        case 'hidden' :
        case 'password' :
        case 'textarea' :
           formElement.value = stripIllegalChars(formElement.value);
           submitString += formElement.name + '=' + encodeURIComponent(formElement.value) + '&';
           break;
        case 'radio' :   
           if(formElement.checked)
           {
             submitString += formElement.name + '=' + encodeURIComponent(formElement.value) + '&';
           }
           break;
        case 'checkbox' :   
           if(formElement.checked) 
           {
             submitString += formElement.name + '=' + encodeURIComponent(formElement.value) + '&'; 
             lastElementName = formElement.name;
           }
           break; 
        case 'select-multiple' :

          for(var j=0; j < formElement.options.length; j++) {
            if(formElement.options[j].selected) {
              submitString += formElement.name + "=" + encodeURIComponent(formElement.value) + "&";
            }
          }           
          break;          
        default:
          break;
     }                                                                            
   }
   submitString = submitString.substring(0, submitString.length - 1);
   return submitString;                               
}