serializeFilter = function () {

	var url = [];

	var fields = ['group',
	          	 'limit',
	          	 'filter_manufacturer', 
	          	 'filter_model', 
	          	 'filter_release_date', 
	          	 'filter_mobile_feature', 
	          	 'filter_gsm_provider', 
	          	 'filter_contract_length',
	          	 'filter_internet_speed', 
	          	 'filter_download_limit', 
	          	 'filter_free_mins', 
	          	 'filter_free_sms', 
	          	 'filter_handset_price', 
	          	 'filter_ec', 
	          	 'filter_gift', 
	          	 'filter_merchant', 
	          	 'filter_with_laptop'];
	
	for (var i = 0; i < fields.length; i++) {
		key = fields[i];
		
		if ($('#' + fields[i]).length == 0) {
			continue;
		}
		
		if (key.indexOf('filter_') == 0) {
			key = "filter[" + key.substring(7, key.length) + "]";
		}
		if ($('#' + fields[i]).val()) {
			if (key == "filter[with_laptop]") {
				if (!$('#filter_with_laptop').attr('checked')) {
					continue;
				}
			}else if (key == "filter[gift]") {
				var el = $('#filter_gift');
				if (el.get(0).selectedIndex > -1) {
					var option = el.get(0).options[el.get(0).selectedIndex];
				
					if ($(option).attr('is_group') == 1) {
						key = "filter[gift_group]";
					}
				}
			}	
			url.push(key + "=" + $('#' + fields[i]).val());
		}
	}

	return url.join("&");
}

filterDeals = function () {

	var filterQuery = serializeFilter();

	$('#list-container').html("Loading ...");
	
	$.post($('#filter_form').attr('action'),
		   filterQuery,
		   function (result) {

				$('#list-container').html(result);
			 	document.location.hash = "#filter$" + filterQuery;
			 	
				if (woopraEnabled) {
					filterValue = getFilterStateString();
					woopraTracker.trackDealsFilter(filterValue);
				}
							
			}, 'html');
}

getModels = function (onSuccess) {

	var url = getModelsUrl;
	$('#filter_model').html('');
	addSelectOption('#filter_model', "", "- model -");
	
	$.get(url,
		 {manufacturer : $('#filter_manufacturer').val()},
		 function (result) {
			fillModels(result);		
		 	
		 	 if (onSuccess != null) {
		 		onSuccess();
		 	 }
	     },
		'json'
		);
}


fillModels = function (models) {

	for (var i = 0; i < models.length; i++) {
		option = addSelectOption('#filter_model', models[i].id, models[i].text);
		
		if (models[i].exists == 0) {
			option.className = "value_not_exists";
		}
	}	 
}

parseFilter = function (str) {

	if (str.indexOf('filter$') == 1) {
		str = str.substring(8, str.length);
		var params = parseUrl(str);
		
		var mobileId = false;
		var manufacturerId = false;

		for (var key in params) {
			
			var fieldName = "";
			if (key.indexOf('filter') == 0) {
				fieldName = key.replace("[", "_").replace("]", "");
			} else {
				fieldName = key;
			}
		
			if ($('#' + fieldName).length > 0) {
				if (fieldName == "filter_model") {					
					mobileId = params[key];					
				} else if (fieldName == "filter_with_laptop") {
					$('#' + fieldName).attr('checked', true);
				} else {
					$('#' + fieldName).val(params[key]);
				}
				
				if (fieldName == "filter_manufacturer") {	
					manufacturerId = params[key];
				}
				if (fieldName == "limit") {	
					setLimitLinks(params[key]);
				}

		
			} else {
	
				if (fieldName == "filter_gift_group") {	
					fieldName = 'filter_gift';
					
					var el = $('#' +  fieldName);
					var options =  $(el).children('option');
					for (var i = 0; i < options.length; i++) {
						var option = $(options.get(i));
					
						if (option.attr('#is_group') == 1 && option.val() == params[key]) {						
							option.attr('selected', true);
						}
					}
				}
			}
		}
		
		if (mobileId) {
			getModels(function (modelId) {
				$("#filter_model").val(modelId);
				filterDeals();
			}.bind(null, params[key]));	
		} else if (manufacturerId) {
			getModels(function () {
				filterDeals();
			}.curry(null));	
		} else {			
			filterDeals();	
		}
	}
}

setLimitLinks = function (limitOption) {
	

	$('#limit').val(limitOption);
		
	var el = $('a[class="active_limit"]').removeClass("active_limit");
	
	
	if ($('#limit-' + limitOption).length > 0) {
		$('#limit-' + limitOption).addClass("active_limit");
	}
	if ($('#limit-' + limitOption + "-2").length > 0) {
		$('#limit-' + limitOption + "-2").addClass("active_limit");
	}
}

setLimit = function (limitOption) {
	setLimitLinks(limitOption);
	filterDeals();		
}

getFilterStateString = function () {
	var result = [];
	var formElements = $('#filter_form :input');
	
	for (var i = 0; i < formElements.length; i++) {
		var element = formElements.get(i);
		
		if ($(element).val()) {
			var fieldName = $(element).attr('name').replace('filter[', '').replace(']', '');
	 		if (element.tagName == "INPUT") {	 		
	 			if (element.type == "text" || element.type == "text") {
					result.push(fieldName + " = " +  $(element).val());
	 			}
			} else if (element.tagName == "SELECT") {
				var selectedIndex = element.selectedIndex;
				
				if (selectedIndex > 0) {
					result.push(fieldName + " = " + element.options[selectedIndex].text);
				}
			}
		}
	}
	
	if ($('#limit').val()) {
		result.push("Limit = " + $('#limit').val());
	}
	
	return result.join(", ");
}

showDealTariffShort = function(el, url) {
	$.get(url, {}, function(result) {
		$('.popup_tariff').html(result);
		var position = $(el).position();
	
		$('.popup_tariff').css('top', (position.top + 10) + "px");
		$('.popup_tariff').css('left', (position.left) + "px");
		$('.popup_tariff').show();
	}, 'html');
}

showDealGiftShort = function(el, url) {
	
	$.get(url, {}, function(result) {
		$('.popup_gift').html(result);
		var position = $(el).position();
	
		$('.popup_gift').css('top', (position.top + 10) + "px");
		$('.popup_gift').css('left', (position.left) + "px");
		$('.popup_gift').show();
	}, 'html');
	
}


$(function () {

	$('#group').bind('change', filterDeals);
	$('#limit').bind('change', filterDeals);

	if ($('#filter_manufacturer').length > 0) {
		$('#filter_manufacturer').bind('change', filterDeals);
		$('#filter_manufacturer').bind('change', getModels);
	}

	if ($('#filter_model').length > 0) {
		$('#filter_model').bind('change', filterDeals);
	}

	if ($('#filter_release_date').length > 0) {
		$('#filter_release_date').bind('change', filterDeals);
	}	

	if ($('#filter_mobile_feature').length > 0) {
		$('#filter_mobile_feature').bind('change', filterDeals);
	}	

	if ($('#filter_gsm_provider').length > 0) {
		$('#filter_gsm_provider').bind('change', filterDeals);
	}

	if ($('#filter_contract_length').length > 0) {
		$('#filter_contract_length').bind('change', filterDeals);
	}	

	if ($('#filter_free_mins').length > 0) {
		$('#filter_free_mins').bind('change', filterDeals);
	}	

	if ($('#filter_free_sms').length > 0) {
		$('#filter_free_sms').bind('change', filterDeals);
	}	

	if ($('#filter_handset_price').length > 0) {
		$('#filter_handset_price').bind('change', filterDeals);
	}	

	if ($('#filter_ec').length > 0) {
		$('#filter_ec').bind('change', filterDeals);
	}	
	if ($('#filter_gift').length > 0) {
		$('#filter_gift').bind('change', filterDeals);
	}	

	if ($('#filter_merchant').length > 0) {
		$('#filter_merchant').bind('change', filterDeals);
	}	

	if ($('#filter_internet_speed').length > 0) {
		$('#filter_internet_speed').bind('change', filterDeals);
	}	

	if ($('#filter_download_limit').length > 0) {
		$('#filter_download_limit').bind('change', filterDeals);
	}

	if ($('#filter_with_laptop').length > 0) {
		$('#filter_with_laptop').bind('click', filterDeals);
	}

	if ($('#filter_gift_for_gift_deals').length > 0) {
		$('#filter_gift_for_gift_deals').bind('change', function (e) {
			var v = $('#filter_gift_for_gift_deals').val();
		
			if (v == '0') {

				document.location = $('#filter_gift_for_gift_deals').val() + "#filter$filter[gift]=0";	
			} else if (v != '') {
				document.location = $('#filter_gift_for_gift_deals').val();			
			}
		});
	}


	if ($('#filter_merchant_for_filter_deals').length > 0) {
		$('#filter_merchant_for_filter_deals').bind('change', function (e) {
			if ($('#filter_merchant_for_filter_deals').val()) {
				document.location = $('#filter_merchant_for_filter_deals').val();
			}
		});
	}
	
	$('a.tariff_name').each(function()
	   {
	      // We make use of the .each() loop to gain access to each element via the "this" keyword...
	      $(this).qtip(
	      {
	         content: {
	            text: ' ',
	            ajax: {
	               url: $(this).attr('rel') // Use the rel attribute of each element for the url to load
	            },
	            title: {
	               text: ' ', // Give the tooltip a title using each elements text
	               button: true
	            }
	         },
	         position: {
	            at: 'bottom center', // Position the tooltip above the link
	            my: 'top center',
	            viewport: $(window) // Keep the tooltip on-screen at all times
	         },
	         show: {
	            event: 'click',
	            solo: true
	         },
	         hide: 'unfocus',
	         style: {
	            classes: 'ui-tooltip-wiki ui-tooltip-light ui-tooltip-shadow'
	         }
	      })
	   })
	   .click(function(event) {  event.preventDefault(); });
	
	$('a.gift_name').each(function()
			   {
			      // We make use of the .each() loop to gain access to each element via the "this" keyword...
			      $(this).qtip(
			      {
			         content: {
			            text: ' ',
			            ajax: {
			               url: $(this).attr('rel') // Use the rel attribute of each element for the url to load
			            },
			            title: {
			               text: ' ', // Give the tooltip a title using each elements text
			               button: true
			            }
			         },
			         position: {
			            at: 'bottom center', // Position the tooltip above the link
			            my: 'top center',
			            viewport: $(window) // Keep the tooltip on-screen at all times
			         },
			         show: {
			            event: 'click',
			            solo: true
			         },
			         hide: 'unfocus',
			         style: {
			            classes: 'ui-tooltip-wiki ui-tooltip-light ui-tooltip-shadow'
			         }
			      })
			   })
			   .click(function(event) {  event.preventDefault(); });
});

if (document.location.hash.length > 0) {
	parseFilter(document.location.hash);
}
