/* Forms Js */

carjen.forms = {}; //own namespace

//fields to validate
carjen.forms.required = {first_name:true, last_name:true, cartemail:true, zip:true, address1:true, city:true};//required
carjen.forms.email = {cartemail:true};


//icons
carjen.forms.valid = "<img src='" + carjen.config.pathToImages + "valid.png' height='16' width='16' alt='valid' />"
carjen.forms.invalid = "<img src='" + carjen.config.pathToImages + "invalid.png' height='16' width='16' alt='invalid' />"

//VALIDATION FUNCTIONS

carjen.forms.regex = {
  email: /^[0-9a-z\-\.]{1,}[@]{1}[0-9a-z\-\.]{1,}\.{1}[0-9a-z\-\.]{1,}$/i
}

//required
carjen.forms.isRequired = function(){
  if(!this.value){
	  carjen.forms.required[this.name] = true;
	  carjen.forms.setErr(this);
	}
	else if(!carjen.hasClass(this.nextSibling, 'mailErr')){//email error?
	  carjen.forms.required[this.name] = false;	  
	  carjen.forms.clearErr(this);
	}
};

carjen.forms.validMail = function(){
  var mail = this.value.replace(/\s/g, '');
	if(mail && !mail.match(carjen.forms.regex.email)){//can be empty
		carjen.addClass(this.nextSibling, 'mailErr');
		carjen.forms.setErr(this);  
	}	
	else{//clear the error
	  carjen.removeClass(this.nextSibling, 'mailErr');
		carjen.forms.clearErr(this); 
	}
};

//SUBMIT VALIDATION
carjen.forms.validateForm = function(e){
  var errFlag = false;
  for(p in carjen.forms.required){//required
	  if(carjen.forms.required[p]){
		  carjen.forms.setErr(this[p.toString()]); //set an error
			errFlag = true;
		} 
	}
	for(email in carjen.forms.email){//email
	  //slightly different logic as email may not be required
		var fld = this[email.toString()];//the field
	  if(carjen.hasClass(fld.nextSibling, 'mailErr')){
	    errFlag = true;
			carjen.forms.setErr(fld);
		}
	}
  if(errFlag){
		//there are errors
	  carjen.prevent(e);	
		//create an error message
		if (!carjen.ids('errX')){
		  var msg = carjen.makeTag('p', 'This form contains errors');
			msg.setAttribute('id', 'errX');
			this.insertBefore(msg, this.firstChild); 
		  //scroll to message
		  window.scrollTo(0, carjen.getOffset(this, 'top')); 
		}
	}
};

//ERROR SETTING/CLEARING

carjen.forms.setErr = function(inpt){
  inpt.nextSibling.innerHTML = carjen.forms.invalid;
};

carjen.forms.clearErr = function(inpt){
  inpt.nextSibling.innerHTML = carjen.forms.valid;
};

//SET UP
//set up validation
carjen.forms.setUp = function(){
  var fields = carjen.tagNames('input');
  for(var i = 0; i < fields.length; i++){
	  if(carjen.forms.required[fields[i].name]){//required
      carjen.addEvent(fields[i], 'blur', carjen.forms.isRequired);
			var msg = carjen.makeTag('span')
			carjen.appendAfter(msg, fields[i]);
		}
		if(carjen.forms.email[fields[i].name]){//email
      carjen.addEvent(fields[i], 'change', carjen.forms.validMail);
			if(fields[i].nextSibling.tagName.toUpperCase() != 'SPAN'){//message box
			  var msg = carjen.makeTag('span')
			  carjen.appendAfter(msg, fields[i]);
			}
		}
	}
};


//PAGE CODE

//show shipping
carjen.showShipping = function(){
  this.parentNode.removeChild(this);
  carjen.ids('shipField').id = '';
}

//initiation
carjen.forms.init = function(){
  //hide shipping fieldset
	var shipping = carjen.tagNames(carjen.ids('content'), 'fieldset')[1];
	if(!shipping) return;
	shipping.id = 'shipField';
	//add button to show it
	var btn = carjen.makeTag('button', 'Add shipping Details', {id:'btnShip'})
	carjen.addEvent(btn, 'click', carjen.showShipping);
	shipping.parentNode.insertBefore(btn, shipping);
	//attach the validation code
	carjen.forms.setUp();
	//get the form
	var div = carjen.classNames('custdetails')[0];
	var frm = carjen.tagNames(div, 'form')[0];
	carjen.addEvent(frm, 'submit', carjen.forms.validateForm)
};

carjen.addLoadEvent(carjen.forms.init);