(function($) {	
	//debug.setLevel(0);
	window.ABB = {
	
		init: function() {
			debug.log('ABB - init');

			LAB.setGlobalDefaults(
				{
					AlwaysPreserveOrder: true
					, AllowDuplicates: false
					, BasePath: window.CONTEXT_PATH + "/js/"
				}
			)

			ABB.legal.init();
			ABB.print.init();
			ABB.customer.init();
			ABB.modal.init();
			
		}

		, customer: {
		
			init: function() {
				debug.log('customer - init');

				// bind submit form button
				var form_customer = $('#form_customer'),
					submit = $( '.submit_button' ).click( function(e) {
						form_customer.submit();
						e.preventDefault();
						return false;
					});

				if (form_customer.size() > 0) {
					debug.log('loading validation script');
					LAB.script('jquery.validate.min.js')
					.wait(function(){
						debug.log('customer form found');
						ABB.customer._init(form_customer);
					});
				}
				else {
					debug.log('no customer form');
				}
			
			
			}
			, _init: function(form) {
				debug.log('loading customer init', form);
				$.validator.messages.required = "";

				form.validate( {

					errorPlacement : function(error, element) {
						if (error.text().length > 0)
						element.closest('p').append(error);
					}				
					,highlight: function(element, errorClass, validClass) {
						$(element).addClass(errorClass);
						$(element).closest('p').addClass(errorClass);
					}
					, unhighlight: function(element, errorClass, validClass) {
						$(element).removeClass(errorClass);
						$(element).closest('p').removeClass(errorClass);					}
					/*, invalidHandler: function(e, v) {
						debug.log(e, v);
						var errors = v.numberOfInvalids();
						if (errors) {
							var message = errors == 1
							? 'We had a problem processing your submission. It has been highlighted.'
							: 'We had some problems processing your submission. They have been highlighted.';
							$('#validation_message_box').find('p.error_message').text(message);
						}

						$(v.currentForm).addClass('error required');
						$('html, body').animate({scrollTop: $('#customer_info_fields').prev('h2').offset().top - 10});
					}
					*/
					
					// input was valid: submit form
					, submitHandler: function( form ) {
						var submit_button = $( '.submit_button' );

						// prevent double-clicks
						if ( submit_button.hasClass( 'disabled' ) ) return;

						submit_button.addClass( 'disabled' )
									 .unbind( 'click' )
									 .click( function(e) { 
										 e.preventDefault();
										 return false;
									 });

						$( '.submit_progress_indicator' ).show();

						form.submit();
					}
					, onkeyup: false
//					, errorContainer: '#validation_message_box'
//					, errorLabelContainer: "#validation_message_list"
//					, wrapper: "label"
					, rules: {
					
						first_name : {
							required: true
							, minlength: 2
							, lettersonly: true
						}
						, last_name : {
							required: true
							, minlength: 2
							, lettersonly: true
						}
						, email : {
							required: true
							, email: true
						}
						, telephone : {
							required: true
							, phoneUS: true
						}
						, address: {
							required: true
							, minlength: 2
							, number: true
						}
						, city: {
							required: true
							, minlength: 2
							, lettersonly: true
						}
						, province: {
							required: true
						}
						, postal_code: {
							required: true
							, postalcode: true
						}
						, tos: {
							required: true
						}
						, acknowledge_current_account_holder: {
							required: function() {
								return $('input[name=ordered_rhp]').length === 1;
							}
						}
						, authorize_number_port: {
							required: function() {
								return $('input[name=ordered_rhp]').length === 1;
							}
						}
						, authorize_ld_port: {
							required: function() {
								return $('input[name=ordered_rhp]').length === 1;
							}
						}

					}
					, messages: {
					
						first_name : {
							required: "Please enter your first name."
							, lettersonly: "Your first name can only contain letters and single spaces."
							, minlength: "Please enter your full first name."
						}
						, last_name : {
							required: "Please enter your last name."
							, lettersonly: "Your last name can only contain letters and single spaces."
							, minlength: "Please enter your full last name."
						}
						, email : {
							required: "Please enter your email address."
							, email: "Your email must be in the valid format."
						}
						, telephone : {
							required: "Please enter your home phone number."
							, phoneUS: "Your phone number must be in the valid format, including area code."
						}
						, address: {
							required: "Please enter your address."
							, minlength: "Please enter your full address."
							, number: "Please enter your street number."
						}
						, city: {
							required: "Please enter your city."
							, lettersonly: "Your city can only contain letters and single spaces."
							, minlength: "Please enter your full city name."
						}
						, province: {
							required: "Please enter your province."
						}
						, postal_code: {
							required: "Please enter your postal code."
							, postalcode: "Your postal code must be in the valid format."
						}
						, tos: {
							required: "Please acknowledge to have read, understood, and agree to the above Terms of Service and Acceptable Use Policy."
						}
						, acknowledge_current_account_holder: {
							required: "You need to acknowledge that you are the current local phone\
								       service account holder living at the local phone service \
									   account address and have the authority to act as agent for\
									   the local phone service account holder to request this\
									   transfer of service."
						}
						, authorize_number_port: {
							required: "You need to authorize Rogers to contact your current \
								       local telephone service provider in order to transfer \
									   your local phone services to Rogers."
						}
						, authorize_ld_port: {
							required: "You need to authorize Rogers to contact your current \
								       long distance service provider in order to transfer \
									   your long distance services to Rogers."
						}
					}
				
				});
					

			}
		
		}

		, modal : {
			
			init: function() {
				$('#tv-features > a').colorbox({inline: true, opacity: 0.65});
			}

		
		}


		, prototypes: {
		
			get: function(name) {
			
				return $('#prototypes').find('.' + name).html();
			
			}
		
		}

		, print: {

			init: function() {
				$('a.printButton').live('click', ABB.print.control.print);
			}

			, control: {

				print: function(e) {
					e.preventDefault();
					var rel = $(this).attr('rel');
					$('body').addClass("print_" + rel);

					var print_me = $('<div id="print_me">');
					
					print_me.html($('#' + $(this).attr('rel')).clone());

					$('body').append(print_me);

					window.print();
					$('body').removeClass("print_" + rel);
					$('div#print_me').remove();
				}

			}

		}

		,legal: {
		
			init: function() {
				debug.log('init - legal');
				jQuery('#legalLink').append(
					jQuery('#prototypes .legalLink').html()
				)

				var ctxt = $('#legalLink a');				

				var text = $('#' + ctxt.attr('rel'));

				debug.log(text);

				ctxt.qtip(

					{
					content: {
						title: {
							text: text.find('h1').eq(0).text()
							,button: 'Close'
						}
						, text: text
					},
				position: {
					target: $(document.body), // Position it via the document body...
					corner: 'center', // ...at the center of the viewport
					adjust: { resize: false, scroll: false } 
				},
				show: {
					when: 'click', // Show it on click
					solo: true // And hide all other tooltips
				},
				hide: { target: "#modal-blanket", when: 'click'},
				style: {
					width: { max: 650 },
					padding: '14px',
					border: {
						width: 3,
						radius: 0,
						color: '#666666'
					},
					name: 'light'
				},
				api: {
					beforeShow: function()
					{
						// Fade in the modal "blanket" using the defined show speed
						$('#modal-blanket').fadeIn('fast');
					}
					,onRender: function () {
						var api = ctxt.qtip('api');
						//debug.log(api);
						var title = api.elements.title;
						var content = api.elements.content;

						content.append(ABB.prototypes.get('termsOfService'));
						title.append($('#prototypes .printButton').html());
						title.find('a').wrapInner('<span></span>').removeAttr('style');
					}
					, onShow: function() {
						$('#modal-blanket').one('click', function(){
							ctxt.qtip('hide');
						});

					}
					,beforeHide: function()
					{
						// Fade out the modal "blanket" using the defined hide speed
						$('#modal-blanket').fadeOut('fast');
					}
				}
				}
				);
			}




		}


	}

	$('document').ready(ABB.init);

})(jQuery);

