/*********************************************
Fossil.com validation plugin.com
2010 ian brunner
*********************************************/

var isMSIE = /*@cc_on!@*/false;

/*********************************************
Add rules/validation based on css tags
*********************************************/
$(document).ready(function() {
	//create error tooltip
	$('body').prepend('<div id="errorMessage"><div id="messageContent"></div><div id="valArrow"></div><!--[if lte IE 6.5]><iframe></iframe><![endif]--></div>');
});

/*********************************************
Rules object
required: object, message
optional: options object
*********************************************/
jQuery.rules = {

	'required' : function(obj, message) {
		var value = $(obj).val().replace(/^\s+|\s+$/, '');
		if(value == null || value == '') {
			$(obj).data('errorMessage', message);
			return false;
		}else{
			return true;
		}
	},

	'minLength' : function(obj, message, options) {
		if($(obj).val().length < options.minLength) {
			$(obj).data('errorMessage', message);
			return false;
		} else {
			return true;
		}
	},

	'maxLength' : function(obj, message, options) {
		if($(obj).val().length > options.maxLength) {
			$(obj).data('errorMessage', message);
			return false;
		} else {
			return true;
		}
	},

	'number' : function(obj, message) {
		var valid = "0123456789";
		for (var i=0; i < $(obj).val().length; i++) {
			temp = "" + $(obj).val().substring(i, i+1);
			if (temp == "-") hyphencount++;
			if (valid.indexOf(temp) == "-1") {
				$(obj).data('errorMessage', message);
				return false;
			}
		}
		return true;
	},

	'zipNumber' : function(obj, message) {
		var valid = "0123456789-";
		var hyphencount = 0;

		if ($(obj).val().length != 5 && $(obj).val().length != 10) {
			$(obj).data('errorMessage', message);
			return false;
		}
		for (var i=0; i < $(obj).val().length; i++) {
			temp = "" + $(obj).val().substring(i, i+1);
			if (temp == "-") {
				hyphencount++;
			}
			if (valid.indexOf(temp) == "-1") {
				$(obj).data('errorMessage', message);
				return false;
			}
			if ((hyphencount > 1) || (($(obj).val().length==10) && ""+$(obj).val().charAt(5)!="-")) {
				$(obj).data('errorMessage', message);
				return false;
			}
		}
		return true;
	},

	'email' : function(obj, message) {
		var email = $(obj);
		var filter = new RegExp("^[a-z0-9_\-]+(\.[_a-z0-9\-]+)*@([_a-z0-9\-]+\.)+([a-z]{2}|aero|arpa|biz|com|coop|edu|gov|info|int|jobs|mil|museum|name|nato|net|org|pro|travel)$", "i");
		if (!(filter.test(email.val()))) {
			$(obj).data('errorMessage', message);
			return false;
		}
		return true;
	},

	'phone' : function(obj, message) {
		var phone = $(obj);
		var filter = /^(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$/;
		if (!(filter.test(phone.val()))) {
			$(obj).data('errorMessage', message);
			return false;
		}
		return true;
	},

	'password' : function(obj, message) {
		return true;
	},

	'passwordConsecutiveChars' : function(obj, message) {
		var regEx= /^(.)\1{3,}/;
		var test = !regEx.test($(obj).val());
		if (test) {
			return true;
		} else {
			$(obj).data('errorMessage', message);
			return false;
		}
	},
	'passwordSameChars' : function(obj, message) {
		var string = $(obj).val().toString();
		var chars = {};
		var maxAllowed = 4;
		for(var i = 0; i < string.length; i++){
			var character = string.charAt(i);
			if(chars[character] == undefined){
				chars[character] = 1;
			}else{
				chars[character] = chars[character] + 1;
				if (chars[character] > maxAllowed){
					$(obj).data('errorMessage', message);
					return false;
				}
			}
		}
		return true;
	},
	'passwordFormat' : function(obj, message) {
		if ($(obj).val().length == 0) {
			return true;
		}
		if ($(obj).val().length < 7) {
			$(obj).data('errorMessage', message);
			return false;
		}
		var regdigit=/[0-9]/;
		var test = regdigit.test($(obj).val());
		if (!test) {
			$(obj).data('errorMessage', message);
			return false;
		}
		var newString = $(obj).val().toUpperCase();
		var regChar=/[A-Z]/;
		var test = regChar.test(newString);
		if (!test) {
			$(obj).data('errorMessage', message);
			return false;
		} else {
			return true;
		}
	},

	'confirmation' : function(obj, message, options) {
		if($(obj).val() != $(options.selector).val()) {
			$(obj).data('errorMessage', message);
			return false;
		} else {
			return true;
		}
	},

	'giftCard' : function(obj, message) {
		var bGiftcardNumberError = false;
		var giftCardNumber = trim(obj.value);
		if (giftCardNumber.length != 19) {
			bGiftcardNumberError = true;
		}
		var prefix = giftCardNumber.substr(0, 6);
		if (prefix != "603571") {
			bGiftcardNumberError = true;
		}
		if (bGiftcardNumberError == false){
			return true;
		}else {
			$(obj).data('errorMessage', message);
			return false;
		}
	},

	'gcSecCode' : function(obj, message) {
		var gcSecCode = $.trim($(obj).val());
		if(checkCountDigits(gcSecCode, 3)==false && checkCountDigits(gcSecCode, 4)==false){
			$(obj).data('errorMessage', message);
			return false;
		}else{
			return true;
		}
	},

	'checkBox' : function(obj, message) {
		if($(obj).attr('checked') != 'checked') {
			$(obj).data('errorMessage', message);
			return false;
		}else{
			return true;
		}
	},

	'date_Day': function(obj, message) {
		regex = new RegExp('(0[1-9]|[12][0-9]|3[01])');
		if($(obj).val().match(regex)){
			return true;
		}
		else {
			$(obj).data('errorMessage', message);
			return false;
		}
	},

	'date_Month': function(obj, message) {
		regex = new RegExp('(0[1-9]|1[012])');
		if($(obj).val().match(regex)){
			return true;
		}
		else {
			$(obj).data('errorMessage', message);
			return false;
		}
	},

	'date_Year': function(obj, message) {
		regex = new RegExp('[0-9]{4}');
		if(($(obj).val().match(regex)) && ($(obj).val() <= Date().match(regex)) && ($(obj).val() > (Date().match(regex))- 120) ){
			return true;
		}
		else {
			$(obj).data('errorMessage', message);
			return false;
		}
	},

	'creditCardCVC': function(obj, message) {
		var cvcNumber = $.trim($(obj).val());
		if (checkCountDigits(cvcNumber, 3) == false && checkCountDigits(cvcNumber, 4) == false) {
			$(obj).data('errorMessage', message);
			return false;
		}
		else {
			return true;
		}
	},

	'creditCard': function(obj, message) {
		var ccNumber =  $.trim($(obj).val());
		if (checkCountDigits(ccNumber, 16) == false && checkCountDigits(ccNumber, 15) == false) {
			$(obj).data('errorMessage', message);
			return false;
		}
		else {
			return true;
		}
	},
	'creditCardAmex': function(obj, message) {
		var ccNumber =  $.trim($(obj).val());
		if (checkCountDigits(ccNumber, 15) == false) {
			$(obj).data('errorMessage', message);
			return false;
		}
		else {
			return true;
		}
	},

	'ccMonth': function(obj, message) {
		var current_date = new Date();
		var current_year = current_date.getFullYear();
		var current_month = current_date.getMonth() + 1;
		if ($(obj).val() >= parseInt(current_month, 10)) {
			return true;
		}
		else {
			if ($('#expYear').val() <= parseInt(current_year, 10)) {
				$(obj).data('errorMessage', message);
				return false;
			}
			else {
				return true;
			}
		}
	}
};

jQuery.rules = $.extend(jQuery.rules, FS.validationRules);

/*********************************************
Plugin Code
Settings:
errorStyle: css object
validStyle: css object
errorHandler: function
arguments: object, settings
*********************************************/
jQuery.fn.FSvalidate = function(options) {
	var defaults = {
		submit : true,
		validateOnBlur : true,
		validateOnChange : true,
		validateOnKeyup : true,
		trimText : true,
		errorColor : '#993300',
		validColor : '#999999',
		validLabelColor: '#666666',
		offsetLeft: 60,
		errorStyle : {backgroundColor: '#fff5dc'},
		validStyle : {backgroundColor: '#ffffff'},
		overrideClassName : 'none',
		fadeTime : 175,
		ajaxSubmit : false,
		ajaxMethod : 'post',
		ajaxSuccess : function(obj, settings) {
		},

		ajaxError: function(obj, settings) {
		},

		errorHandler : function(obj, settings) {
			//console.log('errorhandler');
			//set error message
			$('#errorMessage #messageContent').html($(obj).data('errorMessage'));
			//hide tooltip
			$('#errorMessage').hide();
			$(window).unbind('resize');
		},

		showValidation : function(obj, settings) {
			//remove all classes then add class if settings has override
			$('#errorMessage').removeClass();
			if( settings.overrideClassName != 'none' ) {
				$('#errorMessage').addClass(settings.overrideClassName);
			}

			//update error message
			$('#errorMessage #messageContent').html($(obj).data('errorMessage'));

			if (isMSIE) {
				var toolTipWidth = $('#errorMessage').width() -6;
				$('#errorMessage iframe').css('width', toolTipWidth+'px');
			}

			//reset size
			$("#errorMessage #messageContent").removeAttr("style").css('zIndex', '-3');
			$('#errorMessage').css({'left': '0px'}).css({'top': '0px'}).css({'display': 'inline-block'});
			$('#errorMessage #messageContent').css('white-space', 'nowrap').css('zIndex', '1000');
			var messageHeight = document.getElementById('errorMessage').offsetHeight; /*Must get error tooltip height before hiding it*/
			$('#errorMessage').css({'display': 'none'});

			//position element
			var offset = $(obj).offset();
			if ($(obj).data('offsetLeft')) {
				offset.left+=$(obj).data('offsetLeft');
			} else {
				offset.left+=settings.offsetLeft;
			}

			offset.top = $(obj).offset().top - messageHeight;
			windowResize(obj);
			$('#errorMessage').css({'left': offset.left+'px', 'top': offset.top+'px'});
			// Check if the current element is inside a modal and up the z-index so that it shows over the modal.
			if ($(obj).parents('#colorbox').length > 0) {
				$('#errorMessage').css("zIndex", '10000');
			}
			else {
				$('#errorMessage').css("zIndex", '1000');
			}
			//display element
			//console.log('fading in');
			$('#errorMessage').fadeIn(settings.fadeTime);
		},

		validHandler : function(obj, settings) {
			//hide tooltip
			$('#errorMessage').fadeOut(settings.fadeTime);
			//remove error class
			$(obj).removeClass('error');
			$(window).unbind('resize');
		},

		updateErrorMessage : function(obj, settings) {
			$('#errorMessage').fadeOut(settings.fadeTime, function(){
				$('#errorMessage #messageContent').html($(obj).data('errorMessage'));

				//re-position and re-size element
				var offset = $(obj).offset();
				if ($(obj).data('offsetLeft')) {
					offset.left+=$(obj).data('offsetLeft');
				} else {
					offset.left+=settings.offsetLeft;
				}
				$("#errorMessage #messageContent").removeAttr("style").css('zIndex', '-3');
				$('#errorMessage').css({'left': '0px'}).css({'top': '0px'}).css({'display': 'inline-block'});
				$('#errorMessage #messageContent').css('white-space', 'nowrap').css('zIndex', '1000');
				$('#errorMessage').css({'left': offset.left+'px'}).css({'top': (offset.top - document.getElementById('errorMessage').offsetHeight) +'px'});

				if (isMSIE) {
					var toolTipWidth = $('#errorMessage').width() -6;
					$('#errorMessage iframe').css('width', toolTipWidth+'px');
				}
			});
			$('#errorMessage').fadeIn(settings.fadeTime);
		}
	};
		var settings = $.extend( defaults, options);
		if (isMSIE) {
			settings.fadeTime = 0;
		}

		return this.each(function() {
			var obj = this;

			/* Functions */
			var tagValidation = function(element) {
				// PreventDefault Added to stop multiple submissions of Validated forms
				// If causing problems email jcota@fossil.com
					$(element).find(':button').click(function(e){
						e.preventDefault();
						if(FS.form.submitted === "" || typeof FS.form.submitted == "undefined" || FS.form.submitted === null){
							FS.form.submitted = true;

							$(element).submit();
						}
					});
				// PreventDefault Added to stop multiple submissions of Validated forms
				// If causing problems email jcota@fossil.com

				$(element).find('.required, .email, .zip, .phone, .password').FSvalidate(settings);

				//required
				$(element).find('.required').addRule({'name':'required', 'message': FS.local_lang.errors.required});

				//minlength
				$(element).find('input').each(function() {
					if ($(this).attr('minLength') > 0) {
						$(this).addRule({'name':'minLength', 'message': 'Minimum length: '+$(this).attr('minLength'), 'options' : {'minLength' : $(this).attr('minLength') }});
					}
				});

				//first name
				$(element).find('.firstName.required').addRule({'name':'required', 'message': FS.local_lang.errors.firstNameEmpty});
				//last name
				$(element).find('.lastName.required').addRule({'name':'required', 'message': FS.local_lang.errors.lastNameEmpty});
				//address
				$(element).find('.address1.required').addRule({'name':'required', 'message': FS.local_lang.errors.validAddress});
				//city
				$(element).find('.city.required').addRule({'name':'required', 'message': FS.local_lang.errors.cityEmpty});
				//state
				$(element).find('.state.required').addRule({'name':'required', 'message': FS.local_lang.errors.stateEmpty});
				//zip code
				$(element).find('.zip.required').addRule({'name':'required', 'message': FS.local_lang.errors.validZipcode});
				$(element).find('.zip').addRule({'name':'minLength', 'message': FS.local_lang.errors.validZipcode, 'options' : {'minLength' : FS.zipMinLength}});
				$(element).find('.zip').addRule({'name':'zipNumber', 'message': FS.local_lang.errors.validZipcode});
				//email
				$(element).find('.email.required').addRule({'name':'required', 'message': FS.local_lang.errors.validEmail});
				$(element).find('.email').addRule({'name':'email', 'message': FS.local_lang.errors.validEmail});
				//phone
				$(element).find('.phone').addRule({'name':'phone', 'message': FS.local_lang.errors.validPhoneNumber});
				//password
				$(element).find('.password.required').addRule({'name':'required', 'message': FS.local_lang.errors.validPassword});
				//$(element).find('.password').addRule({'name':'password', 'message': errMapMsg_4});
				$(element).find('.password').addRule({'name':'passwordSameChars', 'message': FS.local_lang.errors.passwordSameChars});
				$(element).find('.password').addRule({'name':'passwordConsecutiveChars', 'message': FS.local_lang.errors.passwordConsecutiveChars});
				$(element).find('.password').addRule({'name':'passwordFormat', 'message': FS.local_lang.errors.passwordFormat});

				//password
				$(element).find('.passwordConfirmation.required').addRule({'name':'required', 'message': FS.local_lang.errors.validPassConf});
				$(element).find('.passwordConfirmation').addRule({'name':'password', 'message': FS.local_lang.errors.passwordMatch});

				//	Added to fix MANTIS TICKET #6677
				var disabled = $(element).find('.disabled')
				for ( var i = 0; i < disabled.length; i++){
					$(disabled[i]).disableValidation();
				}
				//	End fix for MANTIS TICKET #6677

			};

			var valid = function(element) {
				//if validation is enabled
				if($(element).data('hasValidation') == 'true'){
					//if has validation
					if($(element).data('rules') != null){
						var dataRulesArray = $(element).data('rules');
						//for each function in object rules
						for(i = 0; i < dataRulesArray.length; i++){
							//if false
							if(!window['$']['rules'][dataRulesArray[i].name](element, dataRulesArray[i].message, dataRulesArray[i].options)) return false;
						}
						return true;
					}else{
						return true;
					}
				}else{
					return true;
				}

			};

			var formValid = function() {
				$(obj).find('.validate').trigger('findErrors');
				if($(obj).find('.error').length > 0){
					$(obj).find('.error').trigger('showError');

					// Reset Form Submission Flag because of error
					FS.form.submitted = '';


					//$(obj).find('.error').css(settings.errorStyle);
					return false;
				}else{
					return true;
				}
				return false;
			};

			var validateElement = function() {
				if(valid(obj)){
					if($(obj).hasClass('error')){
						settings.validHandler(obj, settings);
					}
				}else{
					//add class
					$(obj).addClass('error');
					settings.errorHandler(obj, settings);
				}
			};

			var findErrors = function() {
				if(!valid(obj)) $(obj).addClass('error');
			};

			/* Main Code */
			var nodeName = $(obj)[0].nodeName;

			//if form field
			//validate input
			if (nodeName == 'FORM') {
				tagValidation(obj);
				//bind validate form
				$(obj).bind('formValid', function(){formValid();});
				//bind submit handler
				$(obj).submit(function(){
					if(formValid()){
						if($(obj).data('prepareSubmit') != undefined){
							$(obj).data('prepareSubmit')();
						}
						if(settings.trimText){
							$(obj).find('input').val(function(index, value) {
								if($(this).attr('type') == 'password'){
									return value;
								}
								return value.trim();
							});

						}
						//remove special return characters from text areas
						//$(obj).find('textarea').val(escapeVal($(this).val(),' '));
						if(settings.ajaxSubmit){
							console.log('plugin is using ajax submit');
							$.ajax({
								url: $(obj).attr('action'),
								type: settings.ajaxMethod,
								data: $(form).serialize(),
								dataType: 'text',
								cache:false,
								success: function(html){
									settings.ajaxError(obj, settings, html);
								},
								error: settings.ajaxError(obj, settings)
							});
						//}else if(settings.submit){
						}else if ($(obj).attr("action") === "#") {
							return false;
						}else{
							obj.submit();
						}
						return false;
					}else{
						//console.log('scrolltop: ' + );
						//console.log('offset: ' + $(obj).find('.error:eq(0)').offset().top);
						var errorOffset = $(obj).find('.error:eq(0)').offset().top - 50;
						if($('html, body').scrollTop() > errorOffset){
							$('html, body').animate({
								scrollTop:errorOffset
							}, {
								complete: function() {
									$(obj).find('.error:eq(0)').focus();
								},
								duration: "slow"
							});
						}
						else{
							$(obj).find('.error:eq(0)').focus();
						}
						return false;
					}
				});
			}

			//if input field
			if (nodeName == 'INPUT' || nodeName == 'TEXTAREA' || nodeName == 'SELECT' ) {

				//bind find errors event
				$(obj).bind('findErrors', function(){findErrors();});

				//bind show validate event
				$(obj).bind('showError', function(){settings.errorHandler(obj, settings);});

				//bind show tooltip event
				$(obj).bind('showValidation', function(){settings.showValidation(obj, settings);});

				//bind validate event (finds errors, shows validation)
				$(obj).bind('validate', function(){
					validateElement();
				});

				/*
				 * Check for defined data object 'hasValidation'
				 * if not found create hasValidation and set to true
				 * Added to fix MANTIS TICKET #6677
				 */
				if($(obj).data('hasValidation') == undefined){
					$.data(this, 'hasValidation', 'true');
				}
				//	End Fix for MANTIS TICKET #6677

				//add validate class
				$(obj).addClass('validate');

				//add tooltip element
				//$(obj).parent().append('<div class="errorMessage"><span></span></div>');
				//$(obj).parent().find('#errorMessage').wrap('<div class="errorWrapper" style="position: relative;" />');

				//attach blur listener
				if (settings.validateOnBlur) {
					$(obj).blur(function(event){
						validateElement();
					});
				}

				//add change listener
				if (settings.validateOnChange) {
					$(obj).change(function(){
						if($(obj).is('input')){return false;} /* Disable change on inputs, causes double with key events */
						if($(obj).hasClass('error')){
							if(valid($(obj))){
								settings.validHandler(obj, settings);
							}
						}
					});
				}

				//add keyup listener
				if (settings.validateOnKeyup) {
					$(obj).keyup(function(event){
						//Don't run keyup function on tabs, command, shift, or control keys. Prevents strobing and duplicate events on combo commands.
						if ((event.keyCode == 9)||(event.keyCode == 16)||(event.keyCode == 17)||(event.keyCode == 91)||(event.keyCode == 93)){return;}
						if ($(obj).hasClass('error')) {
							if (valid($(obj))) {
								settings.validHandler(obj, settings);
							} else if($(obj).data('errorMessage')!= $('#messageContent').html()) {
								settings.updateErrorMessage(obj, settings);
							}
						}
						event.stopImmediatePropagation();
					});
				}

				//disable enter key submit
				// Removed for ticket 3809
//				$(obj).keypress(function(event) {
//					if (event.keyCode == '13') {
//						return false;
//					} else {
//						return true;
//					}
//				});

				//add focus listener
				$(obj).focus(function(){
					if($(obj).hasClass('error')){
						//show tooltip
						//$(obj).parent().find('.errorWrapper').fadeIn(settings.fadeTime);
						//$('#errorMessage').fadeIn(settings.fadeTime);
						settings.showValidation(obj, settings);
					}
				});
			}

		});
	};

/*********************************************
'Add Rule' plugin adds a rule to an element.
Arguments (single object):
'rule' : name,
'message' : custom message,
'options' : rule-specific criteria(object)
*********************************************/
jQuery.fn.addRule = function(options) {
	var obj = this;
	var defaults = {};
	var settings = $.extend({}, defaults, options);
	return this.each(function(){
		var dataRulesArray = [];
		//if has rules
		if($(this).data('rules')){
			//create rules object
			dataRulesArray = $(this).data('rules');
		}
		var hasRule = false;
		var i = 0;
		while(!hasRule && i < dataRulesArray.length){
			if(dataRulesArray[i].name == settings.name) hasRule = true;
			if(!hasRule) i++;
		}
		//if has same rule
		if(hasRule){
			//replace object
			dataRulesArray[i] = settings;
		}else{
			//add to data
			dataRulesArray.push(settings);
		}
		//rewrite rules object
		$(this).data('rules', dataRulesArray);
	});
};

jQuery.fn.removeRule = function(ruleNames) {
	var obj = $(this);
	var ruleNames = ruleNames.split(" ");
	return this.each(function() {
		var rules = obj.data('rules');
		var ruleIndex = new Array();

		if (typeof rules !== "undefined") {
			for (var x in rules) {
				if (jQuery.inArray(rules[x].name, ruleNames) > -1) {
					ruleIndex.push(x);
				}
			}
			ruleIndex.sort(function(a, b) { return b - a; });
			for (var y in ruleIndex) {
				rules.splice(ruleIndex[y], 1);
			}
			obj.data('rules', rules);
		}
	});
};

jQuery.fn.validate = function(options) {
	var obj = this;
	var defaults = {};
	var settings = $.extend({}, defaults, options);
	$(obj).trigger('validate');
	if($(obj).find('.error').length == 0){
		return true;
	}else{
		return false;
	}
};

jQuery.fn.valid = function(options) {
	var obj = this;
	var defaults = {};
	var settings = $.extend({}, defaults, options);
	$(obj).trigger('formValid');
	if($(obj).find('.error:not(div)').length == 0){
		//console.log('valid');
		return true;
	}else{
		//console.log('not valid');
		return false;
	}
};

jQuery.fn.disableValidation = function(options) {
	var obj = this;
	var defaults = {};
	var settings = $.extend({}, defaults, options);
	return this.each(function(){
		$.data(this, 'hasValidation', 'false');
		$(obj).trigger('validate');
	});
};

jQuery.fn.enableValidation = function(options) {
	var obj = this;
	var defaults = {};
	var settings = $.extend({}, defaults, options);
	return this.each(function(){
		$.data(this, 'hasValidation', 'true');
	});
};

jQuery.fn.validationOffsetLeft = function(offset) {
	var obj = this;
	var defaults = {};
	var settings = $.extend({}, defaults, offset);
	return this.each(function(){
		$.data(this, 'offsetLeft', offset);
	});
};

//window resize stuff
var windowResize = function(obj){
	var newLeft = $(obj).offset().left;
	$(window).bind('resize', function() {
		if($(obj).data('offsetLeft')){
			newLeft+=$(obj).data('offsetLeft');
		}else{
			newLeft+=settings.offsetLeft;
		}
		$('#errorMessage').css('left', newLeft+'px');
	});
};

//trim function
String.prototype.trim = function () {
	return this.replace(/^\s*/, "").replace(/\s*$/, "");
};



//encodes special return characters in text areas.
function escapeVal(text,replaceWith){

	text = escape(text); //encode textarea string's carriage returns

	for (i=0; i<text.length; i++) {
		//loop through string, replacing carriage return encoding with HTML break tag
		if (text.indexOf("%0D%0A") > -1) {
			//Windows encodes returns as \r\n hex
			text = text.replace("%0D%0A", replaceWith);
		}
		else if (text.indexOf("%0A") > -1) {
			//Unix encodes returns as \n hex
			text = text.replace("%0A", replaceWith);
		}
		else if (text.indexOf("%0D") > -1) {
			//Macintosh encodes returns as \r hex
			text = text.replace("%0D", replaceWith);
		}
	}
	text=unescape(text); //unescape all other encoded characters
	return text;
}

