/* Form Validation */

function validateString(val){
	re = /^\s*$/;
	return !re.test(val);
}

function validateLink(val){
	re = /^\s*$/;
	return !re.test(val);
}

function validatePrice(val){
	re = /^\s*\d+\.?(\d\d)$/;
	return re.test(val);
}
function validateNumber(val){
	re = /^\s*\d+\.?(\d\d)$/;
	return re.test(val);
}
function validateFile(val) {
	re = /^\s*$/;
	return !re.test(val);
}

function validateTel(val){
	re = /^\s*\d{6}[\s\d]+$$/;
	return re.test(val);
}

function validateDate(val){
	re = /^\d\d?\/\d\d?\/\d\d(\d\d)?$/;
	return re.test(val);
}


function addHint(name){
  Element.addClassName(name,'hint');
}
function removeHint(name) {
  if ( Element.hasClassName(name,'hint') ) {
    Element.removeClassName(name,'hint')
  }
}

function validateEmail(val){

	re = '[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+@[-!#$%&\'*+\\/0-9=?A-Z^_`a-z{|}~]+\.[-!#$%&\'*+\\./0-9=?A-Z^_`a-z{|}~]+';
	return RegExp(re).test(val);
}

/* Generic Validation Function */
function validate(formObj,required)
{


  var fields = formObj.elements;
	var alerts = [];

  for(a in required)
	{

    var val = fields[a].value;
    var message =  required[a][1];
    var type = required[a][0];
    var field = fields[a];

		switch( type ) {

			case "string" :
        if ( !validateString(val) ) {
			   	alerts.push(
           ( message || ('Please fill in the '+a.ucwords()+' field.') )
          );
          addHint(field)
			  } else {
          removeHint(field)

        }
			break;

			case "price" :
			  if( !validatePrice(val) )
			  {
			  	alerts.push(
            ( message == '' ?  ( 'Please enter a valid price into the ' + a.ucwords() +' field.' ) : message )
          );
          addHint(field)
			  } else {
          removeHint(field)
        }
			break;

			case "email":
			 if( !validateEmail(val) )
			 {
			  	alerts.push(
            ( message == '' ? "Please enter a valid email address" : message )
          );
          addHint(field)
			  } else {
          removeHint(field)
        }
			break;

			case "number":
			 if( !validateTel(val) )
			 {
			  	alerts.push(
            ( message == '' ? "Please enter a valid telephone number" : message )
          );
          addHint(field)
			  } else {
          removeHint(field)
        }
			break;

      case "link":
			 if( !validateLink(val) )
			 {
			  	alerts.push(
            ( message == '' ? "Please enter a valid link for "+a.ucwords() : message )
          );
          addHint(field)
			  } else {
          removeHint(field)
        }
			break;

      case "date":
			 if( !validateDate(val) )
			 {
			  	alerts.push(
            ( message == '' ? "Please enter a valid date for "+a.ucwords() : message )
          );
          addHint(field)
			  } else {
          removeHint(field)
        }
			break;


			default:

			break;

		}

	}

  if( alerts.length > 0 )	{
	   alert("Please correct the following fields:\n\n"+alerts.join("\n"));
	   return false;
	}
	else
	{
    return true;
	}

}


/* CHeckout */

function validate_checkout(formObj) {

  var required = {
		name:["string",''],
		email:["email",''],
		address:['string',''],
		telephone:['number','']
	}

  return validate(formObj,required);

}

/* Home Page Form */

function validate_home(formObj){

	var required = {
		content:['string',""],
		link1:['link',""],
		link2:['link',""],
		link3:['link',""]
	}

  return validate(formObj,required);

}

/* Exhibition */

function validate_exhibition(formObj){

	var required = {
		name:['string',""],
		location:['string',""],
		start_date:['date',"Enter start date as dd/mm/yyyy"],
    end_date:['date',"Enter end date as dd/mm/yyyy"]
	}

  return validate(formObj,required);
}

/* Product */

function validate_product(formObj){


  if( formObj.elements['action'].value == "update" )
	{
		var required = {
      name:['string',""],
      description:['string',""],
      price:['price',""]
    }
	}
	else
	{
		var required = {
      name:['string',""],
      description:['string',""],
      price:['price',""],
      image:['string','select an image']
    }
	}

  return validate(formObj,required);

}

/* Collection */

function validate_collection(formObj){

	var required = {
		name:['string',""]
	}

  return validate(formObj,required);

}

/* Collection */

function validate_artist(formObj){

	var required = {
		name:['string',""]
	}

  return validate(formObj,required);

}

/* Ticker */

function validate_ticker(formObj){

	var required = {

		name1:['string',""],
    name2:['string',""],
    name3:['string',""],
    name4:['string',""],
    name5:['string',""],

    description1:['string',""],
    description2:['string',""],
    description3:['string',""],
    description4:['string',""],
    description5:['string',""],

    when1:['string',""],
    when2:['string',""],
    when3:['string',""],
    when4:['string',""],
    when5:['string',""],

    link1:['string',""],
    link2:['string',""],
    link3:['string',""],
    link4:['string',""],
    link5:['string',""]


	}

  var elements = formObj.elements;

  if(
    elements['visible1'].checked
    || elements['visible2'].checked
    || elements['visible3'].checked
    || elements['visible4'].checked
    || elements['visible5'].checked
    )
  {
     return validate(formObj,required);
  }
  else
  {
     alert("Please select at least one item to be visible");
     return false;
  }
}

/* Add Artists Page */
function validate_artist(formObj) {


  var required = {
		name:['string',""]
	}

  return validate(formObj,required);

}
/* Category */
function validate_category(formObj) {


  var required = {
		name:['string',""]
	}

  return validate(formObj,required);

}




