$(document).ready(init);

Cufon( ".cufon, h1, h2, #side-area h3, #slideshow h3, #slideshow .button, #slideshow p, .ingress" );

Cufon(
      "#site-nav > ul > li > a",
      { textShadow: '0px 1px #990c04', hover: true }
);

Cufon(
      "#environment a",
      { textShadow: '0px 1px #4e7203', hover: true  }
);

function init() {
	$( "#application_form .checkbox" ).each( function()
	{
		var item   = $( this ),
		    parent = item.parent();

		parent.prepend( "<div class=\"box\"><img src=\"/site/carlf/images/static/cb-off.png\" /></div>" );
		parent.find( ".box" ).toggle( function()
		{
			var box = $( this );

			box.find( "img" ).attr( "src", "/site/carlf/images/static/cb-on.png" );
			box.siblings( ".checkbox" ).attr( "checked", true );
		}, function()
		{
			var box = $( this );

			box.find( "img" ).attr( "src", "/site/carlf/images/static/cb-off.png" );
			box.siblings( ".checkbox" ).attr( "checked", false );
		} );
	} );

	$( "#site-nav li" ).each( function()
	{
		var item  = $( this ),
		    width = item.outerWidth();

		item.find( "ul li" )
			.css( "min-width", width );
	} );

	$( "#trash-stuff" ).click(
		function()
		{
			var contents = $( this ).find( ".contents" );

			if ( contents.is( ":visible" ) )
				hideMenu();
			else
				contents.show();
		}
	);

	var inside = false,
	    timer  = null;

	$( "#trash-stuff" ).hover(
		function()
		{
			inside = true;
			clearTimeout( timer );
		},
		function()
		{
			inside = false;
			timer = setTimeout( hideMenu, 500 );
		}
	);

	function hideMenu()
	{
		$( "#trash-stuff" )
		      .find( ".contents" ).hide();
	}

	$( "#site-nav > ul > li > a" ).hover( function()
	{
		updateMenu();
	} );

	updateMenu();

	$(".quicktip").quicktip(
	{
		speed:300
	} );

	handleBoxColumns();

	var column = $( "#footer .column" ),
	    height = 0;

	column.each( function()
	{
		var item = $( this );

		if ( item.height() > height )
			height = item.height();
	} );

	column.height( height );

	initSlideshow();



	// set up jquery.address for # links
	$.address.externalChange(function(event) {
		var qs = $('[rel=address:' + event.value + ']').attr('href');
		if(qs) {
			$("#popup_item").show().load($('[rel=address:' + event.value + ']').attr('href'), null, function() {
			  $(this).center(true);
			});
			Cufon.refresh();
			displayShade();
		}
	});

	$('#containers a').click(function() {
		$("#container").hide();
		$("#popup_item").show().load($(this).attr('href'), null, function() {
			$(this).center(true);
	  });
		Cufon.refresh();
		displayShade();
	});

	$('#vehicles a').click(function() {
		$("#vehicle").hide();
		$("#popup_item").show().load($(this).attr('href'), null, function() {
			$(this).center(true);
	  });
		Cufon.refresh();
		displayShade();
	});

  // set up application form
	var options = {
    target:        '#application_form_response',
    //url:           'CoMeT_function=run_module&module=ModForms',
		url:           'CoMeT_function=run_module&module=ModForms&action=process_application',
    //type:          'post',
    //clearForm:	   true,
    beforeSubmit:  validateApplicationForm,
    success:       applicationFormResponse
  };
  $('#application_form').ajaxForm(options);


	function validateApplicationForm(formData, jqForm, options) {

    //var queryString = $.param(formData);
    //alert('qs: \n\n' + queryString);

		var name = $('input[name=par_name]').fieldValue();
		var address = $('textarea[name=par_address]').fieldValue();
		var driver_class = $('textarea[name=par_driver_class]').fieldValue();
		var phone = $('input[name=par_phone]').fieldValue();
		var email = $('input[name=par_email]').fieldValue();

		var error = 0;

		if(!name[0]) {
			error = 1;
			$("input[name='par_name']").addClass('form_error');
		} else {
			$("input[name='par_name']").removeClass('form_error');
		}

		if(!address[0]) {
			error = 1;
			$("textarea[name='par_address']").addClass('form_error');
		} else {
			$("textarea[name='par_address']").removeClass('form_error');
		}

		if(!driver_class[0]) {
			error = 1;
			$("textarea[name='par_driver_class']").addClass('form_error');
		} else {
			$("textarea[name='par_driver_class']").removeClass('form_error');
		}

		if(!phone[0]) {
			error = 1;
			$("input[name='par_phone']").addClass('form_error');
		} else {
			$("input[name='par_phone']").removeClass('form_error');
		}

		if(email[0]) {
			if(!validateEmail(email[0])) {
				error = 1;
				$("input[name='par_email']").addClass('form_error');
			} else {
				$("input[name='par_email']").removeClass('form_error');
			}
		}

		$( "#application_form .form_error" ).focus( function()
		{
			$( this ).removeClass( "form_error" );
		} );

		if(error == 1) {
			return false;
		} else {
			return true;
		}
	}

	function applicationFormResponse(responseText, statusText, xhr, $form) {

		var html_response = responseText.split('|');

		if (html_response[0] == 'success') {
			$('#application_form').hide();
			$("#application_form_response").removeClass("form_error").html(html_response[1]);
			Cufon.refresh();
		} else {
			$("#application_form_response").addClass("form_error").html(html_response[1]);
		}

	}



	if(jQuery('#cf_stat_login').size()) { // cf stat login form
		initCfLoginForm();
	}
	if(jQuery('#cf_stat_date_form').size()) { // cf state date form
		initCfDateForm();
	}
}


/**
 * cf stat
 *
 */

function initCfLoginForm() {

	var options = {
		url:						'CoMeT_function=run_module&module=CarlfSoap',
		beforeSubmit:   cfStatLoginValidateForm,
		success:				cfStatLoginSubmitForm,
		dataType:				'json'
	};
	jQuery('#cf_stat_login').ajaxForm(options);
}


function cfStatLoginValidateForm(formData, jqForm, options) {

	var user = $('input[name=par_user]').fieldValue();
	var pass = $('input[name=par_pass]').fieldValue();

	var error = 0;

	if(!user[0]) {
		error = 1;
		$("input[name='par_user']").addClass('input_field_error');
	} else {
		$("input[name='par_user']").removeClass('input_field_error');
	}

	if(!pass[0]) {
		error = 1;
		$("input[name='par_pass']").addClass('input_field_error');
	} else {
		$("input[name='par_pass']").removeClass('input_field_error');
	}

	return error ? false : true;

}

function cfStatLoginSubmitForm(data) {

  var status = data.status;
  var action = data.action;
	var message = data.message;

	if (status == 1) {
		// load new form with date controls
		doAjaxRequest('CoMeT_function=run_module&module=CarlfSoap&function=cf_client_stats&action=stat_date_form', cfStatResponse);
  } else {
		// return error message
    jQuery("#cf_stat_login_response").html(message);
  }
}

function cfStatResponse(html) {
	jQuery('#cf_stat').html(html);
	initCfDateForm();
}

function initCfDateForm() {
	var options = {
		url:						'CoMeT_function=run_module&module=CarlfSoap',
		success:				cfDateFormSubmit,
		dataType:				'json'
	};
	jQuery('#cf_stat_date_form').ajaxForm(options);

	initDatepickersPub();
}

function cfDateFormSubmit(data) {

  var status = data.status;
  var action = data.action;
	var message = data.message;

	if (status == 1) {
		// load new form with date controls
		jQuery("#cf_stat_date_form_container").fadeOut();
		jQuery("#cf_stat_date_form_response").html(message);
  } else {
		// return error message
    jQuery("#cf_stat_date_form_response").html(message);
  }
}

function initDatepickersPub() {
  jQuery.datepicker.setDefaults(jQuery.extend({showMonthAfterYear: false}, jQuery.datepicker.regional['sv']));
  jQuery(".datepicker").each(function(i) {
    jQuery(this).datepicker();
    jQuery(this).datepicker('option', 'firstDay', 1);
  });
}

function cfStatDoLogout() {
	doAjaxRequest('CoMeT_function=run_module&module=CarlfSoap&function=cf_client_stats&action=do_logout', cfStatDoLogoutResponse);
}

function cfStatDoLogoutResponse(html) {
	jQuery('#cf_stat').html(html);
	initCfLoginForm();
}






function displayShade()
{
	var shade = $( "#shade" );
	shade.show().click( hideShade );
}

function hideShade()
{
	var shade = $( "#shade" );
	shade.unbind().hide()

	$( "#popup_trash, #popup_item" ).hide();
}

function handleBoxColumns()
{
	var rows = $( "#main-area .row" ).has( ".column" );

	rows.each( function()
	{
		var item = $( this ),
		    size = 0;

		if ( ! item.has( ".box_wrapper" ) )
			return true;

		item.find( ".column" ).each( function()
		{
			var obj = $( this ).find( ".box_wrapper" );

			if (size == 0 || obj.size() < size) {
				size = obj.size();
			}
		} );

		if ( size == 0 )
			return true;

		for ( var i = 0; i < size; i++ )
		{
			var height = 0;

			item.find( ".column" ).each( function()
			{
				var obj = $( this ).find( ".box_wrapper" ).eq( i );

				if ( obj.height() > height )
					height = obj.height();
			} );

			var boxes  = item.find( ".column" )
			                 .find( ".box_wrapper:eq(" + i + ")" );

			boxes.height( height );
		}
	} );
}

function initSlideshow()
{
	var slide = $( "#slideshow" );

	if ( slide.length == 0 )
		return;

	var items = $( "#slideshow .item" ),
	    count = items.size() - 1;

	function fade( index )
	{
		var anim = 500,
		    wait = 4000;

		var prev = index - 1;
		if ( prev < 0 )
			prev = count;

		items.eq( index )
			.fadeTo( anim, 1.0 );

		items.eq( prev ).fadeTo(
			anim, 0.0,
			function() { $( this ).hide(); }
		);

		var next = index + 1;
		if ( next > count )
			next = 0;

		setTimeout(
			function() { fade( next ) },
			wait + anim
		);
	}

	fade( 0 );
}

function updateMenu()
{
	$( "#site-nav ul" ).each( function()
	{
		var item   = $( this ),
		    parent = item.parent();

		var offset = parent.outerWidth() - item.outerWidth();

		item.css(
		{
			"left" : parent.position().left + offset + 2
		} );
	} );
}


function renderVehicleActionShot(image_id) {
	if(image_id) {
		doAjaxRequest('CoMeT_function=run_module&module=CarlF&function=carlf_vehicle_image_render&image_id=' + image_id, renderVehicleActionShotResponse);
	}
}

function renderVehicleActionShotResponse(html) {
	$("#vehicle_image_container").html(html);
}






function renderWaste(item_id) {
	// hide container popup
	$("#popup_item").hide();

	if(item_id) {
		doAjaxRequest('CoMeT_function=run_module&module=CarlF&function=carlf_throw&action=render_waste&item_id=' + item_id, renderWasteResponse);
	}
}

function renderWasteResponse(html) {
  $('#popup_trash').show().html(html).center();
  Cufon.refresh();
  displayShade();
}


/**
 * common
 *
 */

function hideDiv(source) {
  if(source) {
    $(source).hide();
    hideShade();
  }
}

function validateEmail(elementValue) {
	var emailPattern = /^([a-zA-Z0-9_.-])+@([a-zA-Z0-9_.-])+\.([a-zA-Z])+([a-zA-Z])+/;
	return emailPattern.test(elementValue);
}

function doAjaxRequest(pars, callback) {
  $.ajax({
    type: "POST",
    url: "?",
    data: pars,
    success: callback
  });
}
