/**
 * @url: http://jquery-howto.blogspot.com/2009/09/get-url-parameters-values-with-jquery.html
 */
$.extend({
  getUrlVars: function(){
    var vars = [], hash;
    var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
    for(var i = 0; i < hashes.length; i++)
    {
      hash = hashes[i].split('=');
      vars.push(hash[0]);
      vars[hash[0]] = hash[1];
    }
    return vars;
  },
  getUrlVar: function(name){
    return $.getUrlVars()[name];
  }
});

function sanitize(html) {
	if (html.indexOf('<script') != -1)
	{
		html = html.replace(/<script/gi, '<textarea style="font-size:10px; font-family: Arial,sans;"><script');
		html = html.replace(/<\/script/gi, '</script></textarea');
	}
	return html;
}

function show_banner(id, show) {
	if (show == undefined) {
		show = true;
	}
	if (id == undefined) {
		var htmls = $('.b_html');
	} else {
		var htmls = $('#b_html_'+id);
	}
	for ( var index = 0; index < htmls.length; index++) {
		var html = $(htmls[index]);
		if (show == true) {
			if (html.next().html() == '') {
				html.next().html(sanitize(html.text()));
			}
		} else if (show == 'toggle') {
			if (html.next().html() == '') {
				html.next().html(sanitize(html.text()));
			} else {
				html.next().html('');
			}
		} else {
			html.next().html('');
		}
	}
	return void(0);
}

function show_expanded_banner(id, show) {
	if (show == undefined) {
		show = true;
	}
	if (id == undefined) {
		var htmls = $('.x_html');
	} else {
		var htmls = $('#x_html_'+id);
	}
	for ( var index = 0; index < htmls.length; index++) {
		var html = $(htmls[index]);
		if (show == true) {
			if (html.next().html() == '') {
				html.next().html(html.text());
			}
		} else if (show == 'toggle') {
			if (html.next().html() == '') {
				html.next().html(html.text());
			} else {
				html.next().html('');
			}
		} else {
			html.next().html('');
		}
	}
	return void(0);
}

function select(cls, type) {
	var inputs = $('.' + cls);
	
	for ( var index = 0; index < inputs.length; index++) {
		var input = $(inputs[index]);
		
		switch (type) {
		case 'all':
			if (!input.is(':disabled')) {input.attr('checked', true)};
			break;
		case 'none':
			input.attr('checked', false);
			break;

		default:
			break;
		}
	}
}

function loadStats(callback, pre, func, id) {
	// get ids
	var ids = '';
	$('.' + pre + 'box').map(function(index, elem) {
		ids += elem.value + ',';
	});
	
	// build url
	var url = brx.base_url + 'ajax/' + func;
	
	// build data
	var data = 'ids=' + ids;
	if ($.getUrlVar('days') != undefined) {
		data += '&days=' + $.getUrlVar('days'); 
	}
	
	// send ajax request
	$.getJSON(url, data, function(data, textStatus) {
		for ( var stat in data) {
			stat = data[stat];
			
			if (stat['impressions'] != 0) {
				$('#' + pre + '_imp_' + stat[id]).html(addCommas(stat['impressions']));
			
				var ctr = Math.floor((stat['clicks'] / stat['impressions']) * 100000) / 1000;
				$('#' + pre + '_ctr_' + stat[id]).html(ctr + '%');
			}
			
			if (stat['clicks'] != 0) {
				$('#' + pre + '_click_' + stat[id]).html(addCommas(stat['clicks']));
			}
			
			if (pre == 'c') {
				var is_active = stat['active'].indexOf('t') >= 0;
				var is_active_str = 'f';
				if (is_active) {
					is_active_str = 't';
				}
				var src = $('#' + pre + '_bactive_' + stat[id]).attr('src');
				$('#' + pre + '_bactive_' + stat[id]).attr('src', 
						src.replace('__', '_' + is_active_str));
			}
		}
		if (callback != undefined) {
			callback(data);
		}
	});
}

function loadBannerStats(callback) {
	return loadStats(callback, 'b', 'getBannerStats', 'bannerid');
}

function loadCampaignStats(callback, zone_id) {
	var func = 'getCampaignStats';
	if (zone_id != undefined) {
		func += '/' + zone_id;
	}
	return loadStats(callback, 'c', func, 'campaignid');
}

function loadZoneStats(callback) {
	return loadStats(callback, 'z', 'getZoneStats', 'zone_id');
}

function loadPublisherStats(callback) {
	return loadStats(callback, 'p', 'getPublisherStats', 'id');
}

function loadAdvertiserStats(callback) {
	return loadStats(callback, 'a', 'getAdvertiserStats', 'id');
}

/**
 * http://www.mredkj.com/javascript/numberFormat.html
 * @param nStr
 * @return
 */
function addCommas(nStr)
{
	nStr += '';
	x = nStr.split('.');
	x1 = x[0];
	x2 = x.length > 1 ? '.' + x[1] : '';
	var rgx = /(\d+)(\d{3})/;
	while (rgx.test(x1)) {
		x1 = x1.replace(rgx, '$1' + ',' + '$2');
	}
	return x1 + x2;
}

function loadData(callback, pre, func, qs) {
	// get ids
	var ids = '';
	$('.' + pre + 'box').map(function(index, elem) {
		ids += elem.value + ',';
	});
	
	// build url
	var url = brx.base_url + 'ajax/' + func;
	
	// build query string
	if (qs == undefined) {
		qs = {};
	}
	qs['ids'] = ids;
	
	// send ajax request
	$.getJSON(url, qs, function(data, textStatus) {
			callback(data, textStatus);
	});
}

function loadWarnings(pre, func) {
	var callback = function (warnings, textStatus) {
		for ( var id in warnings) {
			$('#' + pre + '_warn_' + id).html(warnings[id])
		}
	}
	loadData(callback, pre, func, {'method':'getWarnings'});
}

function loadZoneWarnings() {
	loadWarnings('z', 'getZoneWarnings');
}

function loadCampaignWarnings() {
	loadWarnings('c', 'genCampaign');
}

function calculateProbabilities(total, select) {
	if (total == 0) return;
	
	var elems = $(select);
	elems.each(function(index, elem) {
		elem = $(elem);
		var weight = parseInt(elem.text());
		elem.text(weight + ' (' + ((weight / total) * 100).toFixed() + '%)');
	});
}

function calculateCampaignProbabilities(select, data) {
	var total = 0;
	for ( var int = 0; int < data.length; int++) {
		var row = data[int];
		var elem_id = 'c_weight_' + row['campaignid'];
		var elem = $('#' + elem_id + select);
		if (elem.length == 0) {
			continue;
		}
		var new_amt = parseInt(elem.text()) * row.banner_weight;
		elem.text(new_amt);
		total = total + new_amt;
	}
	
	var elems = $(select);
	elems.each(function(index, elem) {
		elem = $(elem);
		var weight = parseInt(elem.text());
		elem.text(weight + ' (' + ((weight / total) * 100).toFixed() + '%)');
	});
}

function removeCampaigns(id, select, func) {
	var url = brx.base_url + 'search/' + func + '/' + id;
	var ids = '';
	$(select + ':checked').map(function(index, domElement) {
		ids += domElement.value + ',';
	});
	
	if (ids == '') {
		window.alert("Please select at least one campaign.");
	} else {
		window.location = url + '?ids=' + ids;
	}
}

function dateRange(_this) {
	var previous_value = _this.prev;
	var current_value = _this.value;
	var original_value = _this.getAttribute('original');

	if (previous_value == current_value && !_this.disabled) {
		_this.disabled = false;
		window.location = window.location.pathname + "?days=" + current_value;
	} else if (original_value != current_value){
		_this.prev = current_value;
		var func = function () { dateRange(_this); };
		setTimeout(func, 300);
	}
}

