/*jsl:ignoreall*/
/*jsl:option explicit*/
/*jsl:declare jQuery*/
/*jsl:declare $*/
/*jsl:declare document*/
/*jsl:declare window*/
var TargetMarket = function() {
	// --------- Form settings here: ----------
	/*
	 * logic changed. See Van sketchbook.
	 */
	var sliders = {
		age: [],
		income: [],
		responses: []
	};
	var multis = ['ethnicity', 'education', 'employment', 'career', 'relationship'];
	var state_data = new Array();

	// --------- End of form settings ------------

	var current_state;

	// Evgeny Gorbunov added:
	var contentInitialized = false;

	var formValidated = false;
	var updatePriceTimer = null;

	var tmTitle = null;
	var tmclassTitle = null;
	var defaultSurveyTitle = "";

	var notificationInProgress = false;
	var hideNotificationDisabled = true;
	var showNotificationDisabled = false;

	var customTagChecked = false;
	var tagsSearchCount = 0;
	var previousTagKeyword = '';
	var previousTagValue = '';

	function closeSavePopup(){
		$('#tooltip-save').hide();
	}

	var self = {
		init: function() {
			var popup = $('<div class="state-popup"><div class="wrapper">' +
				'<div class="content"> <a href="#" class="close">close</a>' +
				'<fieldset><div class="counties-list"><ul class="first-column"></ul>' +
				'<ul class="second-column"></ul><ul class="third-column"></ul></div></fieldset>' +
				'<dl><dt>Counties:</dt><dd><span class="total-counties">64</span> total</dd>' +
				'<dt>Selected counties:</dt><dd><span class="selected-counties">60</span> selected</dd></dl>' +
				'<ul class="action"><li><a class="select-all" href="#"></a></li>' +
				'<li><a class="deselect-all" href="#"></a></li></ul></div></div>' +
				'<div class="popup-bottom"></div></div>').appendTo($('body'));
			$('.close', popup).click(self.closePopup);

			$(window).bind('resize', function() {
				var popup = $(".state-popup");
				if (popup.is(':visible')) {
					var offset = $('div.locations dd a.enable').offset();
					popup.css({
						"left": (offset.left - 340) + "px",
						"top": (offset.top + 10) + "px"
					});
				}
			});

			$('#market_form').find('textarea').keypress(function(event) {
				var code;
				if (!event) event = window.event;
				if (event.keycode) code = event.keycode;
				else if (event.which) code = event.which;
				if (code == 13) {
					return false;
				}
				return true;
			});

			$('<div class="progress_icon" style="display: none; z-index: 2000;"></div>').appendTo('body');
			$('<div style="display: none; z-index: 2000; font-size: 1.45em;" id="tooltip-save" class="tooltip tooltip-save"><div class="tooltip_bg"><div class="tooltip_content"><a onclick="$(\'#tooltip-save\').hide();return false;" href="#" class="tooltip_close_button"></a>Your survey is saved in the drafts section of your <a style="font-weight: normal; text-decoration: underline;" href="/dashboard">Dashboard</a></div></div></div>').appendTo('body');

			// smart-resize all the text-areas
			//$('textarea').smartArea();

			$('#submit_write_survey').click(function() {
				if ($('#form-validation').is('.error')) return false;
				if (self.validateForm()) {
					// allow navigate away by buttons
					changesMadeOnThisPage = false;
					$('#market_form').submit();
				}
				return false;
			});

			$("#submit_write_survey_save").click(function() {
				closeSavePopup();
				if ($('#form-validation').is('.error')) return false;
				if (self.validateForm()) {
					// allow navigate away by buttons
					changesMadeOnThisPage = false;
					var progress_icon = $('body').children(".progress_icon");
					var iconOffset = $(this).offset();
					progress_icon.css({
						'top': (iconOffset.top - 5) + 'px',
						'left': (iconOffset.left + $("#submit_write_survey_save").width() / 2 + 1) + 'px'
					}).show();
					var $form = $('#market_form');
					$.ajax({
						type: "POST",
						url: $form.attr('action'),
						data: $form.serialize(),
						error: function(xhr, status, error) {
							processAjaxHttpError(xhr, status, error);
							progress_icon.hide();
						},
						success: function(response) {
							progress_icon.hide();
							var iconOffset = $("#submit_write_survey_save").offset();
							$("#tooltip-save").css({
								'top': (iconOffset.top - $("#tooltip-save").height() + 20) + 'px',
								'left': (iconOffset.left + $("#submit_write_survey_save").width() / 2 - 126) + 'px'
							}).show();
						}
					});
				}
				return false;
			});

			$('#submit_edit_survey').click(function() {
				closeSavePopup();
				if ($('#form-validation').is('.error')) return false;
				if (self.validateForm()) {
					// allow navigate away by buttons
					changesMadeOnThisPage = false;
					$('#redirect_on_edit').val(1);
					$('#market_form').submit();
				}
				return false;
			});


			$('#doublecheckd').change(function() {
				self.updateDoubleCheckd(this.checked);
			});

			// convert checkboxes and radio buttons into images
			//$('input[type="checkbox"]').checkize();
			//$('input[type="radio"]').checkize();

			$('.select-all').click(function() {
				if (($this).is('.disabled')) return false;
				$(this).parents('.content').find('input:checkbox')
				.each(function(i, elem) {
					if (!$(elem).attr('checked')) {
						$(elem).attr('checked', 'checked').change();
					}
				});
				return false;
			});
			$('.deselect-all').click(function() {
				if (($this).is('.disabled')) return false;
				$(this).parents('.content').find('input:checkbox')
				.each(function(i, elem) {
					if ($(elem).attr('checked')) {
						$(elem).removeAttr('checked').change();
					}
				});
				return false;
			});

			// setup sliders
			self.setupSlider($('#age-range .input'), sliders.age,
				self.updateAgeOrderList);
			self.setupSlider($('#income-range .input'), sliders.income,
				self.updateIncomeOrderList);
			self.setupSlider($('#responses .input'), sliders.responses,
				self.updateResponsesOrderList);

			// setup selects
			self.setupSelects();

			// Set initial price
			//self.updatePrice();

			// Set up multiple select boxes
			self.setupMultis();

			// Set up add funds radio buttons
			if ($('body').hasClass('page_addfunds')) {
				var total = $('.total strong');
				var depositAmount = $('#deposit-amount');
				depositAmount.focus(function(e) {
					$('#deposit-custom').attr('checked', true).change();
				})
				.keypress(function(e) {
					if (e.which != 8 && e.which != 46
						&& e.which != 0 && (e.which < 48 || e.which > 57)) e.preventDefault();
					setTimeout(function() {
						total.text('$' + depositAmount.val());
					}, 0);
				});
				var radios = $('input:radio');
				radios.change(
					function() {
						var price = $('input:radio:checked').val();
						if (price == 'custom') {
							price = $('#deposit-amount').val();
						}
						total.text('$' + price);
						depositAmount.val(price);
					});
				radios.eq(0).change();
			}

			if($("#survey-title").length > 0){
				tmclassTitle = $("#survey-title");
				defaultSurveyTitle = 'Type your desired Survey Title';
			}
			else if($("#survey-title-sv").length > 0){
				tmclassTitle = $("#survey-title-sv");
				defaultSurveyTitle = 'Enter a survey title that you can change later';
			}

			clearInitialValueOnFocus('#target_market_title', defaultSurveyTitle);

			tmTitle = $('#target_market_title');
			tmTitle.change(function() {
				closeSavePopup();
			});

			addCharCounter(90, tmclassTitle.get(0), defaultSurveyTitle);

			$('#clearfilters a').click(function() {
				TargetMarket.clearAllFilters();
			});

			$("input[type=radio]:not(.not_skinned)").checkize();
			
			if ($('#preqq').length) self.initTags();
		},

		initTags: function () {
			if($('li#preqq input#target_market_paid_tag_type_2').attr('checked')) {
				customTagChecked = true;

				$(".error_on").removeClass("error_on").addClass("error_off");
				$("#form-validation").removeClass('warning').removeClass("error").addClass("customtag");
				$('#sidebar_notification #not_content').removeClass('ok').addClass("customtag");

				$('#fulfilmentmeter a#fulfilmentmeter-help,#fulfilmentmeter h2,#fulfilmentmeter .meter').slideToggle(200);

				self.showNotification();
			}

			$('li#preqq input#target_market_paid_tag_type_2').parent().find('> a.radio').click(function() {
				if (!customTagChecked) {
					var el = $('<input id="target_market_paid_tag_id" name="target_market[paid_tag_id]" type="hidden" value="0" />');
					el.appendTo($('#preqq'));

					customTagChecked = true;
					tags = [];

					$(".error_on").removeClass("error_on").addClass("error_off");
					$("#form-validation").removeClass('warning').removeClass("error").addClass("customtag");

					$('#fulfilmentmeter a#fulfilmentmeter-help,#fulfilmentmeter h2,#fulfilmentmeter .meter').slideToggle(200);

					self.removeTag();
					self.initResponseSlider();
					self.hideNotification();
					setTimeout(function() {
						$('#sidebar_notification #not_content').addClass("customtag");
						self.showNotification();
					}, 300);
					self.updatePrice();

					$('#order-list .preq').remove();
					$('#order-list dl:eq(0)').prepend('<dt class="preq active">Prequalification question:</dt><dd class="preq">Custom question</dd>');
				}
				return false;
			});

			$('li#preqq input#target_market_paid_tag_type_1').parent().find('> a.radio').click(function() {
				if (customTagChecked) {
					customTagChecked = false;
					hideNotificationDisabled = false;

					$('#order-list .preq').remove();
					
					if (null !== tag && !$('#tags_dropbox').is(':visible')){
						if ($('#target_market_paid_tag_id').length) $('#target_market_paid_tag_id').remove();
						self.setTag();
					}

					$(".error_on").removeClass("error_off");
					$("#form-validation").removeClass("customtag");
					$('#fulfilmentmeter a#fulfilmentmeter-help,#fulfilmentmeter h2,#fulfilmentmeter .meter').fadeIn(200);

					self.initResponseSlider();
					self.hideNotification();
					self.updatePrice();
				}
				return false;
			});

			var tag_textarea = $('div#tags_dropbox div.input-box.resizable textarea');
			var default_hint = 'Start typing a keyword...';
			tag_textarea.focus(function() {
				tag_textarea.closest('div.input-box').addClass('active');
				if ($.trim(tag_textarea.val()).length && $.trim(tag_textarea.val()) != default_hint) {
					self.initTagsDB();
				}
				else {
					tag_textarea.css({
						'color': '#999999'
					});
					tag_textarea.val(default_hint);
					tag_textarea.setCursorPosition(0);
				}
			}).mousedown(function(e) {
				if ($.trim(tag_textarea.val()) == default_hint) {
					e.preventDefault();
					tag_textarea.setCursorPosition(0);
				}
			}).mousemove(function(e) {
				if ($.trim(tag_textarea.val()) == default_hint) {
					e.preventDefault();
					tag_textarea.setCursorPosition(0);
				}
			}).click(function(e) {
				if ($.trim(tag_textarea.val()) == default_hint) {
					e.preventDefault();
					tag_textarea.setCursorPosition(0);
				}
			}).keyup(self.keywordKeyUp).keydown(function() {
				if ($.trim(tag_textarea.val()) == default_hint){
					tag_textarea.css({
						'color': '#666666'
					});
					tag_textarea.val('');
				}
			}).smartArea(1, 1);
			addCharCounter(tag_textarea.closest('div.input-box').get(0), 20, default_hint);

			$('div#tags_filter a').click(function() {
				previousTagKeyword = '';
				var ul = $('div#tags_dropbox div.dropdown .mid ul');
				ul.html('');

				$('div#tags_filter').hide();
				$('div#tags_dropbox').show();
				$('#order-list .preq').remove();
				tag_textarea.focus();

				$('li#preqq input#target_market_paid_tag_type_1').parent().find('> a.radio').click();

				$(document).one('click', self.clickFuncForTags);
				return false;
			});

			if (null !== tag && $('#tag_input').length) {
				$('div#tags_filter').hide();
				var value = self.getTagValue(tag);
				self.initChosenTag(value.length ? true : false);
				$('div#tags_dropbox div.input-box.resizable textarea').val(tag.name);
			}
		},

		keywordKeyUp: function(event) {
			var $this = $(this);
			var v = $.trim($this.val());
			var default_hint = 'Start typing a keyword...';
			var lis = $('div#tags_dropbox div.dropdown ul li');

			if (!(v.length == 0 || v == default_hint) && lis.length) {
				var li = $('div#tags_dropbox div.dropdown ul li.active');
				lis.removeClass('active');

				var keycode;
				if (!event) event = window.event;
				if (event.keyCode) keycode = event.keyCode;
				else if (event.which) keycode = event.which;
				switch(keycode) {
					case 38:
						event.preventDefault();
						if (li.length) {
							var prev = li.prev();
							while (prev.length && (prev.hasClass('line') || prev.hasClass('disabled'))) prev = prev.prev();
							if (prev.length) li = prev;
							li.addClass('active');
							$('div#tags_dropbox div.dropdown ul').scrollTo(li, 50, {
								offset: {
									top: 0
								}
							});
						}
						return;
						break;
					case 40:
						event.preventDefault();
						if (li.length) {
							var next = li.next();
							while (next.length && (next.hasClass('line') || next.hasClass('disabled'))) next = next.next();
							if (next.length) li = next;
						}
						else {
							next = lis.eq(0);
							while (next.length && (next.hasClass('line') || next.hasClass('disabled'))) next = next.next();
							if (next.length) li = next;
						}
						if (li.length) {
							li.addClass('active');
							$('div#tags_dropbox div.dropdown ul').scrollTo(li, 50, {
								offset: {
									top: 0
								}
							});
						}
						return;
						break;
					case 13:
						event.preventDefault();
						if (li.length) li.find('a').click();
						else if (lis.length == 1) lis.eq(0).find('a').click();
						return;
						break;
				}
			}

			if (previousTagKeyword != v) {
				tagsSearchCount = 0;
				previousTagKeyword = v;
				if (v.length == 0) {
					$this.css({
						'color': '#999999'
					});
					var ul = $('div#tags_dropbox div.dropdown .mid ul');
					ul.html('');
					$('#tags_search_progress').hide();
					$('div#tags_dropbox div.dropdown').hide();
					$this.val(default_hint);
					previousTagKeyword = v = default_hint;
					$this.setCursorPosition(0);
				}
				else if (v != default_hint) {
					$this.css({
						'color': '#666666'
					});
					self.initTagsDB();
				}
			}
		},

		initResponseSlider: function() {
			var value = parseInt($('#target_market_respondents').val(), 10);
			$('#responses .input').remove();
			var tmp = '<div class="input small">' +
			'<input type="text" value="" size="30" name="target_market[respondents]" id="target_market_respondents" class="slider-value">' +
			'<strong class="ui-slider-handle"><em class="value"></em>' +
			'<span class="slider-arrow"><span>increase / decrease value</span></span>' +
			'</strong><div class="ui-slider-options"></div></div>';
			var responsesSlider = $(tmp);
			var options = customTagChecked ? secondSliderOptions : firstSliderOptions;
			for (var i in options) {
				var parts = options[i];
                                //for some reason chrome is adding undefined/undefined element at the end of list.
                                if (typeof(parts[0]) != undefined && parts[0] != undefined){
				  responsesSlider.find('.ui-slider-options').append('<dl><dt>' + parts[0] + '</dt><dd>' + parts[1] + '</dd></dl>');
                                }
			}
			responsesSlider.appendTo($('#responses'));
			var searchValue = new Array(value, value);
			if (options.toString().indexOf(searchValue.toString(), 0) < 0) value = options[0][0];
			responsesSlider.find('#target_market_respondents').val(value);
			sliders.responses = [];
			self.setupSlider($('#responses .input'), sliders.responses, self.updateResponsesOrderList);
		},

		clickFuncForTags: function(e) {
			if (!$('div#tags_dropbox').is(':visible')) return;

			if ($(e.target).is('#keyword_for_tags')) {
				$(document).one('click', self.clickFuncForTags);
			}
			else if(!$(e.target).parents('div.tags_dropdown').length) {
				tags = [];

				$('#tags_search_progress').hide();
				$('div#tags_dropbox div.dropdown').hide();
				$('div#tags_dropbox div.input-box.resizable').removeClass('active');
				$('div#tags_dropbox').hide();
				$('div#tags_filter').show();
				$('li#preqq input#target_market_paid_tag_type_1').parent().find('> a.radio').click();
			}
		},

		noMatchesFoundInTags: function() {
			tags = [];

			$('#tags_search_progress').hide();
			var ul = $('div#tags_dropbox div.dropdown .mid ul');
			ul.html('');

			var li = $("<li class='no_data'><span>No matches found.</span><a href='#' tabindex='-1'>Create a custom one?</a></li>").appendTo(ul);
			li.find('a').bind('click', function() {
				$('li#preqq input#target_market_paid_tag_type_2').parent().find('> a.radio').click();
				return false;
			});
			return;
		},

		initTagsDB: function() {
			if ($('div#tags_filter').is(':visible')) return;

			var textarea = $('div#tags_dropbox div.input-box.resizable textarea');

			var v = $.trim(textarea.val());
			var default_hint = 'Start typing a keyword...';

			if (v.length == 0 || v == default_hint) return;
			else $('div#tags_dropbox div.dropdown').show();

			$('#tags_search_progress').show();
			tagsSearchCount++;

			var data = new Object();
			data["authenticity_token"] = AUTH;
			data["q"] = v;
			$.ajax({
				type: "POST",
				url: "/tags/qlist",
				dataType: "json",
				data: data,
				success: function(j, textStatus) {
					if (v != $.trim(textarea.val()) || $('div#tags_dropbox').is(':not(:visible)')) return;

					if (null === j) {
						if (tagsSearchCount < 3) self.initTagsDB();
						else self.noMatchesFoundInTags();
						return;
					}

					if (j.length == 0) {
						self.noMatchesFoundInTags();
						return;
					}

					$('#tags_search_progress').hide();
					var ul = $('div#tags_dropbox div.dropdown .mid ul');
					ul.html('');

					tags = j.sort(function(a, b) {
						return a.name > b.name
					});

					var li_size = 0;

					var gender = $("#target_market_gender").val();
					$.each(tags, function(i, item) {
						if (item.related_tag == false) {
							var disabled = false;
							switch (gender) {
								case "":
									disabled = !(item.p || item.n);
									break;
								case "f":
									disabled = !(item.pfg || item.nfg);
									break;
								case "m":
									disabled = !(item.pmg || item.nmg);
									break;
							}
							if (disabled)
								$("<li class='disabled'>" + item.name + " (available only for " + ((item.pfg || item.nfg) ? "females" : ((item.pmg || item.nmg) ? "males" : "both")) + " gender)</li>").appendTo(ul);
							else
								$("<li><a id='" + item.id + "' href='#' tabindex='-1'>" + item.name + "</a></li>").appendTo(ul);
							li_size += 1;
						}
					});
					if (tags.length > li_size) {
						$("<li class='line'><span></span></li>").appendTo(ul);
						$.each(tags, function(i, item) {
							if (item.related_tag == true) {
								var disabled = false;
								switch (gender) {
									case "":
										disabled = !(item.p || item.n);
										break;
									case "f":
										disabled = !(item.pfg || item.nfg);
										break;
									case "m":
										disabled = !(item.pmg || item.nmg);
										break;
								}
								if (disabled)
									$("<li class='disabled'>" + item.name + " (available only for " + ((item.pfg || item.nfg) ? "females" : ((item.pmg || item.nmg) ? "males" : "both")) + " gender)</li>").appendTo(ul);
								else
									$("<li><a id='" + item.id + "' href='#' tabindex='-1'>" + item.name + "</a></li>").appendTo(ul);
							}
						});
					}

					self.initTagsDBItems();
				},
				error: function() {
					if (v != $.trim(textarea.val()) || $('div#tags_dropbox').is(':not(:visible)')) return;

					processAjaxHttpError(xhr, status, error);
					
					if (tagsSearchCount < 3) self.initTagsDB();
					else self.noMatchesFoundInTags();
				}
			});
		},

		getTagValue: function(obj) {
			var gender = $("#target_market_gender").val();
			if (obj != null) {
				var n = true;
				var p = true;
				if (gender == "") {
					p = obj.p;
					n = obj.n;
				}
				else if (gender == "f") {
					p = obj.pfg;
					n = obj.nfg;
				}
				else if (gender == "m") {
					p = obj.pmg;
					n = obj.nmg;
				}
				if (p == true && n == true)
					return '';
				else if (p == false && n == true)
					return '0';
				else if (p == true && n == false)
					return '1';
			}
			return 'disabled';
		},

		initTagsDBItems: function() {
			$('div#tags_dropbox div.dropdown ul li').each(function() {
				$(this).find('a').click(self.selectTagsDBItem);
			});
		},

		selectTagsDBItem: function() {
			if ($('#target_market_paid_tag_id').length) $('#target_market_paid_tag_id').remove();
			$(document).unbind('click', self.clickFuncForTags);

			var id = $(this).attr('id');
			for ( var i = 0; i < tags.length; i++ ) {
				if (tags[i].id == id) {
					tag = tags[i] ;
					break;
				}
			}
			tags = [];
			previousTagValue = '';

			self.setTag();

			return false;
		},

		setTag: function() {
			var value = self.getTagValue(tag);
			if (value == 'disabled' || (previousTagValue != '' && value != '' && previousTagValue != value)) return;

			var disabled = value.length ? true : false;
			if (value == '') value = previousTagValue;

			$('div#tags_filter').hide();
			$('div#tags_dropbox div.dropdown').hide();
			$('div#tags_dropbox div.input-box.resizable').removeClass('active');
			$('div#tags_dropbox').hide();

			$('div#tags_dropbox div.input-box.resizable textarea').val(tag.name);

			$('<div id="tag_input"><div class="left">' +
				'<input id="target_market_paid_tag_id" name="target_market[paid_tag_id]" type="hidden" value="' + tag.id + '" />' +
				'<span>' + (tag.name.length > 24 ? tag.name.substring(0, 21) + '...' : tag.name) + '<a href="#" class="remove_tag"></a></span></div></div>').insertAfter($('#tags_dropbox'));

			$('<div id="tag_toggle" class="toggle-element">' +
				'<input id="target_market_paid_tag_positive" name="target_market[paid_tag_positive]" type="hidden" value="' + value + '" /></div>').insertAfter($('#tag_input'));

			self.initChosenTag(disabled);

			$('li#preqq input#target_market_paid_tag_type_1').parent().find('> a.radio').hide().show();
		},

		setGenderDisabled: function(id, value) {
			$('ul#gender li.disabled pre').remove();
			$('ul#gender li.disabled').removeClass('disabled');

			var a = null;
			if (((value == '1' || value == '') && !tag.pfg) || (value == '0' && !tag.nfg)) {
				a = $('ul#gender a#f');
				a.parent().addClass('disabled');
				a.append(' <pre>(not available with this tag)</pre>');
			}
			if (((value == '1' || value == '') && !tag.pmg) || (value == '0' && !tag.nmg)) {
				a = $('ul#gender a#m');
				a.parent().addClass('disabled');
				a.append(' <pre>(not available with this tag)</pre>');
			}

			$('#order-list .preq').remove();
			$('#order-list dl:eq(0)').prepend('<dt class="preq active">Prequalification question:</dt><dd class="preq">' + tag.name + ' ' + (value == "1" ? 'only' : 'excluded') + '</dd>');
		},

		initChosenTag: function(disabled) {
			$('#tag_input').find('.remove_tag').click(function() {
				var el = $('<input id="target_market_paid_tag_id" name="target_market[paid_tag_id]" type="hidden" value="0" />');
				el.appendTo($('#preqq'));

				tag = null;
				self.removeTag();
				return false;
			});

			$('#tag_toggle').toggleButton({
				left: 'Include',
				right: 'Exclude',
				values: ['1', '0'],
				disabled: disabled,
				animate: true,
				useempties: true,
				sliding: true,
				func: function(){
					var id = $("#target_market_paid_tag_id").val();
					var value = $('#target_market_paid_tag_positive').val();
					self.setGenderDisabled(id, value);
					self.updatePrice();
				}
			});
		},

		removeTag: function() {
			previousTagValue = $('#target_market_paid_tag_positive').val();

			$('#order-list .preq').remove();
			if ($('#tag_input').length) $('#tag_input').remove();
			if ($('#tag_toggle').length) $('#tag_toggle').remove();

			$('ul#gender li.disabled pre').remove();
			$('ul#gender li.disabled').removeClass('disabled');

			$('div#tags_dropbox div.input-box.resizable textarea').attr('rows', '1').blur();
			$('div#tags_dropbox').hide();
			$('div#tags_filter').show();

			self.updatePrice();
		},
		
		unmarkInputField: function() {
			$(this).css('color', '');
			$(this).unbind('change keyup', self.unmarkInputField);
		},

		validateForm: function() {
			if (tmTitle.length && (tmTitle.val() == defaultSurveyTitle || tmTitle.val() == "")) {
				tmTitle.css('color', '#F15A24');
				$.scrollTo(tmTitle, 300, {
					offset: {
						top: -40
					}
				});
				tmTitle.bind('change keyup', self.unmarkInputField);
				tmclassTitle.addClass("editable");
				tmTitle.closest('div.input-box').addClass('active');
				tmTitle.attr("readonly", null);
				tmTitle.val(defaultSurveyTitle);
				return false;
			} else {
				return true;
			}
		},

		setupMultis: function() {
			$.each(multis, function() {
				var selector = $('li#' + this + '-multiple');
				var left_text = $('#order-list dd.' + this);
				var left_text_label = $('#order-list dt.' + this);
				var selectAllButton = selector.find('.de-select-buttons .select-all');
				var deselectAllButton = selector.find('.de-select-buttons .deselect-all');
				function handleUpdate(e) {
					var checked = selector.find('input:checked');
					var allOptions = selector.find('li.input');
					var labels = [];
					checked.each(
						function() {
							var label_text = $(this).parents('li').eq(0).find('label').text();
							labels.push(label_text);
						});
					var text = labels.join('<br />');
					var label = selector.find('.button span');
					var button = selector.find('.button');
					selectAllButton.removeClass('disabled');
					deselectAllButton.removeClass('disabled');
					if (labels.length < 1) {
						label.text('Please select');
						button.removeClass('edit').addClass('add');
						deselectAllButton.addClass('disabled');
					} else if (labels.length == 1) {
						label.text(text);
						button.removeClass('add').addClass('edit');
					} else if (allOptions.length == labels.length) {
						label.text('All');
						text = "";
						button.removeClass('edit add');
						selectAllButton.addClass('disabled');
					} else {
						label.text('Filtered');
						button.removeClass('add').addClass('edit');
					}

					if (contentInitialized)
						self.prepare_price_changing();

					left_text.html(text);
					if (text.length) left_text_label.addClass("active");
					else left_text_label.removeClass("active");
				}
				selector.find('input.checkbox').change(handleUpdate)
				.eq(0).change();
			});
			function hideBalloon(balloon) {
				balloon.removeClass('balloonactive');
				balloon.parent().removeClass('multipleselect-selected');
			}
			var balloons = $('.multipleselect .balloon');
			$('.multipleselect a.button').click(function() {
				var $this = $(this);
				balloons.each(function() {
					hideBalloon($(this));
				});
				$this.siblings('.balloon').toggleClass('balloonactive');
				$this.parent().toggleClass('multipleselect-selected');

				var balloon = $this.parent().children('.balloon');
				function clickFunc(e) {
					if ($(e.target).parents('.balloon').length == 0) {
						hideBalloon(balloon);
					}
					else {
						$(document).one('click', clickFunc);
					}
				}
				$(document).one('click', clickFunc);
				return false;
			});
			$('.multipleselect .balloon a.close').click(function() {
				baloonDiv = $(this).parents('.balloon');
				// select all if none selected
				if (baloonDiv.find('input:checked').length == 0)
					baloonDiv.find('.select-all').click();
				hideBalloon(baloonDiv);
				return false;
			});

			contentInitialized = true;

		},

		sendUpdateRequest: function() {
			self.updatePrice();
		},

		prepare_price_changing: function() {

			if (!contentInitialized)
				return;

			self.sendUpdateRequest();
		},
		
		hideNotification: function() {
			if (notificationInProgress || hideNotificationDisabled) return;

			notificationInProgress = true;
			hideNotificationDisabled = true;

			if (!customTagChecked && !$('#meter').is(':visible')) {
				$("#form-validation").removeClass('customtag');
				$('#fulfilmentmeter a#fulfilmentmeter-help,#fulfilmentmeter h2,#fulfilmentmeter .meter').fadeIn(200);
			}

			var height = $('#sidebar_notification #animate_content').height();
			$('#sidebar_notification #animate_content').animate({
				'marginTop': (-height) + 'px'
			}, 200, function() {
				notificationInProgress = false;
				showNotificationDisabled = false;
				$('#sidebar_notification #not_content').height('auto');
				$('#sidebar_notification #not_content').removeAttr('class');
				$('#sidebar_notification #animate_content').height(40).css('marginTop', '-40px');
			});
			$('#sidebar_notification').animate({
				'marginBottom': '93px'
			}, 200);
		},

		showNotification: function() {
			if (notificationInProgress || showNotificationDisabled) return;

			showNotificationDisabled = true;
			notificationInProgress = true;

			var height = 100;
			$('#sidebar_notification #not_content p:visible').each(function() {
				height += $(this).height();
			});
			$('#sidebar_notification #not_content').height(height - 120);
			$('#sidebar_notification #animate_content').css('marginTop', (-height) + 'px').height(height);
			$('#sidebar_notification #animate_content').animate({
				'marginTop': '0px'
			}, 200, function() {
				notificationInProgress = false;
				if (!customTagChecked)
					hideNotificationDisabled = false;
				else
					hideNotificationDisabled = true;
			});
			$('#sidebar_notification').animate({
				'marginBottom': '0px'
			}, 200);
		},

		delayedPriceUpdate: function() {
			updatePriceInProgress = false;
			if (updatePriceTimer !== null && updatePriceTimer !== true) {
				clearTimeout(updatePriceTimer);
			}
			updatePriceTimer = true;
			self.updatePrice();
		},

		updatePrice: function() {
			closeSavePopup();

			var target_market = new Object();

			FulfillmentMeter.hideCash();
			FulfillmentMeter.setAmount('recount');
			$('#total_cost').html('recount');
			if (updatePriceTimer === null) {
				updatePriceTimer = setTimeout(self.delayedPriceUpdate, 1500);
				return;
			}
			else if (updatePriceTimer !== true) {
				clearTimeout(updatePriceTimer);
				updatePriceTimer = setTimeout(self.delayedPriceUpdate, 1500);
				return;
			}

			updatePriceTimer = null;

			$('#market_form input')
			.each(function(i, elem) {
				var type = $(elem).attr("type");
				if (type != "checkbox" && type != "radio")
					if ($(elem).attr("name") != "_method")
						target_market[$(elem).attr("name")] = $(elem).val();
			})

			$('#market_form input')
			.each(function(i, elem) {
				if ($(elem).attr("type") == "checkbox")
					target_market[$(elem).attr("name")] = $(elem).attr('checked') ? 1 : 0;
			})

			$('#market_form input')
			.each(function(i, elem) {
				if ($(elem).attr("type") == "radio")
					if ($(elem).attr('checked'))
						target_market[$(elem).attr("name")] = $(elem).val();
			})
			
			$('div.tooltip.totalcost-help p').html('Recount...');
			$('div.tooltip.totalcost-help a#pg_url').hide();
			$('#total_cost_in_cash').fadeOut('slow');

			$.ajax({
				type: "POST",
				url: "/target_markets/price",
				dataType: "json",
				data: target_market,

				success: function(j, textStatus) {
					var notificationType = $.trim($('div#sidebar_notification div#not_content').attr('class'));

					requestedRespondents = parseInt($('#target_market_respondents').val() || "50");
					if (isNaN(requestedRespondents) || (requestedRespondents < 50)) requestedRespondents = 50;
					if (null === j || j.price === undefined || null === j.price || j.price == -1) {
						// TODO: move arrow to the right position
						FulfillmentMeter.setAmount(":(");
						$('#total_cost').html(":(");
						FulfillmentMeter.setPercentage(100);
						$('div.tooltip.totalcost-help a#pg_url').hide();
						$('#total_cost_in_cash').hide();
						$('div.tooltip.totalcost-help p').html("Sorry, it looks like you've wandered into the orange zone on the guesstimated delivery! What this means is that we are still building our consumer panel and won't have enough respondents to fulfill your request within 72 hours. The fix? Please widen your target market and/or decrease the number of respondents. When the guesstimated delivery is green, we can deliver!");
						if (!customTagChecked && notificationType != 'error') {
							$(".error_off").removeClass("error_off").addClass("error_on");
							$("#form-validation").removeClass('warning').addClass("error");

							self.hideNotification();
							setTimeout(function() {
								$('#sidebar_notification #not_content').addClass("error");
								self.showNotification();
							}, 300);
						}
					} else if (j.pricecast_seconds === null && j.price !== null && j.red_zone_percents !== null) {
						$('#total_cost').html("" + j.price + " credits");
						FulfillmentMeter.setAmount(">5 days");
						FulfillmentMeter.setPercentage(FulfillmentMeter.red_zone_percents_position(j.red_zone_percents));
						FulfillmentMeter.setCash(j.price);
						FulfillmentMeter.setHelp(j.price);
						$('div.tooltip.totalcost-help a#pg_url').show();
						if (!customTagChecked && notificationType != 'warning') {
							$(".error_on").removeClass("error_on").addClass("error_off");
							$("#form-validation").removeClass("error").addClass('warning');

							self.hideNotification();
							setTimeout(function() {
								$('#sidebar_notification #not_content').addClass("warning");
								self.showNotification();
							}, 300);
						}
					} else {
						$('div#overload-message').remove();
						$('#total_cost').html("" + j.price + " credits");
						FulfillmentMeter.setAmount(FulfillmentMeter.seconds_to_pricecast_time(j.pricecast_seconds));
						FulfillmentMeter.setPercentage(FulfillmentMeter.seconds_to_angle(j.pricecast_seconds));
						FulfillmentMeter.setCash(j.price);
						FulfillmentMeter.setHelp(j.price);
						$('div.tooltip.totalcost-help a#pg_url').show();
						if (!customTagChecked && notificationType.length) {
							$(".error_on").removeClass("error_on").addClass("error_off");
							$("#form-validation").removeClass('warning').removeClass("error");

							self.hideNotification();
						}
					}
				},
				error: function(xhr, status, error) {
					processAjaxHttpError(xhr, status, error);
					FulfillmentMeter.hideCash();
					FulfillmentMeter.setAmount('recount');
					$('#total_cost').html('. recount .');
					self.updatePrice();
				}
			});
		},

		setupSelects: function() {
			// add click monitoring for toggling on and off
			var selects = $('div#define-target-market fieldset ol li ul.select');
			if (selects.length == 0) return;
			$('.button', selects).click(function(e) {
				var $this = $($(this).parents('.select')[0]);
				if ($this.is('.disabled')) return false;
				$this.toggleClass('select-selected');
				$(document).one('click', function() {
					if ($(this).parents('.select').length == 0)
						$this.removeClass('select-selected');
				});
				return false;
			});
			selects.hover(function() { }, function(e) {
				selects.removeClass('select-selected');
			});

			// setup selecting for various boxes
			self.setGender($('#gender .select-value').val(), null);
			$('#gender .box li a').click(self.handleGenderSelect);

			self.initStates();
			$('#states .box li a').click(self.handleStateSelect);
		},

		handleGenderSelect: function(e) {
			e.preventDefault();

			if ($(this).hasClass('selected') || $(this).parent().hasClass('disabled')) return;

			self.setGender($(this).attr('id'), $(this).text());

			if ($('#target_market_paid_tag_positive').length) {
				var gender = $("#target_market_gender").val();
				if (tag != null) {
					var n = true, p = true;
					if (gender == "") {
						p = tag.p;
						n = tag.n;
					}else if (gender == "f"){
						p = tag.pfg;
						n = tag.nfg;
					}else if (gender == "m") {
						p = tag.pmg;
						n = tag.nmg;
					}
					if (p == false && n == true)
						$('#tag_toggle').addClass('disabled');
					else if (p == true && n == false)
						$('#tag_toggle').addClass('disabled');
					else
						$('#tag_toggle').removeClass('disabled');
				}
			}
		},

		setGender: function(id, name) {

			id = id == '' ? 'blank' : id;

			var select = $('#gender');

			if (name) {
				select.find('.button span').text(name);
				if (name == "Females")
					$('#order-list dd.gender').text("Females only");
				else if (name == "Males")
					$('#order-list dd.gender').text("Males only");
				else
					$('#order-list dd.gender').text("Males and Females");
			}

			select.find('.select-value').val(id == 'blank' ? '' : id);
			select.find('.selected').removeClass('selected');

			select.find('a.#' + id).addClass('selected');

			self.prepare_price_changing();
		},

		getStates: function() {
			var states_value = $('#states .select-value');
			var states = states_value.val();
			if (states == '') states = {};
			else eval('states = ' + states);
			return states;
		},

		setStates: function(states) {
			var states_value = $('#states .select-value');
			states_value.val($.toJSON(states));
			self.updateStateOrderList(states);
		},

		updateStateOrderList: function(states) {
			var location = $('#order-list dd.location ul').empty();
			isStatesEmpty = true;
			for (prop in states) if (states.hasOwnProperty(prop)) {
				isStatesEmpty = false;
				break;
			}
			if (isStatesEmpty) $('#order-list dt.location').removeClass('active');
			else $('#order-list dt.location').addClass('active');
			$.each(states, function(state, counties) {
				var li = $('<li>' + state_data[state].name +
					((counties.length == state_data[state].counties.length) ? "" :
						'<br />&nbsp;&nbsp;' +
						'(' + counties.length +
						'/' + state_data[state].counties.length +
						' counties)') + "</li>");
				location.append(li);
			});
		},

		addStateButtons: function(state, counties, input) {
			var dt = $('<dt class="' + state + '">'
				+ '<a href="#" class="button-solid-small"><span>'
				+ state_data[state].name
				+ '</span></a></dt>');
			var dd = $('<dd class="' + state + '">'
				+ '<a href="#" class="button-solid-small"><span>'
				+ counties.length + ' counties'
				+ '</span></a></dd>');

			dt.find('a').click(self.handleRemoveState);
			dd.find('a').click(self.countyPopup);

			var dl = input.find('.locations dl');
			dl.append(dt);
			dl.append(dd);
		},

		countyPopup: function(e) {
			$('div.locations dd a').removeClass('enable');
			$(this).addClass('enable');
			
			var $this = $(this);
			var offset = $this.offset();
			var popup = $('.state-popup');
			var state = $this.parents('dd')[0].className;
			var states = self.getStates();
			var counties = states[state];

			current_state = state;

			popup.show();

			// pop it up
			popup.css({
				"left": (offset.left - 340) + "px",
				"top": (offset.top + 10) + "px"
			});

			// fill in the form
			popup.find('.first-column, .second-column').empty();
			var county_info = state_data[state].counties;
			var per_column = Math.ceil(county_info.length / 2.0);
			var columns = [];
			var column_names = ['.first-column', '.second-column'];
			columns.push(county_info.slice(0, per_column));
			columns.push(county_info.slice(per_column, per_column * 2));
			// columns.push(county_info.slice(per_column * 2));

			// fill in columns
			$.each(columns, function(column, county_group) {
				var column_element = popup.find(column_names[column]);
				$.each(county_group, function(i, county) {
					var item = $('<li><input type="checkbox" '
						+ 'name="county' + county[1]
						+ '" id="county' + county[1] + '" />'
						+ '<label for="county' + county[1] + '">'
						+ county[0] + '</label></li>');
					column_element.append(item);
				});
			});

			// set checked items
			$.each(counties, function(i, county) {
				popup.find('#county' + county).attr('checked', 'checked')
				.parent().addClass('checked');
			});

			// set total/selected
			popup.find('.total-counties').text(county_info.length);
			popup.find('.selected-counties').text(counties.length);

			// setup (de)select-all buttons
			popup.find('ul.action a.select-all').removeClass('disabled');
			popup.find('ul.action a.deselect-all').removeClass('disabled');
			if (counties.length == 0)
				popup.find('ul.action a.deselect-all').addClass('disabled');
			else if (counties.length == county_info.length)
				popup.find('ul.action a.select-all').addClass('disabled');

			// replace checkboxes with fancy ones, watch for updates
			popup.find('input').change(function(e) {
				var total = popup.find('.selected-counties');
				var total_val = total.text();
				if ($(this).attr('checked')) {
					total_val++;
					$(this).parent().addClass('checked');
				}
				else {
					total_val--;
					$(this).parent().removeClass('checked');
				}
				total.text(total_val);
				var selectAllButton = popup.find('ul.action a.select-all');
				var deselectAllButton = popup.find('ul.action a.deselect-all');
				selectAllButton.removeClass('disabled');
				deselectAllButton.removeClass('disabled');
				if (parseInt(total_val) == 0) {
					deselectAllButton.addClass('disabled');
				}
				else {
					var allCounties_val = popup.find('.total-counties').text();
					if (allCounties_val == total_val) selectAllButton.addClass('disabled');
				}
			}).checkize();

			return false;
		},

		// save counties and close the popup
		closePopup: function() {
			$('div.locations dd a').removeClass('enable');
			
			var popup = $('.state-popup').hide();
			var states = self.getStates();

			// gather the checked counties
			var counties = [];
			popup.find('input:checked').each(function(i, item) {
				counties.push(item.id.substring(6)); // the part after "county"
			});

			// put them into the states for field
			states[current_state] = counties;
			self.setStates(states);

			// update the "x counties" item that triggered the popup
			$('dd.' + current_state + ' span').text(
				counties.length + ' counties');

			self.prepare_price_changing();

			return false;
		},

		initStates: function() {

			var states = self.getStates();
			var input = $('#states').parent();


			//init state_data
			$('.box div ul > li', input).each(function(i, option) {
				var state_id = $(option).attr("id");
				var state_name = $(option).find("a").text();
				state_data[state_id] = {
					"name": state_name,
					"counties": []
				};
			});

			$('.note-adder a.select-all-location').click(function() {
				$('.location .preloader').show().children('.preloader-text').text('Adding states...');
				$('.note-adder').hide();
				$('#states.select').addClass('disabled');
				contentInitialized = false;
				self.addAllStatesOneByOne();
				return false;
			});

			$('.note-adder a.deselect-all').click(function() {
				$('.location .preloader').show().children('.preloader-text').text('Removing states...');
				$('.note-adder').hide();
				$('#states.select').addClass('disabled');
				contentInitialized = false;
				self.removeAllStatesOneByOne();
				return false;
			});

			var ssd = $("#target_market_selected_states_data").val();
			if (ssd != "" && ssd != "{}") {
				var selected_states_data = $.evalJSON(ssd);

				for (var i in selected_states_data) {
					state_data[i].counties = selected_states_data[i];
				}
			}

			var count = 0;
			$.each(states, function(state, counties) {
				$('#' + state).hide();
				self.addStateButtons(state, counties, input);
				count++;
			});
			if (count) {
				input.find('.locations, .note-add').show();
				input.find('.note').hide();
			}
			self.updateStateOrderList(states);


		},

		addAllStatesOneByOne: function() {
			remainingState = $('.location #states .box div ul li:visible a:first');
			if (remainingState.length) {
				remainingState.click();
				setTimeout(self.addAllStatesOneByOne, 0);
			} else {
				contentInitialized = true;
				self.prepare_price_changing();
				$('#states.select').removeClass('disabled');
				$('.location .preloader').hide();
				$('.note-adder').show();
			}
		},

		removeAllStatesOneByOne: function() {
			remainingState = $('.location .locations dt a.button-solid-small:first');
			if (remainingState.length) {
				remainingState.click();
				setTimeout(self.removeAllStatesOneByOne, 0);
			} else {
				contentInitialized = true;
				self.prepare_price_changing();
				$('#states.select').removeClass('disabled');
				$('.location .preloader').hide();
				$('.note-adder').show();
			}
		},

		handleStateSelect: function(e) {
			e.preventDefault();
			var $this = $(this);
			var input = $this.parents('.input');
			var state = $this.parent()[0].id;
			if (state_data[state].counties.length == 0) {
				var dt = $('<dt class="placeholder placeholder_' + state + '">loading ' + state + ' counties data...</dt>');
				var dd = $('<dd class="placeholder placeholder_' + state + '">');
				var dl = input.find('.locations dl');
				dl.append(dt);
				dl.append(dd);

				$.ajax({
					type: "POST",
					url: "/target_markets/counties",
					dataType: "json",
					data: "state=" + state,

					success: function(j, textStatus) {
						$(".placeholder_" + j.state).remove();
						state_data[j.state].counties = j.counties;
						self.addStateCounties(j.state, input);
						self.prepare_price_changing();
					},
					error: function(xhr, status, error) {
						processAjaxHttpError(xhr, status, error);
					}
				});
			} else {
				self.addStateCounties(state, input);
				self.prepare_price_changing();
			}
			$this.parent().hide();
			input.find('.locations, .note-add').show();
			input.find('.note').hide();
			$('.note-adder .deselect-all').show();
			if ($('.location #states .box div ul li:visible').length) {
				$('.note-adder #note-adder-delim').show();
				$('.note-adder .select-all-location').show();
			} else {
				$('.location #states .box ul li#empty-box').show();
				$('.note-adder #note-adder-delim').hide();
				$('.note-adder .select-all-location').hide();
			}
		},

		addStateCounties: function(state, input) {
			// add to form field state list
			var states = self.getStates();
			var counties = [];
			var county_count = state_data[state].counties.length;

			for (var i = 0; i < county_count; i++) {
				counties.push(state_data[state].counties[i][1]);
			}

			states[state] = counties;
			self.setStates(states);
			// add to visible list of states
			self.addStateButtons(state, counties, input);
		},

		handleRemoveState: function(e) {
			e.preventDefault();
			var state = $(this).parent()[0].className;

			// remove from form field
			var states = self.getStates();
			delete states[state];
			self.setStates(states);

			// redisplay option in dropdown
			$('#' + state).show();
			// if we removed the last one, switch the view back
			if ((function() {
				for (var i in states) return false; return true;
			})()) {
				var input = $('#' + state).parents('.input');
				input.find('.locations').hide();
				input.find('.note').show();

			}
			$('.' + state).remove();
			self.prepare_price_changing();
			$('.note-adder .select-all-location').show();
			if ($('.location .locations dt').length) {
				$('.note-adder #note-adder-delim').show();
				$('.note-adder .deselect-all').show();
			} else {
				$('.note-adder #note-adder-delim').hide();
				$('.note-adder .deselect-all').hide();
			}
			$('.location #states .box ul li#empty-box').hide();
		},

		updateAgeOrderList: function(values) {
			self.prepare_price_changing();
			$('#order-list dd.age-range').text(values[0] + '-' + values[1] + ' years old');
			$('#order-list dt.age-range').addClass('active');
		},

		updateIncomeOrderList: function(values) {
			self.prepare_price_changing();
			$('#order-list dd.income-range').text(values[0] + ' to ' + values[1]);
			$('#order-list dt.income-range').addClass('active');
		},

		updateResponsesOrderList: function(value) {
			self.prepare_price_changing();
			$('#order-list .responses').text(value);
		},

		setupSlider: function(holder, values, callback) {

			if (!holder.length) return;
			var handles = holder.find('.ui-slider-handle');
			var range = (handles.length == 2) ? true : false;
			var initial = $('.slider-value', holder).val().split(',');

			$(' > .ui-slider-options > dl', holder).each(function(i, option) {
				values.push([$(option).find("dt").text(), $(option).find("dd").text()]);
			});

			function update(event, ui) {
				if (range) {
					var first = 0, second = 0;
					var handle = $(ui.handle);
					if ($(ui.handle).hasClass('left')) {
						first = ui.value;
						second = holder.slider('values', 1);
					}
					else if ($(ui.handle).hasClass('right')) {
						first = holder.slider('values', 0);
						second = ui.value;
					}
					var upper = Math.max(first, second);
					var lower = Math.min(first, second);
					/* To avoid overlapsing of numbers when step size between them is 1*/
					$('.value', handles[1]).text(values[second][1]);
					if (holder.closest('li.slider').is('#age-range') && Math.abs(upper - lower) == 1) {
						if (first < second) {
							$('.value', handles[0]).addClass('closevaluefirst');
							$('.value', handles[1]).addClass('closevaluesecond');
						}
						else {
							$('.value', handles[0]).addClass('closevaluesecond');
							$('.value', handles[1]).addClass('closevaluefirst');
						}
					}
					else {
						$('.value', handles[1]).removeClass('closevaluesecond');
						$('.value', handles[0]).removeClass('closevaluefirst');
						$('.value', handles[1]).removeClass('closevaluefirst');
						$('.value', handles[0]).removeClass('closevaluesecond');
					}
					$('.slider-value', holder).val(values[lower][0] + ',' + values[upper][0]);
					callback([values[lower][1], values[upper][1]]);
				}
				else {
					var first = ui.value;
					$('.slider-value', holder).val(values[first][1]);
					callback(values[first][1]);
				}

				$('.value', handles[0]).text(values[first][1]);
			}

			function start(event, ui) {
				var handle = $(ui.handle).css('z-index', 10);
				handle.siblings('.ui-slider-handle').css('z-index', 9);
			}

			if (range) {
				holder.slider(
				{
					range: true,
					step: 1,
					max: values.length - 1,
					slide: update,
					start: start,
					stop: update,
					change: update,
					values: [self.findArrayIdByValue(values, initial[0], values.length - 1), self.findArrayIdByValue(values, initial[1], values.length - 1)]
				});

				$('.value', handles[1]).text(values[self.findArrayIdByValue(values, initial[1], values.length - 1)][1]);
				$('.value', handles[0]).text(values[self.findArrayIdByValue(values, initial[0], values.length - 1)][1]);
			}
			else {
				holder.slider(
				{
					range: 'min',
					step: 1,
					max: values.length - 1,
					slide: update,
					stop: update,
					change: update,
					value: self.findArrayIdByValue(values, initial[0], values.length - 1)
				});
				$('.value', handles[0]).text(values[self.findArrayIdByValue(values, initial[0], values.length - 1)][1]);
			}
		},

		findArrayIdByValue: function(ar, initial_value, default_index) {

			var ret = default_index;

			for (var i = 0; i < ar.length; i++) {
				if (ar[i][0] == initial_value) {
					ret = i;
					break;
				}
			}

			return ret;
		},

		updateDoubleCheckd: function(checked) {

			self.prepare_price_changing();

			$('#order-list .doublecheckd').html(checked
				? 'DoubleCheckd<sup>SM</sup>'
				: '');
		},

		clearAllFilters: function() {
			// gender filter
			$('#gender .box a#blank').click();
			// select all checkbox cloud filters
			$('a.select-all').click();
			// tags
			if ($('#preqq').length) {
				tag = null;
				$('#keyword_for_tags').val('');
				self.removeTag();
				$('li#preqq input#target_market_paid_tag_type_1').parent().find('> a.radio').click();
			}
			// doublechekd
			$('#doublecheckd').parent().children('a.checkbox.checkbox-checked').click();
			// age range
			$('#age-range div.ui-slider').slider('values', 0, 0);
			$('#age-range div.ui-slider').slider('values', 1, 47);
			// income range
			$('#income-range div.ui-slider').slider('values', 0, 0);
			$('#income-range div.ui-slider').slider('values', 1, 7);
			// responses
			$('#responses div.ui-slider').slider('value', 0);
			// states filter
			$('.note-adder a.deselect-all').click();
		}
	};
	return self;
} ();


var FulfillmentMeter = function() {
	var _svg = null;
	var _needle = null;
	var _shadow = null;
	var _text = null;
	var _halfCircle = 135.5;
	var _angle = (-_halfCircle);

	var _movie;
	var _queue = [];
	var _queueTimeoutId;
	var _tries = 0;
	var _maxTries = 5;
	
	var custom_credits = new Array();
	var creditsLine = new Array();

	credits_to_price = function(credits) {

		credits = Number(credits);

		if (credits <= 0 || credits >= 10000)
			return 0;

		var price = 0;


		for (var i = 0; i < creditsLine.length - 1; i++) {
			floor_credits = Number(creditsLine[i].credit);
			floor_cash = Number(creditsLine[i].cash);
			ceil_credits = Number(creditsLine[i + 1].credit);
			ceil_cash = Number(creditsLine[i + 1].cash);
			if (floor_credits <= credits && ceil_credits > credits) {
				price = linear_y_by_x(floor_credits, floor_cash, ceil_credits, ceil_cash, credits);
				break;
			}
		}

		return (Math.round(price * 100)) / 100;
	}

	linear_y_by_x = function(x1, y1, x2, y2, x) {
		var k = (parseFloat(y2) - parseFloat(y1)) / (parseFloat(x2) - parseFloat(x1));
		var b = parseFloat(y1) - k * parseFloat(x1);

		return parseFloat(x) * k + b;
	}

	var self = {
		embed_id: 'meter_embed',

		/**
		 * Setup the meter, embed it on the page
		 */
		setup: function() {
			//FOR IE don't forget to put 'wmode="transparent"' in jquery.svg.min.js
			if (document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1")) {
				try {
					$('#' + self.embed_id).svg({
						initPath : '/',
						onLoad: self.drawInitial
					});
				} catch(e) {}
			}
			else {
				swfobject.embedSWF("/swf/fulfillment_meter.swf", self.embed_id,
					"300", "200", "9.0.0",
					"/swf/expressInstall.swf",
					{
						'percentage': '100'
					},
					{
						'wmode': 'transparent',
						'menu': 'false'
					}, {});
			}
		},

		drawInitial: function(svg) {
			if (null === svg) return;

			_svg = svg;
			_svg.image(0, 0, 170, 156, '/images/bg/meter_bg.png');
			var filtersDefs = _svg.defs();
			var filters = _svg.filter(filtersDefs, 'filters', 0, 0, 170, 156, {
				filterUnits: 'userSpaceOnUse'
			});
			_svg.filters.gaussianBlur(filters, 'blur', 'SourceAlpha', 3);
			_shadow = _svg.group({
				id: 'shadow',
				transform: 'rotate(' + _angle + ',85,87)',
				filter: 'url(#filters)'
			});
			_svg.polygon(_shadow, [[82,105],[85,38],[88,105]], {
				fill: '333333'
			});
			_svg.circle(_shadow, 85, 87, 6, {
				fill: '#333333'
			});
			_needle = _svg.group({
				id: 'needle',
				transform: 'rotate(' + _angle + ',85,85)'
			});
			_svg.polygon(_needle, [[80,103],[85,32],[90,103]], {
				fill: '#0062af'
			});
			_svg.circle(_needle, 85, 85, 7, {
				fill: '#25a8e0'
			});
			_svg.circle(_needle, 85, 85, 1.5, {
				fill: '#0062af'
			});
		},

		initialize: function() {
			$('<div class="tooltip tooltip-right" id="totalcost-help-cloud"><div class="tooltip_top"><div class="tooltip_content">' +
				'<p></p><a href="' + pricing_pages_path + '" target="blank" style="font-weight:bold;text-decoration:underline;">Learn more about pricing <span class="button_arrows">>></span></a>' +
				'</div></div><div class="tooltip_bottom"/></div></div>').appendTo('body');

			$(".tooltip_link").each(function(i) {
				if ($(this).hasClass("totalcost-help-link")) {
					var tooltip_div = $("#tooltip" + i);
					tooltip_div.addClass("totalcost-help-cloud");
					tooltip_div.addClass("small");
				}
			});

			var count = $("#custom_credits_data > dt").length;
			for (i = 0; i < count; i++) {
				var obj = new Object;
				obj[$("#custom_credits_data > dt.credit-" + (i + 1)).attr('id')] = $("#custom_credits_data > dt.credit-" + (i + 1)).text();
				obj[$("#custom_credits_data > dd.cash-" + (i + 1)).attr('id')] = $("#custom_credits_data > dd.cash-" + (i + 1)).text();
				custom_credits.push(obj);
			}

			creditsLine.push(new Object({
				credit: 0,
				cash: 0
			}));

			count = custom_credits.length;
			for (i = 0; i < count; i++) creditsLine.push(custom_credits[i]);
			if (custom_credits.length > 0) {
				creditsLine.push(new Object({
					credit: 10000,
					cash: (10000 * custom_credits[custom_credits.length - 1].cash / custom_credits[custom_credits.length - 1].credit)
				}));
			}

			$('#total_cost').html($('#fulfilmentmeter #value').text() + ' credits');
			FulfillmentMeter.setCash($('#fulfilmentmeter #value').text());
			FulfillmentMeter.setHelp($('#fulfilmentmeter #value').text());

			TargetMarket.updatePrice();
		},

		/**
	 * Remove the movie object
	 */
		remove: function() {
			$('#' + self.embed_id).css("top", "0");
			$('#' + self.embed_id).css("left", "0");
			$('#' + self.embed_id).css("marginTop", "10");
		},

		/**
	 * Set the percentage
	 * @param {float} value
	 */
		setPercentage: function(value) {
			if (null === _svg){
				self.doWhenReady(function(movie) {
					value = parseInt(value);
					if (value > 100) value = 100;
					else if (value < 0) value = 0;
					movie.setPercentage(value);
				});
				return;
			}

			value = parseInt(value);
			if (value > 100) value = 100;
			else if (value < 0) value = 0;

			var angle = (2 * _halfCircle * value) / 100 - _halfCircle;
			if (_angle == angle) return;
			_angle = angle;

			$(_needle).animate({
				'svg-transform': 'rotate(' + _angle + ',85,85)'
			}, 2000);
			$(_shadow).animate({
				'svg-transform': 'rotate(' + _angle + ',85,87)'
			}, 2000);
		},

		/**
	 * Set the amount (appears below the meter)
	 * @param {string} value
	 */
		setAmount: function(value) {
			if (document.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1")) {
				if (null === _svg) return;

				if (null !== _text) _svg.remove(_text);

				var x = 85 - 2.7 * value.length;
				_text = _svg.text(x, 137, value, {
					fontFamily: "Trebuchet MS",
					fontSize: "11",
					fill: "#555555"
				});
			}
			else {
				self.doWhenReady(function(movie) {
					movie.setAmount(value);
				});
			}

		},

		// value in second
		seconds_to_pricecast_time: function(value) {
			h = value / 3600;
			if (h <= 72)
				return "" + parseInt(h) + " hours";
			else {
				if (h > 72 && h <= 96)
					return "4 days"
				return "5 days"
			}
		},
		seconds_to_angle: function(value) {
			// should be in 0..5 days range
			if (value < 0) value = 0;
			if (value > 432000) value = 432000;
			// 1% = 86.4 minutes
			return (parseFloat(value) / parseFloat(86.4 * 60));
		},
		red_zone_percents_position: function(value) {
			return (250/3) + ((50/3)*parseFloat(value)/100);
		},

		hideCash: function(value) {
			$('#total_cost_in_cash').fadeOut('slow');
		},

		setCash: function(value) {
			if (Number(value) > 0) {
				$('#total_cost_in_cash span').html(credits_to_price(value));
				$('#total_cost_in_cash').fadeIn('slow');
			}
		},

		setHelp: function(value) {
			if (Number(value) > total_credits) {
				$("div.tooltip.totalcost-help p").html("To launch this survey with specified options you'd need to purchase at least <strong>" + (Number(value) - total_credits) + " credits</strong> which cost $" + credits_to_price(Number(value) - total_credits) + ". Buy credits in bulk and save!");
			}
			else {
				$("div.tooltip.totalcost-help p").html("You have enough credits in your account to launch this survey with specified options!");
			}
		},

		/**
			 * Execute a function when the movie is ready
			 * @param {function} func
			 */
		doWhenReady: function(func) {
			_queue.push(func);
			self._tryQueue();
		},

		/**
			 * Try to run the queue
			 */
		_tryQueue: function() {
			window.clearTimeout(_queueTimeoutId);
			var movie = self.getMovie();

			if (movie && movie.setAmount) {
				self._runQueue(movie);
			}
			// not ready yet, so try again in a little while
			else {
				_tries++;
				if (_tries > _maxTries) {
					// remove the movie object and try again
					_tries = 0;
					_movie = null;
					self.remove();
					self.setup();
					window.clearTimeout(_queueTimeoutId);
					_queueTimeoutId = window.setTimeout(self._tryQueue, 500);
				}
				else {
					_queueTimeoutId = window.setTimeout(self._tryQueue, 200);
				}
			}
		},

		/**
			 * Run all items in the queue, and empty it
			 * @param {FlashMovieRef} movie
			 */
		_runQueue: function(movie) {
			for (var i = 0, len = _queue.length; i < len; i++) {
				_queue[i](movie);
			}
			_queue = [];
		},

		/**
			 * Get a reference to the movie
			 */
		getMovie: function() {
			// lazy-load the flash object reference
			if (!_movie) {
				// resolve embed_id to a Flash object reference based on browser type
				_movie = (!!document[self.embed_id])
				? document[self.embed_id]
				: window[self.embed_id];
			}
			return _movie;
		}
	};

	return self;
} ();

// Setup dynamic portions of the form on page load
$(TargetMarket.init);
jQuery(document).ready(FulfillmentMeter.setup);
jQuery(document).ready(FulfillmentMeter.initialize);
jQuery(document).ready(function() {
	TutorialVideo.addTutorialVideoButton('tm');
});

var changesMadeOnThisPage = true;
function areYouSureYouWantToLeaveThis(e) {
	if (changesMadeOnThisPage) {
		goodbyeMessage = "If you leave this page now, your changes will NOT be saved!";
		if (!e) e = window.event;
		// IE part
		e.cancelBubble = true;
		e.returnValue = goodbyeMessage;

		//FF part
		if (e.stopPropagation) {
			e.stopPropagation();
			e.preventDefault();
		}
		// Safari part
		return goodbyeMessage;
	}
}
	// in case you will need it later again =)
	//window.onbeforeunload=areYouSureYouWantToLeaveThis;