// JavaScript Document
function getE(e){
 if( e ){
   if( typeof(e) == 'string' ){
     return document.getElementById(e);
   }else{
     return e;
   }
 }
 return null;
}

function strpos (haystack, needle, offset) {
  var i = (haystack + '').indexOf(needle, (offset || 0));
  return i === -1 ? false : i;
}

function trim(str, chars) {
	return ltrim(rtrim(str, chars), chars);
}
 
function ltrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("^[" + chars + "]+", "g"), "");
}
 
function rtrim(str, chars) {
	chars = chars || "\\s";
	return str.replace(new RegExp("[" + chars + "]+$", "g"), "");
}

function nextTag(el,tag){

  if( el ){
  
    var next = el.nextSibling;
    
    if( next.tagName == tag.toUpperCase() ){
      return next;
    }else{
      return nextTag(next,tag);
    }
  
  }
  
  return false;

}

function getNodesByTag(el,tag,recurse){

  var e, nodes, node, rnode, inodes, inode, rnodes = [], inodes = [], ilen, len, i, ii;
  
  e = getE(el);
  
  if( e ){
  
    nodes = e.childNodes;
    
    len = nodes.length;
    
    for( i=0; i<len; i++ ){
    
      node = nodes[i];
      
      if( node ){
     
         if( node.tagName == tag ){
         
           rnodes.push(node);
         
         }else if( node.childNodes.length && recurse ){
         
           inodes = getNodesByTag(node,tag,true);
           
           ilen = inodes.length;
           
           for( ii=0; ii<ilen; ii++ ){
          
             inode = inodes[ii];
            
             if( inode ){
           
               if( inode.tagName == tag ){
           
                 rnodes.push(inode);
             
               }
               
             }  
               
           }  
         
         }
      
      }
      
    }  
  
  }
  
  return rnodes;

}

function validateForm(form,msgBox){

  var e, nodes, node, len, i, reg, err, type, val, me;

  e = getE(form);
  
  if( e ){
    
    nodes = getNodesByTag(e,'INPUT',true);
    
    len = nodes.length;
    
    for( i=0; i<len; i++ ){
    
      node = nodes[i];
      
      if( node ){
      
        if( node.tagName == 'INPUT' ){
        
          type = node.type.toLowerCase();
        
          if( type != 'submit' && type != 'hidden' && type != 'button' && type != 'reset' ){
          
            if( strpos(node.className,'required') !== false ){
          
              val = trim(node.value);
          
              if( val ){
            
                switch( node.name.toLowerCase() ){
              
                  case 'visitoremail':
                    reg  = /^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/;
                    break;
                    
                  case 'visitorphone':
                    reg  = /^([\w\d\s\-\.\(\)]{2,35})$/i;
                    break;                    
                  
                  default:
                    reg  = /^([\w\d\s]{2,35})$/i;
                    break;  
              
                }
                
                if( reg.test(val) === false ){
                  err = 'Invalid '+node.name+'.';
                  break;  
                }
              
              }else{
                //err = 'All input fields must be filled out.';
                err = node.name+' must have a value.';
                break;
              }
            
            }
          
          } 
        
        }
      
      }
    
    }
    
    if( err ){
      if( msgBox ){
        me = getE(msgBox);
        if( me ){
          me.innerHTML = err;  
        }
      }
      if( !me ){
        alert(err);
      }
      return err;
    }else{
      e.submit();
    }  
  
  }
  
  return false;

}

