var Campaign = {
		
	init: function() {	
		// calculate base cpv
		this.updateCpv();
		this.updateExtraFee();

		// show/hide targeting part
		var domTarget = $("#target").get(0);
		if(domTarget) {
			$("#target").click(function() {
				if (this.checked)
					$("#campaignTarget").show();
				else
					$("#campaignTarget").hide();
			});
			if (domTarget.checked) $("#campaignTarget").show();
			else $("#campaignTarget").hide();
		}
		
		// attach click trigger to param checkboxes  
		$("input.cpv").click(function() {			
			Campaign.updateCheckboxes($(this));
			Campaign.updateCpv();
			Campaign.updateExtraFee();
		});
		
		$("select#capping").change(function() {
			Campaign.updateCheckboxes($(this));
			Campaign.updateCpv();	
			Campaign.updateExtraFee();
		});
		
		$("input#cpm").keyup(function() {
			Campaign.updateCpv();
			Campaign.updateExtraFee();
		});
		
		$("#budget_total").keyup(function() {
			Campaign.updateExtraFee();
		});
		
		$("#extra_fee_incrase").click(function(event) {
			var fee = parseInt($("#f_extra_fee").val())+10;
			$("#f_extra_fee").val(fee);
			
			Campaign.updateCpv();
			Campaign.updateExtraFee();
			
			event.preventDefault();
			return false;
		});
		
		$("#extra_fee_decrase").click(function(event) {
			var fee = parseInt($("#f_extra_fee").val())-10;
			if(fee < 0) fee = 0;
			$("#f_extra_fee").val(fee);
			
			Campaign.updateCpv();
			Campaign.updateExtraFee();
			
			event.preventDefault();
			return false;
		});
	},

	updateCpv: function() {
		
		// default multiplier 
		var cpvAdditionalCostMultiplier = 1.0;
		
		// loop through all param groups
		for(paramGroup in Campaign.paramGroups) {
			
			// calculate param values 
			var paramVal = 0;
			var paramTotal = 0;
			$("input[name=" + Campaign.paramGroups[paramGroup] + "]").each(function(i) {
				if (this.checked) paramVal = paramVal + parseInt($(this).val());
				paramTotal += parseInt($(this).val());
			});
			
			// increase multiplier as some checkboxes were checked
			if (paramVal != 0 && paramVal != paramTotal)
				cpvAdditionalCostMultiplier += Campaign.paramCosts[paramGroup];
		}
		
		// check capping
		var cappingValue = parseInt($("#capping").val());
		if(cappingValue) {
			cpvAdditionalCostMultiplier += (Campaign.maxCappingValue - cappingValue + 1) * Campaign.paramCosts[6];
		}
		
		// update displayed values
		baseCpm = parseInt($("#cpm").val());
		if(!baseCpm) baseCpm = 0;
		
		// extra priority fee
		var extraFee = parseInt($("#f_extra_fee").val())/100;
		if (isNaN(extraFee)){
			extraFee = 0;
		}
		// do some math magic
		var newCpv = (parseInt(cpvAdditionalCostMultiplier * baseCpm) / 1000) + extraFee;
		$("#cpv").text(newCpv.toFixed(2) + " zł");
		this.cpv = newCpv.toFixed(2)*100;
	},
	
	updateCheckboxes: function(jQueryObject) {
		var paramGroup = jQueryObject.attr("name");
		var paramVal = 0;
		if (paramGroup != "gender[]" && paramGroup != 'category_id' && paramGroup != 'sponsor_id' && paramGroup != 'capping') {
			
			$("input[name=" + paramGroup + "]").each(function(i) {
				
				// "all" clicked
				if (jQueryObject.val() == 0)
					if (i == 0) 
						this.checked = true;
					else 
						this.checked = false;
				
				// other in group clicked
				else {
					if (i == 0) 
						this.checked = false;
				}
				
				if (this.checked)
					paramVal = paramVal + parseInt($(this).val());
			});

			if (paramVal == 0)
				$("input[name=" + paramGroup + "]:first").get(0).checked = true;
		} else if(paramGroup == 'sponsor_id' || paramGroup == 'category_id') {
			paramVal = jQueryObject.val();
			if(paramVal && paramVal != '0') switch(paramGroup) {
				case 'sponsor_id': $("input[name=category_id]:first").get(0).checked = true; break;
				case 'category_id': $("input[name=sponsor_id]:first").get(0).checked = true; break;
			}
		}
	},
	
	updateExtraFee: function() {
		$("#budget_exhaust_date").text(this.getBudgetExhaustDate());
		
		var fee = parseInt($("#f_extra_fee").val())/100; 
		$("#extra_fee").text(fee.toFixed(2) + " zł");
	},
	
	getBudgetExhaustDate: function() {
		var budget = parseInt($("#budget_total").val())*100;
		if(!budget) budget = this.userBalance;
		
		var viewsPerDay = undefined;
		var lastItem = 0;
		$.each(this.cpvDailyViews, function(cpv, views) {
			if(cpv <= Campaign.cpv) viewsPerDay = views;
			lastItem = views;
		});
		if(!viewsPerDay) viewsPerDay = lastItem;
		
		var viewsLeft = this.cpv ? parseInt(budget / this.cpv) : 0;
		var daysLeft = viewsPerDay ? parseInt(viewsLeft / viewsPerDay) : 0;
		
		var date = new Date();
		date.setDate(date.getDate()+daysLeft);
		
		var year = date.getFullYear();
		var month = date.getMonth()+1; if(month < 10) month = "0"+month;
		var day = date.getDate(); if(day < 10) day = "0"+day;
		return year + "-" + month + "-" + day;
	}
}

$(document).ready(function() {
	Campaign.init();
});