/**
 * js for CLS_WillCall module
 * 
 * @author     Chris Nanninga <chris.nanninga@classyllama.com>
 * @copyright  Copyright (c) 2011 Classy Llama Studios, LLC
 */

jQuery.noConflict();

var WillCall = (function(jQ) {
	WillCallObj = {
		submitUrl: null,
		mainContainer: null,
		contentBox: null,
		loadingBox: null,
		feedbackBox: null,
		
		init: function(submitUrl)
		{
			this.submitUrl = submitUrl;
			this.mainContainer = jQ('#willcall');
			this.contentBox = jQ('#willcall_content');
			
			this.loadingBox = jQ(
				'<div id="willcall_loading" class="disabled"><span>Loading . . .</span></div>'
			);
			
			this.feedbackBox = jQ(
				'<div id="willcall_feedback" class="disabled"></div>'
			).insertBefore(this.contentBox);
			
			this.mainContainer
				.removeClass('disabled')
				.append(this.loadingBox);

		    jQ('a#willcall_toggle').click(function() {
				var self = WillCallObj;
		        var parent = self.mainContainer;
		        var pos = parent.hasClass('closed') ?  '0': '-'+parent.outerHeight();
		        parent.animate({
		            bottom: pos
		        }, '500', function(){
					if (parent.hasClass('opened')) {
						self.feedbackBox.addClass('disabled');
					}
		            parent.toggleClass('closed opened');
		        });
		        return false;
		    });
		    
		    //-- Quick way to pop-up after 8 seconds
		    setTimeout(function(){
				var self = WillCallObj;
		        var parent = self.mainContainer;
		        if(parent.hasClass('closed')) {
    		        var pos = parent.hasClass('closed') ?  '0': '-'+parent.outerHeight();
    		        parent.animate({
    		            bottom: pos
    		        }, '500', function(){
    					if (parent.hasClass('opened')) {
    						self.feedbackBox.addClass('disabled');
    					}
    		            parent.toggleClass('closed opened');
    		        });
    		        return false;
    	        }
		    }, 8000);
		},
		
		submit: function()
		{
			var self = WillCallObj;
			
			if (self.submitUrl != null) {
				
				function measureHeight(elements) {
				    var h = 0;
				    elements.each(function(){
				        h += jQ(this).outerHeight();
				    });
				    return h;
				}
				
				var error = false;
				var errorMsg = '';
				
				//validate the number
				var phone_num = jQ('#phone_num').attr('value');
				if (!phone_num || phone_num == '') {
					error = true;
					errorMsg += '<p>Please enter your phone number.</p>';
				} else if (!phone_num.match(/^[0-9.()\-+ ]+$/)) {
					error = true;
					errorMsg += '<p>Invalid characters in phone number.</p>';
				} else if (phone_num.replace(/[^0-9]/g, '').length < 10) {
					error = true;
					errorMsg += '<p>Please enter your 10 digit phone number</p>';
				}
				    
				//validate the name
				var customer_name = jQ('#customer_name').attr('value');
                if(!customer_name || customer_name == '') {
                    error = true;
                    errorMsg += "<p>Please enter your name.</p>";
                }
				
				if (error) {
					self.feedbackBox
						.removeClass('success-msg')
						.addClass('error-msg')
						.html(errorMsg)
						.removeClass('disabled');
					self.mainContainer.css({
						    height: measureHeight(jQ('#willcall > *:visible')) + 'px'
					});
				} else {
					self.contentBox.addClass('disabled');
					self.loadingBox.removeClass('disabled');
					self.feedbackBox.addClass('disabled');
			
					jQ.ajax({
						type: 'POST',
						url: self.submitUrl,
						data: jQ('#willcall_form').serialize(),
						dataType: 'json',
						success: function(rsp)
						{
							var newClass = (rsp.status == 'ok') ? 'success-msg' : 'error-msg';
							var rmvClass = (rsp.status == 'ok') ? 'error-msg' : 'success-msg';
						
							self.feedbackBox
								.removeClass(rmvClass)
								.addClass(newClass)
								.html(rsp.msg);
						},
						error: function()
						{
							self.feedbackBox
								.removeClass('success-msg')
								.addClass('error-msg')
								.html('<p>There was a problem with the request.</p>');
						},
						complete: function()
						{
							self.contentBox.removeClass('disabled');
							self.loadingBox.addClass('disabled');
							self.feedbackBox.removeClass('disabled');
							self.mainContainer.css({
        						    height: measureHeight(jQ('#willcall > *:visible')) + 'px'
        					});
						}
					});
				}
			}
			
			return false;
		}
	};
	
	return WillCallObj;
})(jQuery);

