/* ----------------------------
		Requires jQuery
---------------------------- */

$(document).ready(function(){
	$('input,textarea').keypress(function(){
		try{
			this.form.elements.pv.value='verified';
		} catch(e){}
	});
	// Handle max words on textareas
	$('textarea[maxwords]').keypress(function(e){
		$(this).parent().removeClass('validation_warning');
		$('p.warning',$(this).parent()).remove();
		words = this.value.split(' ').length;
		if (e.which !== 8) {
			maxWords = $(this).attr('maxwords');
			if (words > maxWords) {
				addWarning(this,"Please limit your input to "+maxWords+" words.");
				return false;
			}
		}
		$('#words').html(words);
	});
	
	$('textarea[maxwords]').keyup(function() {
		$(this).parent().removeClass('validation_warning');
		$('p.warning',$(this).parent()).remove();
		words = this.value.split(' ');
		num_words = words.length;
		maxWords = $(this).attr('maxwords');
		if (num_words > maxWords) {
			addWarning(this,"Please limit your input to "+maxWords+" words.");
			strTruncated = '';
			for (i=0; i<maxWords; i++) {
				strTruncated = strTruncated + words[i] + ' ';
			}
			this.value = strTruncated;
		}
	});
});

function removeWarnings(f) {
	$('p.warning',f).remove();
	$('.validation_warning',f).removeClass('validation_warning');
}

function fnValidate(f) {
	try {
		//Get rid of existing warnings
		removeWarnings(f);
		top.strFirstFailure = '';
		top.bValid = true;
		
		//Loop through all fields
		$(':input',f).each(function(){
			//console.log(this.name);
			validateField(this,f);
		});
		
		if (!top.bValid) f[top.strFirstFailure];
		return top.bValid;
	} catch(e) {
		alert(e);
		return false;
	}
}

function validateUserInfo(f) {
	
	//Get rid of existing warnings
	$('p.warning').remove();
	$('.validation_warning').removeClass('validation_warning');
	top.strFirstFailure = '';
	top.bValid = true;
	
	//Loop through all billing address fields
	$('#billing_info :input').each(function(){
		//console.log(this.name);
		validateField(this);
	});
	
	//Loop through all billing address fields, IF NECESSARY
	if (!$('#shipping_sameas_billing').attr('checked')) {
		
		$('#shipping_address :input').each(function(){
			//console.log(this.name);
			validateField(this);
		});
	}
	
	if (!top.bValid) eval('f.'+top.strFirstFailure+'.focus()');
	return top.bValid;
}

function validateField(oInput,f) {
	if ($(oInput).attr('required') == 'required') {
		if ($(oInput).attr('type') == 'checkbox') {
			if (!oInput.checked) {
				addWarning(oInput);
				top.bValid = false;
				if (top.strFirstFailure == '') top.strFirstFailure = oInput.name;
			}
		} else if($(oInput).attr('type') == 'radio') {
			if (!getRadioOrCheckboxValue(f,oInput.name)) {
				addWarning(oInput);
				top.bValid = false;
				if (top.strFirstFailure == '') top.strFirstFailure = oInput.name;
			}
		} else {
			if (oInput.value == '') {
				addWarning(oInput);
				top.bValid = false;
				if (top.strFirstFailure == '') top.strFirstFailure = oInput.name;
			}
		}
	}
	if (oInput.value !== '') {
		if ($(oInput).attr('validationtype') == 'email') {
			if (!isValidEmail(oInput.value)) {
				addWarning(oInput,'E-mail must be a valid address in the format <em>user@website.com</em>');
				top.bValid = false;
				if (top.strFirstFailure == '') top.strFirstFailure = oInput.name;
			}
		}
		if ($(oInput).attr('validationtype') == 'phone') {
			if (oInput.value < 10 || !isNumeric(oInput.value)) {
				addWarning(oInput,'Phone number must only contain numbers, spaces, dashes and parentheses.');
				top.bValid = false;
				if (top.strFirstFailure == '') top.strFirstFailure = oInput.name;
			}
		}
		if ($(oInput).attr('validationtype') == 'zip') {
			if (oInput.value < 5 || !isNumeric(oInput.value)) {
				addWarning(oInput);
				top.bValid = false;
				if (top.strFirstFailure == '') top.strFirstFailure = oInput.name;
			}
		}
		if ($(oInput).attr('validationtype') == 'number') {
			if (!isNumeric(oInput.value)) {
				addWarning(oInput);
				top.bValid = false;
				if (top.strFirstFailure == '') top.strFirstFailure = oInput.name;
			}
		}
	}
}

function isNumeric(val) {
	var ValidChars = "0123456789.-()";
	for (i=0; i<val.length; i++) if (ValidChars.indexOf(val.charAt(i)) == -1) return false;
	return true;
}

function isValidEmail(val) {
	var iLen = val.length;
	if 	((iLen < 6) || (val.indexOf('@') < 1) || ((val.charAt(iLen - 3) != '.') && (val.charAt(iLen - 4) != '.') && (val.charAt(iLen - 5) != '.')) ) return false;
	return true;
}

function getRadioOrCheckboxValue(f,strName){
	var colEl = f.elements;
	var arValue = [];
	for (var i=0; i<colEl.length; i++){
		el = colEl[i];
		if (el.name && (el.name == strName) && el.checked) arValue[arValue.length]=el.value;
	}
	return arValue.join(',');
}

function addWarning(oInput, strWarning){
	if (!strWarning || strWarning.length < 1) {
	  if (oInput.title.length < 1) {
	    strWarning = "A valid "+oInput.name+" is required.";
	  } else {
	    strWarning = oInput.title;
	  }
	}
	$(oInput).addClass('validation_warning');
	$(oInput).after('<p class="warning">'+strWarning+'</p>');
}
