if (!com) var com = {};
if (!com.principle) com.principle = {};

com.principle.ContactFormValidation = function (){
	var settings = {};
	var view = {};
	var data = {};
	
	function initilize(options) {
		settings = $.extend({}, settings, options);
		setView();
		setEventlisteners();
	}
	
	function setView() {
		view.form = settings.form;
		view.fullName = view.form.find('#fullName');
		view.emailAddr = view.form.find('#emailAddr');
		view.firstReason = view.form.find('#firstReason');
		view.reason = view.form.find('.reason');
		view.reasonOther = view.form.find('.reasonOther');
		view.message = view.form.find('#message');
		view.btnSubmit = view.form.find('#btnSubmit');
	};

	function setEventlisteners() {

		view.btnSubmit.click(function(e){
			//view.errMsgBack.hide();
			$('#contactForm .errMsg').css({'display': 'none'});
			$('#contactForm .text_field_bg.error').removeClass('error');
			
			if (getInvalidFields().length > 0) {
				$.each(getInvalidFields(), function() {

					this.closest('.text_field_bg').addClass('error');
					this.closest('.fieldBracket').find('.errMsg').css({'display': 'block'});
				});
				return false;
			}
			ajaxSubmit();
			return false;
		});			
	}
	
	
	function getInvalidFields() {
		var invalidFields = [];
		
		if (($.trim(view.fullName.val())).length == 0) {
			invalidFields.push(view.fullName);
		}
		if (! /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})$/.test(view.emailAddr.val())) {
			invalidFields.push(view.emailAddr);
		}
		if (($.trim(view.message.val())).length == 0) {
			invalidFields.push(view.message);
		}
		if ( countFellowChecks(view.firstReason[0]) == 0 ) {
			invalidFields.push(view.reason);
		}
		return invalidFields;
	}

	function countFellowChecks(field)
	{
		var fellows = field.form[field.name];
		var count = 0;
		for(var i = 0; i < fellows.length; ++i) {
			if( fellows[i].checked )
				++count;
		}

		return count;
	} 
	
	function ajaxSubmit() {
		getFormData();
		$.ajax({
			type: "POST", 
			url: settings.url,
			data: data.queryString,
			success: function(d) {
				if ( d && d.header && d.header.success ) {
					$('#contact_1love').hide();
					$('#contact_1love_done').show();
				}
				else {
					$('#contact_1love').hide();
					$('#contact_1love_error').show();
				}
			}
		});
	}
	
	function getFormData() {
		data.dataObject = {};
		data.dataObject[view.fullName.attr('name')] = view.fullName.val();
		data.dataObject[view.emailAddr.attr('name')] = view.emailAddr.val();
		data.dataObject[view.message.attr('name')] = view.message.val();
		data.dataObject[view.reasonOther.attr('name')] = view.reasonOther.val();
		$(view.reason).each(function(i, el) {
			if ($(el).attr('checked')) { 
				if ( data.dataObject[$(el).attr('name')] ) {
					if ( !( typeof(data.dataObject[$(el).attr('name')]) == 'object' && typeof(data.dataObject[$(el).attr('name')].length) == 'number' ) ) data.dataObject[$(el).attr('name')] = [ data.dataObject[$(el).attr('name')] ];
					data.dataObject[$(el).attr('name')].push($(el).val());
				}
				else data.dataObject[$(el).attr('name')] = [$(el).val()];
			}
		})
		data.queryString = $.param(data.dataObject);
	}

	return {
		init: function(options) {
			initilize(options);
		}
	}
}()

com.principle.Validation = function (){
	var settings = {};
	var view = {};
	var data = {};
	
	function initilize(options) {
		settings = $.extend({}, settings, options);
		setView();
		setEventlisteners();
	}
	
	function setView() {
		view.form = settings.form;
		//view.errMsgBack = view.form.find('.errMsgBack');
		view.username = view.form.find('#username');
		view.password = view.form.find('#password');
		view.confirmPassword = view.form.find('#confirmPassword');
		view.email = view.form.find('#email');
		view.mobileNumber = view.form.find('#mobileNumber');
		//view.birthdate = view.form.find('#birthdate');
		view.birthdate = view.form.find('.birthdate');
		view.birthDateM = view.form.find('#birthDateM');
		view.birthDateD = view.form.find('#birthDateD');
		view.birthDateY = view.form.find('#birthDateY');
		view.sendUpdates = view.form.find('#sendUpdates');
		view.agreeTerms = view.form.find('#agreeTerms');
		view.btnSubmit = view.form.find('#btnSubmit');
	};

	function setEventlisteners() {
		view.btnSubmit.click(function(e){
			//view.errMsgBack.hide();
			$('#nonFacebookSignupForm .text_field_bg').removeClass('error');
			$('#nonFacebookSignupForm .errMsg').css({'display': 'none'});
			$('#nonFacebookSignupForm .spec').css({'display': 'block'});
			//view.valOfBirthdate = $.trim(view.birthDateM.val()) + $.trim(view.birthDateD.val()) + $.trim(view.birthDateY.val());
			view.valOfMobileNumber = $.trim(view.mobileNumber.val().replace(/\D/g,' '));
			if (getInvalidFields().length > 0) {
				$.each(getInvalidFields(), function() {
					this.parents('.field').find('.text_field_bg').addClass('error');
					this.parents('.field').find('.spec').css({'display': 'none'});
					this.parents('.field').find('.errMsg').css({'display': 'block'});
				});
				return false;
			}
			ajaxSubmit();
			return false;
		});			
	}
	
	
	function getInvalidFields() {
		var invalidFields = [];
		if (($.trim(view.username.val())).length < 4) {
			invalidFields.push(view.username);
			view.username.parents('.field').find('.errMsg').text(com.principle.onelove.Config.signupClientErr.username.wrongLength)
		}
		if ( $.trim(view.username.val()).match(/\s/) ) {
			invalidFields.push(view.username);
			view.username.parents('.field').find('.errMsg').text(com.principle.onelove.Config.signupClientErr.username.spaces)
		}
		if (($.trim(view.password.val())).length < 6) {
			invalidFields.push(view.password);
		}
		if (($.trim(view.confirmPassword.val())) != ($.trim(view.password.val()))) {
			invalidFields.push(view.confirmPassword);
		}
		if (! /^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})$/.test(view.email.val())) {
			invalidFields.push(view.email);
			view.email.parents('.field').find('.errMsg').text(com.principle.onelove.Config.signupClientErr.email.invalid)
		}
//		if (! /^[0-9]+$/.test(view.mobileNumber.val())) {
//			invalidFields.push(view.mobileNumber);
//		}
//		if (($.trim(view.valOfMobileNumber)).length < 10) {
//			invalidFields.push(view.mobileNumber);
//		}
		if ( ! /^([0,1]?\d{1})$/.test(view.birthDateM.val()) ) {
			invalidFields.push(view.birthdate);
		}
		if ( ! /^(([0-2]?\d{1})|([3][0,1]{1}))$/.test(view.birthDateD.val()) ) {
			invalidFields.push(view.birthdate);
		}
		if ( ! /^(1|2)\d{3}$/.test(view.birthDateY.val()) ) {
			invalidFields.push(view.birthdate);
		}
		if (!(view.agreeTerms.attr('checked'))) {
			invalidFields.push(view.agreeTerms);
		}
		return invalidFields;
	}
	

	function ajaxSubmit() {
		getFormData();	
		$.ajax({
			type: "POST", 
			url: settings.url,
			data: data.queryString,
			success: function(d) {
				if ( d && d.header && d.header.success ) {
					view.form.hide();
					$('#signupAlmostDone .chkEmail .email').text(view.email.val());
					$('#signupAlmostDone').show();
				}
				if ( d && d.header && d.header.success == false ) {
					if ( d.header.reason && d.header.reason.code ) {
						var errMsg = com.principle.onelove.Config.errMsg[d.header.reason.code].msg;
						var elm = com.principle.onelove.Config.errMsg[d.header.reason.code].elm;
						//view.errMsgBack.text(errMsg).show();
						$(view[elm]).parents('.field').find('.errMsg').text(errMsg);
						$(view[elm]).parents('.field').find('.text_field_bg').addClass('error');
						$(view[elm]).parents('.field').find('.spec').css({'display': 'none'});
						$(view[elm]).parents('.field').find('.errMsg').css({'display': 'block'});
					}
				}
			}
		});
	}
	
	function getFormData() {
		data.dataObject = {};
		data.dataObject[view.username.attr('name')] = view.username.val();
		data.dataObject[view.password.attr('name')] = view.password.val();
		data.dataObject[view.email.attr('name')] = view.email.val();
		//data.dataObject[view.mobileNumber.attr('name')] = view.mobileNumber.val();
		data.dataObject[view.mobileNumber.attr('name')] = view.valOfMobileNumber;
		//data.dataObject[view.birthdate.attr('name')] = view.birthdate.val();
		data.dataObject['birthDate'] = view.birthDateD.val() + '-' + view.birthDateM.val() + '-' + view.birthDateY.val();
		if (view.sendUpdates.attr('checked')) data.dataObject[view.sendUpdates.attr('name')] = view.sendUpdates.val();
		if (view.agreeTerms.attr('checked')) data.dataObject[view.agreeTerms.attr('name')] = view.agreeTerms.val();
		
		data.queryString = $.param(data.dataObject);
	}
	
	return {
		init: function(options) {
			initilize(options);
		}
	}
}()

com.principle.ajaxLogin = function() {
	var settings = {};
	var view = {};
	var data = {};
	
	function initilize(options) {
		settings = $.extend({}, settings, options);
		setView();
		setEventlisteners();
	}
	
	function setView() {
		view.form = settings.form;
		view.errMsg = view.form.find('.errMsg');
		view.username = view.form.find('#loginUsername');
		view.password = view.form.find('#loginPassword');
		view.rememberMe = view.form.find('#loginRememberMe');
		view.btnSubmit = view.form.find('#btnSubmitLogin');
	};
	
	function setEventlisteners() {
		view.btnSubmit.click(function(e){
			ajaxSubmit();
			return false;
		})
		
	};
	
	function ajaxSubmit() {
		getFormData();	
		
		$.ajax({
			type: "POST", 
			url: settings.url,
			data: data.queryString,
			success: function(d) {
				if ( d && d.header && d.header.success ) {
					//window.location.href = 'profile-welcome.php';
					window.location.reload();
				}
				if ( d && d.header && d.header.success == false ) {
					if ( d.header.reason && d.header.reason.code ) {
						var errMsg = com.principle.onelove.Config.errMsg[d.header.reason.code];
						view.errMsg.text(errMsg).show();
					}
				}
			}
		});
		
	}
	
	function getFormData() {
		data.dataObject = {};
		data.dataObject[view.username.attr('name')] = view.username.val();
		data.dataObject[view.password.attr('name')] = view.password.val();
		if (view.rememberMe.attr('checked')) data.dataObject[view.rememberMe.attr('name')] = view.rememberMe.val();			
		
		data.queryString = $.param(data.dataObject);
	}
	
	return {
		init: function(options) {
			initilize(options);
		}
	}
}();

com.principle.ajaxResetPassword = function() {
	var settings = {};
	var view = {};
	var data = {};
	
	function initilize(options) {
		settings = $.extend({}, settings, options);
		setView();
		setEventlisteners();
	}
	
	function setView() {
		view.form = settings.form;
		view.errMsg = view.form.find('.errMsg');
		view.email = view.form.find('#resetPwEmail');
		view.btnSubmit = view.form.find('#btnReSubmitEmail');
	};
	
	function setEventlisteners() {
		view.btnSubmit.click(function(e){
			ajaxSubmit();
			return false;
		})
	};
	
	function ajaxSubmit() {
		getFormData();	
		
		$.ajax({
			type: "POST", 
			url: settings.url,
			data: data.queryString,
			success: function(d) {
				if ( d && d.header && d.header.success ) {
					view.form.hide();
					$('#loginFormWrapper #resetPwDone').show();
				}
				if ( d && d.header && d.header.success == false ) {
					if ( d.header.reason && d.header.reason.code ) {
						var errMsg = com.principle.onelove.Config.errMsg[d.header.reason.code];
						view.errMsg.text(errMsg).show();
					}
				}
			}
		});
		
	}
	
	function getFormData() {
		data.dataObject = {};
		data.dataObject[view.email.attr('name')] = view.email.val();
		data.queryString = $.param(data.dataObject);
	}
	
	return {
		init: function(options) {
			initilize(options);
		}
	}
}();


com.principle.psswordUpdateValidation = function (){
	
	var settings = {};
	var view = {};
	
	function initilize(options) {
		settings = $.extend({}, settings, options);
		setView();
		setEventListeners();
	}
	
	function setView() {
		view.form = settings.form;
		view.updatePassword = view.form.find('#updatePassword');
		view.updateConfirmPw = view.form.find('#updateConfirmPw');
		view.text_field_bg = view.form.find('.text_field_bg');
		view.errMsg = view.form.find('.errMsg');
		view.spec = view.form.find('.spec');
		view.btnSubmit = view.form.find('#btnSubmitPwUpdate');
	};

	function validate() {
		
		if (($.trim($(view.updatePassword).val())).length < 6) {
			throw {
				element: $(view.updatePassword),
				message: com.principle.onelove.Config.pwUpdateErrMsg.invalid
			}
		}
		
		if (($.trim($(view.updateConfirmPw).val())) != ($.trim($(view.updatePassword).val()))) {
			throw {
				element: $(view.updateConfirmPw),
				message: com.principle.onelove.Config.pwUpdateErrMsg.mismatch
			}
		}
	}
	
	function setEventListeners() {
		
		$(view.btnSubmit).click(function(e){
			try {
				$(view.text_field_bg).removeClass('error');
				$(view.errMsg).css({'display': 'none'});
				$(view.spec).css({'display': 'block'});
				validate();
				$(view.form).submit();
			} catch (err) {
				$(err.element).parents('.field').find('.text_field_bg').addClass('error');
				$(err.element).parents('.field').find('.spec').css({'display': 'none'});
				$(err.element).parents('.field').find('.errMsg').text(err.message).css({'display': 'block'});
				try { err.element.focus() } catch (e) {}
			}
			return false;
		});			
	}
	
	return {
		init: function(options) {
			initilize(options);
		}
	}
}();

com.principle.Date = function() {
	var settings = {
	    month: {			
	    	en: ['January', 'Febury', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']
    	}
    };
	var view = {};
	var data = {};
	
	function initilize(options) {
		settings = $.extend({}, settings, options);
		setData();
		setView();
	}
	
	function setView() {
		view = settings.view || {};
		try {
			view.year.text(data.year);
		} catch(e) {};
		try {
			view.month.text(data.month);
		} catch(e) {};
		try {
			view.date.text(data.date);
		} catch(e) {};
		try {
			view.day.text(data.day);
		} catch(e) {};
	};
	
	function setData() {
		var curdate = new Date();
		data.year = curdate.getFullYear();;
		data.month = settings.month.en[curdate.getMonth()];
		data.date = curdate.getDate();
		data.day = curdate.getDay();
	};
	
	return {
		init: function(options) {
			initilize(options);
		}
	}
}();

/* Object */
com.principle.Scrollable = { 
	
	create : function() {
	
		var settings = {};
		var view = {};
		
		function initilize(options) {
			settings = $.extend({}, settings, options);
			setView();
			setEventListeners();
		}
		
		function setView() {
	    	view.scrollPane = settings.scrollPane;
	    	view.leftTrigger = $(view.scrollPane).find('.leftTrigger');
	    	view.rightTrigger = $(view.scrollPane).find('.rightTrigger');
	    	view.currentView = $(view.scrollPane).find('.view');
	    	view.item = $(view.currentView).find('.item');
	    	$(view.item).each(function(i) {
				$(this).attr('index', i);
			});
	    	view.orgViewLength = $(view.item).length;
			view.clickable = true;
			updateView();
		};
		
		function updateView() {
			settings.step = $(view.item).width() + settings.itemPaddingR + 400;
			adjustView(view.orgViewLength);
			settings.minPosLeft = getMinPosLeft();
		};
		
		function setEventListeners() {
			
	    	$(view.leftTrigger).click(function(e) {
			    if (view.clickable && view.orgViewLength >= settings.itemsInView && $(view.currentView).position().left < settings.maxPosLeft) {
		    		view.clickable = false;
					$(view.currentView).animate(
						{left: '+=' + settings.step }, 
						settings.duration, 
						function() {
							view.clickable = true;
						}
					);
		    	}
			    
			    if (view.clickable && view.orgViewLength >= settings.itemsInView) {
		    		view.clickable = false;
		    		if ($(view.currentView).position().left >= settings.maxPosLeft) {
		    			$(view.currentView).css({
		    				left: (settings.minPosLeft - settings.step)
		    			});
		    		} 
					$(view.currentView).animate(
						{left: '+=' + settings.step }, 
						settings.duration, 
						function() {
							view.clickable = true;
						}
					);
		    	}
			    
			    return false;
			    
		    });
	    
	    	$(view.rightTrigger).click(function(e) {
	    		view.rightTrigger.clickable = false;
			    if (view.clickable && view.orgViewLength >= settings.itemsInView && $(view.currentView).position().left > settings.minPosLeft) {
		    		view.clickable = false;
					$(view.currentView).animate(
						{left: '-=' + settings.step }, 
						settings.duration, 
						function() {
							view.clickable = true;
						}
					);
		    	}
			    
			    if (view.clickable && view.orgViewLength >= settings.itemsInView) {
		    		view.clickable = false;
		    		if ($(view.currentView).position().left <= settings.minPosLeft) {
		    			$(view.currentView).css({
		    				left: (settings.maxPosLeft + settings.step)
		    			});
		    		} 
					$(view.currentView).animate(
						{left: '-=' + settings.step }, 
						settings.duration, 
						function() {
							view.clickable = true;
						}
					);
		    	}
			    
			    return false;
			    
		    });
	    	
	    	$(view.item).click(function(e) {
	    		var href = $(this).find('a').attr('href');
	    		window.location.href = href;
	    		e.stopPropagation();
	    	})
	    	
		};
		
		
		function adjustView(length) {
			
//	    	$(view.currentView).prepend($(view.item).filter('[index="' + (length-1) + '"]').clone());
//	    	if (view.orgViewLength > 1) {
//	    		$(view.currentView).prepend($(view.item).filter('[index="' + (length-2) + '"]').clone());
//	    	}
//	    	else $(view.currentView).prepend($(view.item).filter('[index="' + (length-1) + '"]').clone());
//
//	    	if (view.orgViewLength >= settings.itemsInView) {
//		    	$(view.currentView).append($(view.item).filter('[index="0"]').clone());
//		    	$(view.currentView).append($(view.item).filter('[index="1"]').clone());
//	    	}
//	    	
//	    	view.item = $(view.currentView).find('.item');
//	    	adjustViewWidth()
	    };
	    
		function adjustViewWidth() {
	    	var width = 0;
	    	$(view.item).each(function(i, el) {
				width = width + $(el).width() + settings.itemPaddingR;
			});
	    	$(view.currentView).css({
				'width' :  width
		    });
	    };
	
	    function getMinPosLeft() {
	    	var pos;
//	    	if($.browser.msie) pos = settings.maxPosLeft - ( $(view.item).length - settings.itemsInView - 5) * settings.step;
//	    	else pos = settings.maxPosLeft - ( $(view.item).length - settings.itemsInView - 4) * settings.step;
	    	if($.browser.msie) pos = (settings.maxPosLeft - (($(view.item).length / settings.itemsInView ) - 1)) * settings.step;
	    	else pos = (settings.maxPosLeft - ($(view.item).length / settings.itemsInView)) * settings.step;
	    	return pos;
	    };
		
		return {
			init: function(options) {
				initilize(options);
			}
		}
	}
};

com.principle.RatingStar = { 
		
	create : function() {
	
		var settings = {};
		var view = {};
		
		function initilize(options) {
			settings = $.extend({}, settings, options);
			setView();
			setEventListeners();
		}
		
		function setView() {
			view.ratingBar = settings.ratingBar;
			view.ratingStar = $(view.ratingBar).find('.rating_star');
			$(view.ratingStar).each(function(i, el) {
				$(el).attr('index', i);
			});
			view.currRate = getCurrRate();
		};
		
		function setEventListeners() {
			
			$(view.ratingStar).hover(
				function(){
					var index = parseInt($(this).attr('index'));
					$(view.ratingStar).removeClass('selected');
					$(this).addClass('hover');
					$(view.ratingStar).each(function(i, el) {
						if ( parseInt($(el).attr('index')) > index ) return;
						$(el).addClass('hover');
					});
				}, 
				function() {
					$(this).removeClass('hover');
					$(view.ratingStar).removeClass('hover');
					showCurrRate(view.currRate);
				}	
			);
			
		};
		
		function getCurrRate() {
			var currRate = 'none';
			$(view.ratingStar).each(function(i, el) {
				if ($(el).hasClass('selected')) {
					currRate = $(el).attr('index');
				}
			});
			return currRate;
		}
		
		function showCurrRate(currRate) {
			if (currRate == 'none') return;
			$(view.ratingStar).each(function(i, el) {
				if ( parseInt($(el).attr('index')) > parseInt(currRate) ) return;
				$(el).addClass('selected');
			});
		}
		
		return {
			init: function(options) {
				initilize(options);
			}
		}
	}
};
