var valid = {

  init : function() {

    // block non-compliant browsers
//    if (!document.getElementsByTagName ||
//        !document.getElementById ||
 //       !document.createElement ||
    //    !document.createTextNode) { return; }

    // configure event assignment and handling
    this.util.configEvents();

    // assign a 'submit' listener to the form
	var theForm = document.getElementsByTagName('form')[0];
	this.util.addEvent (theForm, 'submit', this.checkData, false);
//	this.util.addEvent (document.getElementsByName('body')[0], 'load', this.clearData, false);
	
  },


  checkData : function(evt) {
		var inputFields = document.getElementsByTagName('input');
		var errorsArray = [];
		var counter = 0;
		
		for (var i=0, allInputs=inputFields.length; i<allInputs; i++) {
			if (inputFields[i].name === 'fname' && inputFields[i].value ==='') {
				errorsArray[counter] = 'Please provide your first name';
				counter++;
				continue;
			}
			
			if (inputFields[i].name === 'lname' && inputFields[i].value ==='') {
				errorsArray[counter] = 'Please provide your last name';
				counter++;
				continue;
			}
			
			if (inputFields[i].name === 'company' && inputFields[i].value ==='') {
					errorsArray[counter] = 'Please indicate a company';
					counter++;
					continue;
			}
			
			if (inputFields[i].name === 'title' && inputFields[i].value ==='') {
					errorsArray[counter] = 'Please indicate your title';
					counter++;
					continue;
			}
			
			if (inputFields[i].name === 'email') {
				var emailPattern = /^([\w\.\-])+\@(([\w\-])+\.)+([\w]{2,6})+$/;
				var emailAddress = emailPattern.test(inputFields[i].value);
				if (!emailAddress) {
					errorsArray[counter] = 'Please provide a valid email address';
					counter++;
					continue;
				}
			}
			
			if (inputFields[i].name === 'phone') {
				var phonePattern = /(\+91(-(\(\d{3}\)-)?)?)?\d+/;
       			var phoneCheck = phonePattern.test(inputFields[i].value);
				if (!phoneCheck) {
					errorsArray[counter] = 'Please enter a valid phone number';
					counter++;
					continue;
				}
			}
					
		}
		
				
		if (errorsArray.length) {
		
			//stop default behavior
			valid.util.stopDefault(evt);
			
			//check if any error messages already in array, if so remove
			if (document.getElementById('errors')) {
				document.getElementById('errors').parentNode.removeChild(document.getElementById('errors'));
			}
			
			//create and insert error messages
			var theErrors = document.createElement('div');
			theErrors.id='errors';
			theErrors.appendChild(document.createTextNode('Your request could not be processed due to the following errors:'));
			var errorList = document.createElement('ul');
			for (i=0, allErrors=errorsArray.length; i<allErrors; i++) {
				var errorListItem = document.createElement('li');
				errorList.appendChild(errorListItem).appendChild(document.createTextNode(errorsArray[i]));
			}
			theErrors.appendChild(errorList);
			valid.util.insertAfter(document.getElementById('main'), theErrors, document.getElementById('required'));
			}

  },
	
	clearForm : function() {
	  var i;
	  for (i = 0; (i < document.forms.length); i++) {
		document.forms[i].reset();
	  }

	}, 
	
 util : {
    configEvents : function() {
       if (document.addEventListener) {
          this.addEvent = function(el, type, func, capture) {
            el.addEventListener(type, func, capture);  
          };
          this.stopBubble = function(evt) { evt.stopPropagation(); };
          this.stopDefault = function(evt) { evt.preventDefault(); };
          this.findTarget = function(evt, targetNode, container) {
            var currentNode = evt.target;
            while (currentNode && currentNode !== container) {
              if (currentNode.nodeName.toLowerCase() === targetNode) {
                  return currentNode; break;
              }
              else { currentNode = currentNode.parentNode; }
            }
            return false;
          };
      }
    
      else if (document.attachEvent) {
            this.addEvent = function(el, type, func) {
            el["e" + type + func] = func;
            el[type + func] = function() { el["e" + type + func] (window.event); };
            el.attachEvent("on" + type, el[type + func]);
          };
          this.stopBubble = function(evt) { evt.cancelBubble = true; };
          this.stopDefault = function(evt) { evt.returnValue = false; };
          this.findTarget = function(evt, targetNode, container) {
            var currentNode = evt.srcElement;
            while (currentNode && currentNode !== container) {
              if (currentNode.nodeName.toLowerCase() === targetNode) {
                  return currentNode; break;
              }
              else { currentNode = currentNode.parentNode; }
            }
            return false;
          };  
      }   
    },
    insertAfter : function(parent, nodeToInsert, referenceNode) {
      parent.insertBefore(nodeToInsert, referenceNode.nextSibling);
    }
  }
  };
  
  valid.init();
