var glMenuMap = new Array();
glMenuMap['classes'] = 'categories';
glMenuMap['categories'] = 'subcategories';
glMenuMap['subcategories'] = '';

glMenuMap['companies'] = 'divisions';
glMenuMap['divisions'] = '';

glMenuMap['mediums'] = 'medium-types';
glMenuMap['medium-types'] = 'medium-classes';
glMenuMap['medium-classes'] = 'medias';
glMenuMap['medias'] = '';

glMenuMap['products'] = '';
glMenuMap['media-owner'] = '';
glMenuMap['themes'] = '';
glMenuMap['races'] = '';
glMenuMap['medias-only'] = '';
glMenuMap['languages'] = '';

var glCloseMenuMap = new Array();
glCloseMenuMap['classes'] = ['classes', 'companies', 'divisions', 'categories', 'subcategories', 'mediums', 'medium-classes', 'medium-types', 'medias', 'products', 'languages', 'media-owner', 'themes', 'races', 'medias-only'];
glCloseMenuMap['categories'] = ['categories', 'subcategories'];
glCloseMenuMap['subcategories'] = ['subcategories'];

glCloseMenuMap['companies'] = ['companies', 'divisions', 'classes', 'categories', 'subcategories', 'mediums', 'medium-classes', 'medium-types', 'medias', 'products', 'languages', 'media-owner', 'themes', 'races', 'medias-only'];
glCloseMenuMap['divisions'] = ['divisions'];

glCloseMenuMap['mediums'] = ['mediums', 'companies', 'divisions', 'classes', 'categories', 'subcategories', 'medium-classes', 'medium-types', 'medias', 'products', 'languages', 'media-owner', 'themes', 'races', 'medias-only'];
glCloseMenuMap['medium-types'] = ['medium-types', 'medium-classes', 'medias'];
glCloseMenuMap['medium-classes'] = ['medium-classes', 'medias', 'medias-only', 'media-owner', 'products', 'languages', 'companies', 'divisions', 'classes', 'categories', 'subcategories'];
glCloseMenuMap['medias'] = ['medias'];

glCloseMenuMap['products'] = ['products', 'companies', 'divisions', 'classes', 'categories', 'subcategories', 'mediums', 'medium-classes', 'medium-types', 'medias', 'races', 'themes', 'media-owner', 'medias-only', 'languages'];
glCloseMenuMap['languages'] = ['languages', 'products', 'companies', 'divisions', 'classes', 'categories', 'subcategories', 'mediums', 'medium-classes', 'medium-types', 'medias', 'races', 'themes', 'media-owner', 'medias-only'];
glCloseMenuMap['media-owner'] = ['media-owner', 'themes', 'races', 'products', 'languages', 'companies', 'divisions', 'classes', 'categories', 'subcategories', 'mediums', 'medium-classes', 'medium-types', 'medias', 'medias-only'];
glCloseMenuMap['themes'] = ['themes', 'media-owner', 'races', 'products', 'languages', 'companies', 'divisions', 'classes', 'categories', 'subcategories', 'mediums', 'medium-classes', 'medium-types', 'medias', 'medias-only'];
glCloseMenuMap['races'] = ['races', 'media-owner', 'themes', 'products', 'languages', 'companies', 'divisions', 'classes', 'categories', 'subcategories', 'mediums', 'medium-classes', 'medium-types', 'medias', 'medias-only'];
glCloseMenuMap['medias-only'] = ['medias-only', 'races', 'media-owner', 'themes', 'products', 'languages', 'companies', 'divisions', 'classes', 'categories', 'subcategories', 'mediums', 'medium-classes', 'medium-types', 'medias'];

var glLabelMapping = new Array();
glLabelMapping['classes'] = 'Classes';
glLabelMapping['categories'] = 'Categories';
glLabelMapping['subcategories'] = 'Subcategories';
glLabelMapping['companies'] = 'Companies';
glLabelMapping['divisions'] = 'Divisions';
glLabelMapping['mediums'] = 'Mediums';
glLabelMapping['medium-types'] = 'Markets';
glLabelMapping['medium-classes'] = 'Medium Classes';
glLabelMapping['medias'] = 'Medias';
glLabelMapping['products'] = 'Products';
glLabelMapping['media-owner'] = 'Media Owners';
glLabelMapping['themes'] = 'Themes';
glLabelMapping['races'] = 'Sex &amp; Races';
glLabelMapping['medias-only'] = 'Medias';
glLabelMapping['languages'] = 'Languages';

var glSelectedElem = null;
var glIsFiltered = false;
var glIsCloseAll = false;
var glSelectMultiply = true;
var gHideSummary = true;
var gInAdmin = false;

function loadMenuContent(elem, prefix) {
	glSelectedElem = elem;
	setTimeout(function() {
		if (glSelectedElem == elem) {
			hideMenu(prefix);

			var selectedElem = jQuery(elem);
			jQuery('DIV[title=' + selectedElem.attr('title') + ']').removeClass('menu-li-static');

			if (!selectedElem.attr('lang')) {
				selectedElem.toggleClass('menu-li-static');
			}

			var accord = jQuery('#contenttophead');
			if (!accord.isBusy()) {
				accord.busy();
			}

			jQuery.ajax({
				type: "POST",
				url: "/data/get-" + prefix + "/",
				data: {
					search : '',
					parentid : (selectedElem.attr('did') ?  selectedElem.attr('did') : '')
				},
				dataType : 'json',
				success: function(json) {
					var html = _formMenuHtml(json, prefix, selectedElem.attr('did'))
					showMenu(elem, prefix, html);
					accord.free();
				}
			});
		}
	}, 500);
}

function _formMenuHtml(json, prefix, parentid) {
	var res = '';
	res += '<div class="menu-header"><div align="left" class="menu-title">' + glLabelMapping[prefix] + '</div>';
	res += '<div align="right" class="menu-close" onclick="hideMenu(\'' + prefix + '\')">X</div></div>';
	res += '<div align="center" style="padding:2px" onmouseover="_changeCurrentElement(this)"><input id="filter-' + prefix + '" type="text" class="content-filter" onkeyup="filterContent(\'' + prefix + '\', \'' + parentid + '\')"></div>';
	res += '<div id="innermenu-' + prefix + '">';
	res += _formObjects(json, prefix, 1);
	return res += '</div>';
}

var glObjects = new Array();
var glPages = new Array();

function _formObjects(json, prefix, page) {
	glObjects[prefix] = json;
	glPages[prefix] = page;
	var res = '';
	var objsToLoad = glMenuMap[prefix];
	var eventsCode = '';
	if (objsToLoad != '') {
		eventsCode = 'onmouseover="loadMenuContent(this, \'' + objsToLoad + '\')"';
	} else {
		eventsCode = 'onmouseover="_changeCurrentElement(this)"';
	}
	var PAGE_SIZE = 15;
	var calculatedPageSize = (json.length < PAGE_SIZE) ? json.length : PAGE_SIZE;

	var selectedItem = 0;
	var plusText = '+';
	for (var i = page * calculatedPageSize - calculatedPageSize; i < calculatedPageSize * page; i++) {
		if (!json[i]) {
			break;
		}
		selectedItem = json[i];
		if (_isSelected(prefix, selectedItem.id)) {
			plusText = '-';
		} else {
			plusText = '+';
		}
		res += '<div onclick="_selectItem(\'' + prefix + '-' + selectedItem.id + '\')">' +
			   '	<div class="menu-item" lang="' + plusText + '" id="' + prefix + '-' + selectedItem.id + '-plus">&nbsp;' + plusText + '&nbsp;</div>' +
			   '	<div class="menu-li-hover" id="' + prefix + '-' + selectedItem.id + '" ' + eventsCode + '  title="' + prefix + '" did="' + selectedItem.id + '">' + selectedItem.name + '</div>' +
			   '</div>';
	}
	if (json.length > PAGE_SIZE) {
		var prevText = 'PREVIOUS';
		var prevOnclick = '_prevPage(\'' + prefix + '\')';
		var prevClass = 'menu-prev-next menu-prev';

		if (page <= 1) {
			prevText = prevOnclick = '';
			prevClass = 'menu-prev-next menu-none';
		}

		var nextText = 'NEXT';
		var nextOnclick = '_nextPage(\'' + prefix + '\')';
		var nextClass = 'menu-prev-next menu-next';

		if (page * calculatedPageSize >= json.length) {
			nextText = nextOnclick = '';
			nextClass = 'menu-prev-next menu-none';
		}
		res += '<table onmouseover="_changeCurrentElement(this)" width="220px">' +
					'<tr>' +
						'<td onclick="' + prevOnclick + '" class="' + prevClass + '">' + prevText + '</td>' +
						'<td onclick="' + nextOnclick + '" class="' + nextClass + '">' + nextText + '</td>' +
					'</tr>' +
				'</table>';
	}
	return res;
}

function _nextPage(prefix) {
	hideMenu(prefix, true);
	jQuery('#innermenu-' + prefix).html(
		_formObjects(glObjects[prefix], prefix, ++glPages[prefix])
	);
}

function _prevPage(prefix) {
	hideMenu(prefix, true);
	jQuery('#innermenu-' + prefix).html(
		_formObjects(glObjects[prefix], prefix, --glPages[prefix])
	);
}

function _changeCurrentElement(elem) {
	glSelectedElem = elem;
}

function showMenu(element, prefix, html) {
	var elem = jQuery(element);
	var elemOffset = elem.offset();
	var elemWidth = elem.outerWidth();
	jQuery('#menu-container').append(_getMenuHtml(elemOffset, elemWidth, prefix, html)).show();
}

function _getMenuHtml(elemOffset, elemWidth, prefix, html) {
	if (elemOffset.left == '0') {
		return '';
	}

	return '<div class="menu" style="top:' + elemOffset.top + 'px;' +
			'left:' + (elemOffset.left + elemWidth) + 'px;" onmouseout="setCloseAll()" onmouseover="unsetCloseAll()" id="' + prefix + '_menu">' + html + '</div>';
}

function hideMenu(prefix, isHideFirst) {
	var prefixes = glCloseMenuMap[prefix];
	var start = 0;
	if (isHideFirst) {
		start = 1;
	}
	for (var i = start; i < prefixes.length; i++) {
		jQuery('DIV[id=' + prefixes[i] + '_menu]').remove();
	}
}

function filterContent(prefix, parentid) {
	setTimeout(function() {
		if (!glIsFiltered) {
			hideMenu(prefix, true);

			glIsFiltered = true;
			var accord = jQuery('#contenttophead');
			if (!accord.isBusy()) {
				accord.busy();
			}
			jQuery.ajax({
				type: "POST",
				url: "/data/get-" + prefix + "/",
				data: {
					search : jQuery('#filter-' + prefix).val(),
					parentid : parseInt(parentid)
				},
				dataType : 'json',
				success: function(json) {
					jQuery('#innermenu-' + prefix).html(_formObjects(json, prefix, 1));
					accord.free();
					glIsFiltered = false;
				}
			});
		}
	}, 500);
}

function setCloseAll() {
	glIsCloseAll = true;
	setTimeout(function() {
		if (glIsCloseAll == true) {
			hideMenu("classes");
		}
	}, 1500);
}

function unsetCloseAll() {
	glIsCloseAll = false;
}

function showSummaryArea() {
	var summary = jQuery('#summary-area')
	if (summary.is(":hidden")) {
		jQuery('#adsearch').hide();
		jQuery('#block-header').show();
		jQuery('#search-result').hide();
		jQuery('#refine-bar').hide();
		jQuery('#contenttophead').show();
		jQuery('#sidebar').show();
		jQuery('#result-header').hide();
		jQuery('#content').css('width', '868px');
		summary.show();
	}
}

function _clearDates(prefix) {
    if (prefix == 'time-to') {
        jQuery('#search-time-to').val('HH:MM');
    } else if (prefix == 'time-from') {
        jQuery('#search-time-from').val('HH:MM');
    } else if (prefix == 'date-from') {
		jQuery('#search-from').val('');
	} else if (prefix == 'date-to') {
		jQuery('#search-to').val('');
	} else if (prefix == 'period') {
		jQuery('#period-select').val('');
	} else if (prefix == 'keyword') {
		jQuery('#search-keyword').val('Search by keyword...');
	}
}

function clearSummaryItems(prefix) {
	jQuery('#' + prefix + '-summary').html('');
	_clearDates(prefix);
	_hideRow(prefix);
}

function _isSelected(prefix, id) {
	if (prefix == 'medias-only') {
		prefix = 'medias';
	}
	if (jQuery('#' + prefix + '-summary div[lang=' + id + ']').length > 0) {
		return true;
	} else {
		return false;
	}
}

function _hideSummaryArea() {
	var elems = [
        'classes', 'categories', 'subcategories',
        'companies', 'divisions',
        'medium', 'medium-types', 'medium-classes', 'medias',
        'products', 'media-owner', 'themes', 'races', 'period',
        'keyword', 'date-from', 'date-to', 'time-from', 'time-to',
        'keyword-type', 'range', 'languages', 'dow', 'times',
        'trend', 'compare', 'dayparts', 'ad', 'exclude-keyword'
    ];

	var isHide = true;
	for (var i = 0; i <= elems.length; i++) {
		if (jQuery('#' + elems[i] + '-summary div').length > 0) {
			isHide = false;
		}
	}
	if (isHide && gHideSummary) {
		jQuery('#summary-area').hide();
		jQuery('#adsearch').show();
	}
}

function _selectItem(elemId) {
	var selectedElem = jQuery('#' + elemId);
	var title = selectedElem.attr('title');

	if (title == 'medias-only') {
		title = 'medias';
	}

	var plusElem = jQuery('#' + elemId + '-plus');

	if (plusElem.attr('lang') == '+') {
		showSummaryArea();
		plusElem.attr('lang', '-');
		plusElem.html('&nbsp;-&nbsp;');
		jQuery('#' + title + '-row').show();

		if (glSelectMultiply) {
			jQuery('#' + title + '-summary').append(
				_generateSummaryItem(title, selectedElem.attr('did'), selectedElem.html())
			);
		} else {
			jQuery('#' + title + '-summary').html(
				_generateSummaryItem(title, selectedElem.attr('did'), selectedElem.html())
			);
		}

        if (gInAdmin) {
            jQuery('.picker').datepicker({
                showAnim: '',
                dateFormat: 'yy-mm-dd',
                changeMonth: true,
                changeYear: true,
                showWeek: true,
                firstDay: 1
            });
        }
	} else {
		plusElem.attr('lang', '+');
		plusElem.html('&nbsp;+&nbsp;');
		jQuery('#' + title + '-summary div[lang=' + selectedElem.attr('did') + ']').remove();
		_hideRow(title)
	}
}

function _hideRow(title) {
	if (jQuery('#' + title + '-summary div').length <= 0) {
		jQuery('#' + title + '-row').hide();
	}
	_hideSummaryArea();
}

function _deleteItem(elem, prefix) {
    jQuery('#' + prefix + '-dates-' + jQuery(elem).attr('lang')).remove();
	jQuery(elem).remove();
	_clearDates(prefix);
	_hideRow(prefix);
}

function _selectPeriod() {
	if (jQuery('#period-select').val() == '') {
		clearSummaryItems('period');
	} else {
		clearSummaryItems('date-from');
		clearSummaryItems('date-to');

		var title = 'period';
		jQuery('#' + title + '-row').show();
		showSummaryArea();
		jQuery('#' + title + '-summary').html(
			_generateSummaryItem(title, jQuery('#period-select').val(),  jQuery('#period-select option:selected').text())
		);
	}
}

function _selectDateFrom(text) {
	if (text != '') {
		clearSummaryItems('period');
		var title = 'date-from';
		jQuery('#' + title + '-row').show();
		showSummaryArea();
		jQuery('#' + title + '-summary').html(
			_generateSummaryItem(title, text, text)
		);
	}
}

function _selectDateTo(text) {
	if (text != '') {
		clearSummaryItems('period');
		var title = 'date-to';
		jQuery('#' + title + '-row').show();
		showSummaryArea();
		jQuery('#' + title + '-summary').html(
			_generateSummaryItem(title, text, text)
		);
	}
}

function _selectTxt(title) {
	jQuery('#' + title + '-row').show();
	showSummaryArea();
	var text = jQuery('#search-' + title).val();
    jQuery('#' + title + '-summary').html(
        _generateSummaryItem(title, text, text)
    );
}

function _generateSummaryItem(title, lang, html, options) {
    var settings = jQuery.extend({
        'start_date': '',
        'end_date': ''
    }, options || {});

    var style = gInAdmin && title == 'medium-classes' ? 'float:left; width: 195px; padding: 2.5px 0' : '';
	var res = '<div style="' + style + '" class="summary-item" onclick="_deleteItem(this, \'' + title + '\')" lang="' + lang + '">' + html + '&nbsp;</div>';

    if (gInAdmin && title == 'medium-classes') {
        res += '&nbsp;&nbsp;<div style="width: 180px; float: left" class="dates" id="' + title + '-dates-' + lang + '">From <input type="text" style="font-size: 10px; width: 60px" class="picker date-from" value="' + settings.start_date + '"> To <input type="text" style="font-size: 10px; width: 60px;" class="picker date-to" value="' + settings.end_date + '"></div>';
    }

    return res;
}

function updateSearchResult(paramObj) {
	// todo temp
	jQuery('#actions').show();
	var params = {
		page : paramObj.page ? paramObj.page : 1,
		checkDate : paramObj.checkDate ? paramObj.checkDate : false,
		url : paramObj.url ? paramObj.url : '/adsearch/result/',
		order : paramObj.order ? paramObj.order : '',
		period : paramObj.period ? paramObj.period : '',
		promoTypes : paramObj.promoTypes ? paramObj.promoTypes : '',
		reportType : paramObj.reportType ? paramObj.reportType : null,
		updateCriteria: paramObj.updateCriteria ? paramObj.updateCriteria : 'true',
        isShowDetails: paramObj.isShowDetails != null ? paramObj.isShowDetails : 1,
        isShowSummary: paramObj.isShowSummary != null ? paramObj.isShowSummary : 1,
        'selectedIds': paramObj.selectedIds != null ? paramObj.selectedIds : [],
        'unselectedIds': paramObj.unselectedIds != null ? paramObj.unselectedIds : []
	};

	hideMenu('classes');
	if (params.checkDate) {
		if (_getItemValues('range') == '' && _getItemValues('compare') == '' && _getItemValues('period') == '' && _getItemValues('date-to') == '' && _getItemValues('date-from') == '') {
			showMessageDialog('Please select Date Period or Date Range.', '#ui-dialog-two');
			return;
		}
	}

	if (jQuery('#reports').size() > 0 && jQuery('#reports').val() == '' && paramObj.reportType == null) {
		showMessageDialog('Please select your report.');
		return;
	}

	showSystemIsBusy();

	jQuery.ajax({
		type: "POST",
		url: params.url,
		data: {
            'selectedIds': params.selectedIds,
            'unselectedIds': params.unselectedIds,
            'isShowDetails': params.isShowDetails,
            'isShowSummary': params.isShowSummary,
			'page' : params.page,
			'adId' : _getItemValues('ad', true),
			'theme_arr' : _getItemValues('themes', true),
			'race_arr' : _getItemValues('races', true),
			'keyword' : _getItemValues('keyword'),
			'order' : params.order,
			'range' : _getItemValues('range'),
			'compare' : _getItemValues('compare'),
			'times' : _getItemValues('times'),
			'dayparts': _getItemValues('dayparts'), 
			'daysOfWeek': _getItemValues('dow'),
			'languageIds' : _getItemValues('languages'),
			'updateCriteria': params.updateCriteria,
			'reportType' : params.reportType || jQuery('#reports').val(),
			'reportPeriod' : _getItemValues('trend') || params.period,
			'sortBy': _getItemValues('sort'),
			'promoTypes' : params.promoTypes,
			'media_owner_id' : _getItemValues('media-owner', true),
			'product_class_id' : _getItemValues('classes', true),
			'category_id' : _getItemValues('categories', true),
			'subcategory_id' : _getItemValues('subcategories', true),
			'product_id' : _getItemValues('products', true),
			'company_id' : _getItemValues('companies', true),
			'division_id' : _getItemValues('divisions', true),
			'medium_id' : _getItemValues('mediums', true),
			'type_id' : _getItemValues('medium-types', true),
			'medium_class_id' : _getItemValues('medium-classes', true),
			'media_id' : _getItemValues('medias', true),
			'date_range_from' : _getItemValues('date-from'),
			'date_range_to' : _getItemValues('date-to'),
			'date_period_id' : _getItemValues('period'),
			'time_from' : _getItemValues('time-from'),
			'time_to' : _getItemValues('time-to'),
            'durationIds': _getItemValues('durations'),
            'keywordType': _getItemValues('keyword-type'),
            'excludeKeyword': _getItemValues('exclude-keyword'),
            'includeClassification': _getItemValues('include-classification'),
			'search' : 'true'
		},
		success: function(text) {
			showSummaryArea();
			jQuery('#search-result').html(text);
			
			jQuery('#summary-area').hide();
			jQuery('#contenttophead').hide();
			jQuery('#sidebar').hide();

			jQuery('#refine-bar').show();
			jQuery('#result-header').show();
			jQuery('#search-result').show();

			if (paramObj.url == '/report/result/') {
				jQuery('#sidegartophead').hide();
				jQuery('#refine-bar').show();
				jQuery('#shadow-table').hide();
				jQuery('#separator-div').hide();
				jQuery('#content').css('width', '1152px');
			}

			showSystemIsFree();
		}
	});
}

function runStationShareReport() {
	var html =
		'<div><label><input type="checkbox" name="promo" value="spots" checked="checked" /> Spots</label></div>' +
		'<div><label><input type="checkbox" name="promo" value="promotion" checked="checked" /> Promotion</label></div>' +
		'<div><label><input type="checkbox" name="promo" value="psa" checked="checked" /> PSA</label></div>';

	showCustomDialog(function(paramObj) {
		jQuery('#dl').show();
		jQuery('#excel-export').hide();

		var promo = [];
		jQuery.each(jQuery(":checkbox[name=promo]").filter(":checked"), function(index, elem) {
			promo[index] = jQuery(elem).val();
		});

		updateSearchResult({'page': 1, 'checkDate': true, 'promoTypes': promo.join(','), 'url': '/report/generate/', 'order': 'act_date, time'});
		paramObj.dialog.dialog('close');
	}, html, {'width': 300, 'height': 150, 'title': 'Options'});
}

function runDowntimeReport() {
    var html =
        '<div><label><input type="checkbox" checked="checked" name="report-options-details" value="details" /> Details</label></div>' +
        '<div><label><input type="checkbox" checked="checked" name="report-options-summary" value="summary" /> Summary</label></div>';

	showCustomDialog(function(paramObj) {
		jQuery('#dl').show();
		jQuery('#excel-export').hide();

        var isShowDetails = jQuery(":checkbox[name=report-options-details]").filter(":checked").size();
        var isShowSummary = jQuery(":checkbox[name=report-options-summary]").filter(":checked").size();
        
        if (!isShowDetails && !isShowSummary) {
            isShowDetails = 1;
            isShowSummary = 1;
        }    

		updateSearchResult({
            'page': 1, 'checkDate': true,
            'reportType': 'Downtime', 'url': '/report/generate/',
            'isShowDetails': isShowDetails, 'isShowSummary': isShowSummary,
            'order': 'act_date, time'
        });

		paramObj.dialog.dialog('close');
	}, html, {'width': 300, 'height': 150, 'title': 'Options'});
}

function runImplicitReport()  {
    var html =
            '<div><label><input type="radio" name="report-options" checked="checked" value="ByPrimary" /> By Retailer</label></div>' + 
            '<div><label><input type="radio" name="report-options" value="BySecondary" /> By Manufacturer</label></div>' +
            '<div><label><input type="checkbox" name="report-by-medium-type" value="ByMediumType" /> By Market</label></div>';

	showCustomDialog(function(paramObj) {
        jQuery.ajax({
            'url': '/report/validate-period',
            'type': 'post',
            'dataType': 'json',
            'data': {
                'range': _getItemValues('range'),
                'compare': _getItemValues('compare'),
                'period': _getItemValues('period')
            },
            'success': function(res) {
                var choice =
                    jQuery(":radio[name=report-options]").filter(":checked").size() > 0
                    ? jQuery(":radio[name=report-options]").filter(":checked").val()
                    : '';

                jQuery('#dl').show();
                jQuery('#excel-export').hide();

                var reportType = 'ImplicitProducts' + choice + (jQuery(":checkbox[name=report-by-medium-type]").is(':checked') ? 'ByMediumType' : '');

                updateSearchResult({'page': 1, 'checkDate': true, 'reportType': reportType, 'url': '/report/generate/', 'order': 'act_date, time'});
                paramObj.dialog.dialog('close');
            }
        });
	}, html, {'width': 300, 'height': 150, 'title': 'Options'});
}

function runAdLengthReport() {
    showSystemIsBusy();
    jQuery.ajax({
        'url': '/data/get-durations',
        'type': 'post',
        'dataType': 'json',
        'success': function(durations) {
            var durationsHtml = '<table class="b-durations"><tr><td>Duration</td>';

            for (var count in durations) {
                durationsHtml += '<td>' + durations[count].name + '</td>';
            }

            durationsHtml += '</tr><tr><td></td>';

            for (var count in durations) {
                durationsHtml += '<td><input type="checkbox" lang="' + durations[count].name + '" name="duration" value="' + durations[count].id + '" /></td>';
            }

            durations += '</tr></table>';

            var radioHtml = '<div><label><input type="radio" name="report-options" value="Media" />Station</label></div>';
            if (_getItemValues('trend') == '') {
                radioHtml = '<div><label><input type="checkbox" name="report-options" value="Media" />Station</label></div>';
            }

            var html =
                    radioHtml +
                    '<div><label><input type="radio" name="report-options" value="Company" />Company</label></div>' +
                    '<div><label><input type="radio" name="report-options" value="Category" />Category</label></div>' +
                    '<div><label><input type="radio" name="report-options" value="Product" />Product</label></div><br/>' +
                    durationsHtml;

            showSystemIsFree();
            showCustomDialog(function(paramObj) {
                jQuery('#dl').show();
                jQuery('#excel-export').hide();

                clearSummaryItems('durations');
                jQuery(":checkbox[name=duration]").filter(":checked").each(function(index, elem) {
                    jQuery('#durations-summary').append(
                        _generateSummaryItem('durations', jQuery(elem).val(), jQuery(elem).attr('lang'))
                    )
                });

                var choice = jQuery(":radio[name=report-options]").filter(":checked").size() > 0 ? jQuery(":radio[name=report-options]").filter(":checked").val() : 'Media';

                var reportType = choice + 'ByAdLength';
                if (_getItemValues('trend') != '') {
                    reportType += 'ByPeriod';
                } else if (jQuery(":checkbox[name=report-options]").filter(":checked").size() > 0) {
                    reportType += 'ByStation';
                }

                if (jQuery(":checkbox[name=report-options]").filter(":checked").size() > 0 && jQuery(":radio[name=report-options]").filter(":checked").size() == 0) {
                    AdEase.msg('Please select Company, Category or Product', '#ui-dialog-two');
                } else {
                    updateSearchResult({'page': 1, 'checkDate': true, 'reportType': reportType, 'url': '/report/generate/', 'order': 'act_date, time'});
                    paramObj.dialog.dialog('close');
                }
            }, html, {'width': 400, 'height': 200, 'title': 'Options'});
        }
    });
}

function runSpecificReport(type, options) {
    var settings = jQuery.extend({
        "promo": false
    }, options || {});

    var html =
            '<div><label><input type="radio" name="report-options" value="ByStation" /> By Station</label></div>' +
            '<div><label><input type="radio" name="report-options" value="ByDayparts" /> By Dayparts</label></div>';

    if (settings.promo) {
        html +=
            '<div><label><input type="checkbox" class="report-promos" value="spots" checked="checked" /> Spots</label></div>' +
            '<div><label><input type="checkbox" class="report-promos" value="promotion" checked="checked" /> Promotion</label></div>' +
            '<div><label><input type="checkbox" class="report-promos" value="psa" checked="checked" /> PSA</label></div>';
    }

	showCustomDialog(function(paramObj) {
        jQuery.ajax({
            'url': '/report/validate-period',
            'type': 'post',
            'dataType': 'json',
            'data': {
                'range': _getItemValues('range'),
                'compare': _getItemValues('compare'),
                'period': _getItemValues('period')
            },
            'success': function(res) {
                var promos = jQuery.map(jQuery(".report-promos:checked"), function(elem) {
                    return jQuery(elem).val();
                });

                var choice = jQuery(":radio[name=report-options]").filter(":checked").size() > 0 ? jQuery(":radio[name=report-options]").filter(":checked").val() : '';
                     
                if ((_getItemValues('trend') == '+1 hour' || choice == 'ByDayparts') && !res.status) {
                    AdEase.msg(res.message);
                } else {
                    jQuery('#dl').show();
                    jQuery('#excel-export').hide();

                    var reportType = type + choice;

                    if (_getItemValues('trend') != '' && choice != '') {
                      reportType += 'ByPeriod';
                    }

                    updateSearchResult({
                        "page": 1,
                        "checkDate": true,
                        "reportType": reportType,
                        "url": "/report/generate/",
                        "order": "act_date, time",
                        "promoTypes": promos.join(',')
                    });

                    paramObj.dialog.dialog('close');
                }
            }
        });
	}, html, {'width': 300, 'height': 150, 'title': 'Options'});
}

function runStationScheduleReport() {
	jQuery('#dl').hide();
	jQuery('#excel-export').show();
	updateSearchResult({'page' : 1, checkDate : true, 'url' : '/report/result/', 'order' : 'act_date, time'})
}

function limitCriteriaByAd(code, id, name, type) {
	jQuery('#report_id').val('');
	jQuery('#no-results').hide();
	jQuery('#actions').hide();
	jQuery('#customize').hide();
	jQuery('#customize-separator').hide();

    jQuery('#keyword-summary').html(
        _generateSummaryItem('keyword', code, code)
    );
	jQuery('#keyword-row').show();

    jQuery('#' + type + '-summary').html(
        _generateSummaryItem(type, id, name)
    );
	jQuery('#' + type + '-row').show();

	jQuery('#reports').val('StationSchedule');	
	runStationScheduleReport();
}

function _getItemValues(prefix, quotes) {
	var elems = jQuery('#' + prefix + '-summary div:not(.dates)');
	var res = '';
	var currentElem;
	for (var i = 0; i < elems.length; i++) {
		if (quotes && quotes == true) {
			currentElem = "'" + jQuery(elems[i]).attr('lang') + "'";
		} else {
			currentElem = jQuery(elems[i]).attr('lang');
		}
		if (res == '') {
			res += currentElem;
		} else {
			res += ',' + currentElem;
		}
	}
	return res;
}

function saveSearchResult(pageName) {
	var html = '<span style="color:red; font-size:12px;" id="search-result-error"></span><textarea id="search-result-save" style="width:373px;height:150px;"></textarea>';
	showSaveDialog(_insertSearchResult, html, {page : pageName})
}

function _insertSearchResult(paramObj) {
	var value = jQuery('#search-result-save').val();
	if (value == '') {
		jQuery('#search-result-error').html('Name is required');
	} else {
		jQuery.ajax({
			type : 'POST',
			url  : '/' + paramObj.page + '/save/',
			cache : 'false',
			data : {
				'name' : value
			},
			dataType : 'json',
			success : function(res) {
				if (res.status == 'exist') {
					jQuery('#search-result-error').html('Name is already exists.');
				} else if (res.status == true) {
					paramObj.dialog.dialog('close');
				} else {
					showMessageDialog('An error occurred');
				}
			}
		});
	}
}

function openAddCommentArea(id, isUpdate) {
	if (isUpdate) {
		jQuery.ajax({
			type : 'POST',
			url  : '/comments/get/',
			cache : 'false',
			data : {
				'adID' : id
			},
			dataType : 'json',
			success : function(res) {
				text = res.id;
				if (res.status == true) {
					jQuery('#comment-row-' + id).hide();
					jQuery('#comment-' + id).val(res.obj.comment);
					jQuery('#comment-type-' + id).val(res.obj.type);
					jQuery('#comment-area-' + id).show();
					jQuery('#comment-open-' + id).hide();
				} else {
					showMessageDialog(res.text);
				}
			}
		});
	} else {
		jQuery('#comment-area-' + id).show();
		jQuery('#comment-open-' + id).hide();
	}
}

function closeAddCommentArea(id) {
	jQuery('#comment-area-' + id).hide();
	jQuery('#comment-open-' + id).show();
	if (jQuery('#comment-' + id).val() != '') {
		jQuery('#comment-open-' + id).hide();
		jQuery('#comment-row-' + id).show();
	}
}

function addNewComment(id) {
	jQuery.ajax({
		type : 'POST',
		url  : '/comments/save/',
		cache : 'false',
		data : {
			'comment' : jQuery('#comment-' + id).val(),
			'type' : jQuery('#comment-type-' + id).val(),
			'adID' : id
		},
		dataType : 'json',
		success : function(res) {
			text = res.id;
			if (res.status == true) {
				jQuery('#comment-user-' + id).html(res.text);
				jQuery('#comment-row-' + id).show();
				jQuery('#comment-area-' + id).hide();
				jQuery('#comment-empty-' + id).hide();
				jQuery('#comment-' + id).val('');
				jQuery('#comment-func-' + id).html(
					'<span class="cursor-pointer" onclick="deleteAdComment(' + res.id + ', ' + id + ')">delete</span> | <span class="cursor-pointer" onclick="openAddCommentArea(' + id + ', true)">edit</span>'
				)
			} else {
				showMessageDialog(res.text);
			}
		}
	});
}

function deleteAdComment(id, adId) {
	jQuery.ajax({
		type : 'POST',
		url  : '/comments/delete/',
		data : {
			'commentID' : id
		},
		cache : 'false',
		dataType : 'json',
		success : function(res) {
			if (res == true) {
				jQuery('#comment-row-' + adId).hide();
				jQuery('#comment-empty-' + adId).show();
				jQuery('#comment-open-' + adId).show();
				jQuery('#comment-' + adId).val('');
			} else {
				showMessageDialog('An error occurred');
			}
		}
	});
}

function customizeReportColumns(page, order) {	
    showLoadingDialog()
    jQuery.ajax({
		type : 'POST',
		url  : '/report/get-allowed-columns/',
		cache : 'false',
		dataType : 'json',
        success : function(allowedColumns) {
            jQuery.ajax({
				type : 'POST',
				url  : '/report/get-active-columns/',
				cache : 'false',
				dataType : 'json',
                success : function(activeColumns) {
                    var columns = new Array(
                        'Product', 'Description', 'Class', 'Category',
                        'Subcategory', 'Company', 'Medium', 'Media', 'Date', 'Time/Page',
                        'Cost', 'Rating/Circulation', 'Duration/Size', 'Ad Position', 'Breaks'
                    );

                    var html = '<ul style="list-style-type: none;">';
                    for (var count = 0; count < columns.length; count++) {
                        var sel = inArray(count, activeColumns) ? 'checked="checked"' : '';
                        if (inArray(count, allowedColumns)) {
                            html += '<li style="text-align: left"><input ' + sel + ' value="' + count + '" id="column-' + count + '" type="checkbox"><label for="column-' + count + '">' + columns[count] + '</label></li>';
                        }
                    }
                    html += '</ul>';

                    var content =
                    '<table width="100%">' +
                    '   <tr><td colspan="2" id="dhtmlpopup-body">' + html + '</td></tr>' +
                    '</table>';
                    hideDialog();
					showEditDialog(activateReportColumns, content, {'page' : page, 'order': order});
                }
            });
        }
    });
}

function activateReportColumns(paramObj) {
    var res = '';
    for (var i = 0; i <= 14; i++) {
        if  (jQuery('#column-' + i)) {
            if (jQuery('#column-' + i).is(':checked')) {
                if (res == '') {
                    res += i;
                } else {
                    res += ',' + i;
                }
            }
        }
    }
	jQuery('#reports').val('StationSchedule');
	jQuery.ajax({
		type : 'POST',
		url  : '/report/activate-columns/',
		cache : 'false',
		dataType : 'json',
		data : {
			'columns' : res
		},
		success : function() {
			paramObj.dialog.dialog('close');
			updateSearchResult({
				page : paramObj.page,
				order : paramObj.order,
				url : '/report/result/'
			});
		}
    });
}

var DatesSelection = function() {};

var gCompareFlag = false;

var gDatesSelectionInited = false;

DatesSelection.prototype = {

	_html: "",

	_windowWidth: 590,

	_windowHeight: 280,

	_windowTitle: "Date Selection Options",

	_dialogContainer: "#ui-dialog-two",

	_formRangeFrom: null,

	_formRangeTo: null,

	_formTimesFrom: null,

	_formTimesTo: null,

	_formPeriod: null,

	_formCompareButton: null,

	_formTrend: null,

	_formSort: null,

	_timeFormat: "HH:MM",

	_formSaveCheckbox: null,

	_formSaveField: null,

	_formDeleteSaved: null,

	_formDayparts: null,

	_formSavedText: "Name your saved selection",

	_dowsMap: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],

	_periodHtml: '<option value="">Select Period</option>' +
				 '<option value="1 week">Last Week</option>' +
				 '<option value="1 month">Last Month</option>' +
				 '<option value="3 months">Last 3 Months</option>' +
				 '<option value="6 months">Last 6 Months</option>' +
				 '<option value="12 months">Last Year</option>' +
				 '<option value="24 months">Last 2 Years</option>',

	_renderSelectionElem: function(label, value, type) {
		return '<div class="item" data-type="' + type + '" onclick="new DatesSelection().removeSelectionElement(this)" data-value="' + value + '">' + label + '</div>';
	},

	removeSelectionElement: function(elem) {
		var type = jQuery(elem).attr('data-type');
		jQuery(elem).remove();
		if (jQuery('#popup-' + type + '-s .item').size() == 0) {
			this._hideSelection(type);
		}
	},
	
	_renderSelection: function(type) {
		if (type == 'range') {
			jQuery('#popup-range-s').show().append(
				this._renderSelectionElem(
					this._getRangeText(arguments[1]),
					this._getRangeValue(),
					type										
				)
			);
		} else if (type == 'compare') {
			jQuery('#popup-compare-s').show().append(
				this._renderSelectionElem(
					this._getRangeText(arguments[1]),
					this._getRangeValue(),
					type
				)
			);
		} else if (type == 'times') {
			jQuery('#popup-times-s').show().append(
				this._renderSelectionElem(
					this._getTimesText(),
					this._getTimesValue(),
					type
				)
			);
		} else if (type == 'period') {
			jQuery('#popup-period-s').show().html(
				this._renderSelectionElem(
					jQuery('option:selected', this._formPeriod).text(),
					this._formPeriod.val(),
					type
				)
			);
		} else if (type == 'dayparts') {
			jQuery('#popup-dayparts-s').show().append(
				this._renderSelectionElem(
					jQuery('option:selected', this._formDayparts).text(),
					this._formDayparts.val(),
					type
				)
			);
		} else if (type == 'trend') {
			jQuery('#popup-trend-s').show().html(
				this._renderSelectionElem(
					jQuery('option:selected', this._formTrend).text(),
					this._formTrend.val(),
					type
				)
			);
		} else if (type == 'sort') {
			jQuery('#popup-sort-s').show().html(
				this._renderSelectionElem(
					jQuery('option:selected', this._formSort).text(),
					this._formSort.val(),
					type
				)
			);
		}

		jQuery('#popup-' + type + '-title').show();
		jQuery('#popup-' + type + '-sep').show();					
	},

	_getRangeText: function(appendText) {
		if (!appendText) {
			appendText = '';
		}
		var timeFrom = (jQuery('#popup-times-from').val() == '' || jQuery('#popup-times-from').val() == this._timeFormat) ? '' : jQuery('#popup-times-from').val()
		var timeTo = (jQuery('#popup-times-to').val() == '' || jQuery('#popup-times-to').val() == this._timeFormat) ? '' : jQuery('#popup-times-to').val()
		var time = (timeFrom != '' && timeTo != '') ? ' (' + timeFrom + '&mdash;' + timeTo + ')' : '';

		var daypart = '';
		if (time == '') {
			daypart = jQuery('#popup-dayparts').val() == '' ? '' : " (" + jQuery('#popup-dayparts option:selected').text() + ")";
		}
		return appendText + this._formRangeFrom.val() + ' &mdash; ' + this._formRangeTo.val() + time + daypart;
	},

	_getRangeValue: function() {
		var timeFrom = (jQuery('#popup-times-from').val() == '' || jQuery('#popup-times-from').val() == this._timeFormat) ? '' : jQuery('#popup-times-from').val()
		var timeTo = (jQuery('#popup-times-to').val() == '' || jQuery('#popup-times-to').val() == this._timeFormat) ? '' : jQuery('#popup-times-to').val();
		var time = (timeFrom != '' && timeTo != '') ? '(' + timeFrom + '=' + timeTo + ')' : '';

		var daypart = '';
		if (time == '') {
			daypart = this._formDayparts.val() == '' ? '' : "(" + jQuery('option:selected', this._formDayparts).val() + ")";
		}
		return this._formRangeFrom.val() + '=' + this._formRangeTo.val() + time + daypart;
	},

	_getTimesText: function() {
		return 	this._formTimesFrom.val() + ' &mdash; ' + this._formTimesTo.val();
	},

	_getTimesValue: function() {
		return 	this._formTimesFrom.val() + '=' + this._formTimesTo.val();
	},

	_addDatepickers: function() {
		jQuery('.b-dates-selection .date').datepicker({
			'showAnim': '',
			'dateFormat': 'yy-mm-dd',
			'changeMonth': true,
			'changeYear': true,
			'showWeek': true,
			'firstDay': 1,
			'showButtonPanel': true,
			'minDate': glStartDateSearchLimit,
			'maxDate': glEndDateSearchLimit,
			'closeText': 'Close',
			'showOtherMonths': false,
			'selectOtherMonths': false,
			'calculateWeek': canadianBroadcastWeek
		}).datepicker('refresh').datepicker_ext({
			weekCallback: [this._weekCallback],
			dayCallback: [this._dayCallback],
			monthCallback: [this._monthCallback],
			self: this
		});
	},

	_monthCallback: function(startDate, endDate, self) {
		self._formRangeFrom.val(startDate);
		self._formRangeTo.val(endDate);
		self._addRange();
		self._formRangeFrom.val('');
		self._formRangeTo.val('');		
	},

	_weekCallback: function(week, startDate, endDate, self) {
		self._formRangeFrom.val(startDate);
		self._formRangeTo.val(endDate);
		self._addRange("(wk" + week + ") ");
		self._formRangeFrom.val('');
		self._formRangeTo.val('');
	},

	_dayCallback: function(dayIdx, self) {
		self._addDows(dayIdx);
	},

	_addTimeEvents: function() {
		var self = this;
		jQuery(this._formTimesTo).focus(function(){
			if (jQuery(this).val() == self._timeFormat) {
				jQuery(this).val('');
			}
		});

		jQuery(this._formTimesTo).blur(function(){
			if (jQuery(this).val() == '') {
				jQuery(this).val(self._timeFormat);
			}
		});

		jQuery(this._formTimesFrom).focus(function(){
			if (jQuery(this).val() == self._timeFormat) {
				jQuery(this).val('');
			}
		});

		jQuery(this._formTimesFrom).blur(function(){
			if (jQuery(this).val() == '') {
				jQuery(this).val(self._timeFormat);
			}
		});

	},

	_addSavedSearchEvents: function() {
		var self = this;
		jQuery('#popup-period').change(function() {
			var opt = jQuery('#popup-period option:selected');
			if (opt.attr('custom') == 'true') {
				self._loadSavedSearch(opt);
			}
		})

		this._formDeleteSaved.click(function() {
			if (jQuery('#popup-period option:selected').val() != '') {
				jQuery.ajax({
					type : 'POST',
					url  : '/report/delete-date-options/',
					cache : 'false',
					data: {
						'id': jQuery('#popup-period option:selected').val()
					},
					dataType : 'json',
					success : function(res) {
						if (res.status) {
							jQuery('#popup-period option:selected').remove();
							self._clearSelection();
						}
					}
				});
			}
		})
	},

	_clearSelection: function() {
		this._hideSelection('dayparts');
		this._hideSelection('period');
		this._hideSelection('trend');
		this._hideSelection('dow');
		this._hideSelection('times');
		this._hideSelection('range');
		this._hideSelection('compare');
		this._hideSelection('sort');
	},

	_loadSavedSearch: function(option) {		
		this._clearSelection();
		var self = this;
		if (option.attr('value') != '') {
			var type = '';
			if (option.attr('data-period') != '') {
				jQuery('#popup-period-s').html('');
				jQuery('#popup-period-s').html(
					this._renderSelectionElem(
						jQuery("#popup-period option[value='" + option.attr('data-period') + "']").text(),							
						option.attr('data-period'),
						"period"
					)
				);
				this._showSelection('period');				
			}

			if (option.attr('data-trend') != '') {
				jQuery('#popup-trend-s').html('');
				jQuery('#popup-trend-s').html(
					this._renderSelectionElem(
						jQuery("#popup-trend option[value='" + option.attr('data-trend') + "']").text(),
						option.attr('data-trend'),
						"trend"
					)
				);
				this._showSelection('trend');
			}

			if (option.attr('data-sort') != '' && option.attr('data-sort') != 'null') {
				jQuery('#popup-sort-s').html('');
				jQuery('#popup-sort-s').html(
					this._renderSelectionElem(
						jQuery("#popup-sort option[value='" + option.attr('data-sort') + "']").text(),
						option.attr('data-sort'),
						"sort"
					)
				);
				this._showSelection('sort');
			}

			if (option.attr('data-dayparts') != '') {
				jQuery('#popup-dayparts-s').html('');
				jQuery.each(option.attr('data-dayparts').split(','), function(index, item) {
					jQuery('#popup-dayparts-s').append(
						self._renderSelectionElem(
							jQuery("#popup-dayparts option[value='" + item + "']").text(),
							item,
							"dayparts"
						)
					);
				});
				this._showSelection('dayparts');
			}

			if (option.attr('data-dow') != '') {
				jQuery('#popup-dow-s').html('');
				jQuery.each(option.attr('data-dow').split(','), function(index, item) {
					jQuery('#popup-dow-s').append(
						self._renderSelectionElem(
							self._dowsMap[item],
							item,
							"dow"
						)
					);
				});
				this._showSelection('dow');
			}

			if (option.attr('data-times') != '') {
				jQuery('#popup-times-s').html('');
				jQuery.each(option.attr('data-times').split(','), function(index, item) {
					jQuery('#popup-times-s').append(
						self._renderSelectionElem(
							item.replace('=', ' &mdash; '),
							item,
							"times"
						)
					);
				});
				this._showSelection('times');
			}

			if (option.attr('data-range') != '') {
				jQuery('#popup-range-s').html('');
				var vals = option.attr('data-range').split(',');
				var labs = option.attr('data-range-labs').split(',');
				jQuery.each(vals, function(index, item) {
					jQuery('#popup-range-s').append(
						self._renderSelectionElem(
							labs[index],
							item,
							"range"
						)
					);
				});
				this._showSelection('range');
			}

			if (option.attr('data-compare') != '') {
				jQuery('#popup-compare-s').html('');
				var vals = option.attr('data-compare').split(',');
				var labs = option.attr('data-compare-labs').split(',');
				jQuery.each(option.attr('data-compare').split(','), function(index, item) {
					jQuery('#popup-compare-s').append(
						self._renderSelectionElem(
							labs[index],
							item,
							"compare"
						)
					);
				});
				this._showSelection('compare');
			}
		}
	},

	_showSelection: function(type) {
		jQuery('#popup-' + type + '-s').show();
		jQuery('#popup-' + type + '-title').show();
		jQuery('#popup-' + type + '-sep').show();
	},

	_hideSelection: function(type) {
		jQuery('#popup-' + type + '-s').html('');
		jQuery('#popup-' + type + '-s').hide();
		jQuery('#popup-' + type + '-title').hide();
		jQuery('#popup-' + type + '-sep').hide();
	},

	_add: function() {
		this._addRange();
		this._addPeriod();
		this._addTrend();
		this._addSort();
	},

	_addDayparts: function() {
		if (this._formDayparts.val() != '' && this._validateDayparts()) {
			this._renderSelection('dayparts');
			this._formDayparts.val('');
		}
	},

	_validateDayparts: function() {
		var res = true;
		var self = this;
		jQuery.each(jQuery('#popup-dayparts-s .item'), function(index, item) {
  			if (jQuery(item).attr('data-value') == self._formDayparts.val()) {
				res = false;
		  	}
		});

		return res;
	},

	_compare: function() {
		gCompareFlag = !gCompareFlag;
		if (gCompareFlag) {
			this._formCompareButton.text('Compare On')
		} else {
			this._formCompareButton.text('Compare Off');			
		}

	},

	_addTrend: function() {
		if (this._formTrend.val() != '') {
			this._renderSelection('trend');
			this._formTrend.val('');
		}
	},

	_addSort: function() {
		if (this._formSort.val() != '') {
			this._renderSelection('sort');
			this._formSort.val('');
		}
	},

	_clear: function() {
		this._formPeriod.val('');
		this._formTrend.val('');
		this._formRangeFrom.val('');
		this._formRangeTo.val('');
		this._formTimesFrom.val(this._timeFormat);
		this._formTimesTo.val(this._timeFormat);

		jQuery.each(jQuery('.popup-trend'), function(index, item) {
			jQuery(item).attr('checked', null);
		});
	},

	_addDows: function(dowIdx) {
		if (jQuery("#popup-dow-s .item[data-value='" + dowIdx + "']").size() == 0) {
			jQuery('#popup-dow-s').append(
				this._renderSelectionElem(
					this._dowsMap[dowIdx],
					dowIdx,
					"dow"
				)
			);
			this._showSelection('dow');
		}
	},

	_submitElements: function() {
		clearSummaryItems('period');
		var period = jQuery('#popup-period-s .item');
		if (period.size() > 0) {
			jQuery('#period-row').show();
			showSummaryArea();
			jQuery('#period-summary').html(
				_generateSummaryItem('period', period.attr('data-value'), period.html())
			);
		}

		clearSummaryItems('dow');
		jQuery.each(jQuery('#popup-dow-s .item'), function(index, item) {
			var item = jQuery(item);
			jQuery('#dow-row').show();
			showSummaryArea();
			jQuery('#dow-summary').append(
				_generateSummaryItem('dow', item.attr('data-value'), item.html())
			);
		});

		clearSummaryItems('range');
		jQuery.each(jQuery('#popup-range-s .item'), function(index, item) {
			var item = jQuery(item);
			jQuery('#range-row').show();
			showSummaryArea();
			jQuery('#range-summary').append(
				_generateSummaryItem('range', item.attr('data-value'), item.html())
			);
		});

		clearSummaryItems('dayparts');
		jQuery.each(jQuery('#popup-dayparts-s .item'), function(index, item) {
			var item = jQuery(item);
			jQuery('#dayparts-row').show();
			showSummaryArea();
			jQuery('#dayparts-summary').append(
				_generateSummaryItem('dayparts', item.attr('data-value'), item.html())
			);
		});

		clearSummaryItems('compare');
		jQuery.each(jQuery('#popup-compare-s .item'), function(index, item) {
			var item = jQuery(item);
			jQuery('#compare-row').show();
			showSummaryArea();
			jQuery('#compare-summary').append(
				_generateSummaryItem('compare', item.attr('data-value'), item.html())
			);
		});

		clearSummaryItems('times');
		jQuery.each(jQuery('#popup-times-s .item'), function(index, item) {
			var item = jQuery(item);
			jQuery('#times-row').show();
			showSummaryArea();
			jQuery('#times-summary').append(
				_generateSummaryItem('times', item.attr('data-value'), item.html())
			);
		});

		clearSummaryItems('trend');
		var trend = jQuery('#popup-trend-s .item');
		if (trend.size() > 0) {
			jQuery('#trend-row').show();
			showSummaryArea();
			jQuery('#trend-summary').html(
				_generateSummaryItem('trend', trend.attr('data-value'), trend.html())
			);
		}

		clearSummaryItems('sort');
		var sort = jQuery('#popup-sort-s .item');
		if (sort.size() > 0) {
			jQuery('#sort-row').show();
			showSummaryArea();
			jQuery('#sort-summary').html(
				_generateSummaryItem('sort', sort.attr('data-value'), sort.html())
			);
		}

		this._closeDialog();
	},

	_getValues: function(type, labels) {
		var res = [];
		jQuery.each(jQuery('#popup-' + type + '-s .item'), function(index, item) {
			if (labels == true) {
				res[index] = jQuery(item).text();
			} else {
				res[index] = jQuery(item).attr('data-value');
			}
		});
		return res.join(',');
	},

	_submit: function() {
		if (this._formSaveCheckbox.is(':checked')) {
			this._formSaveField.attr('style', '');
			if (this._formSaveField.val() == this._formSavedText || this._formSaveField.val() == '') {
				this._formSaveField.attr('style', 'border: 1px solid red');
			} else {
				var self = this;
				jQuery.ajax({
					type : 'POST',
					url  : '/report/save-date-options/',
					cache : 'false',
					data: {
						'options[name]': this._formSaveField.val(),
						'options[date_ranges]': this._getValues('range'),
						'options[date_ranges_label]': this._getValues('range', true),
						'options[time_ranges]': this._getValues('times'),
						'options[period]': this._getValues('period'),
						'options[days_of_week]': this._getValues('dow'),
						'options[trend_by]': this._getValues('trend'),
						'options[date_ranges_to_compare]': this._getValues('compare'),
						'options[date_ranges_to_compare_label]': this._getValues('compare', true),
						'options[dayparts]': this._getValues('dayparts'),
						'options[sort_by]': this._getValues('sort')
					},
					dataType : 'json',
					success : function() {
						self._submitElements();
					}
				});
			}
		} else {
			this._submitElements();
		}
	},

	_closeDialog: function() {
		jQuery(this._dialogContainer).dialog('close');
	},

	_addPeriod: function() {
		if (this._formPeriod.val() != '' && jQuery('option:selected', this._formPeriod).attr('custom') == null) {
			this._renderSelection('period');
			this._formPeriod.val('');
		}
	},

	_addRange: function(appendText) {
		if (this._formRangeFrom.val() == '' || this._formRangeTo.val() == '') {
			this._addTimes();
			this._addDayparts();
		} else {
			var type = gCompareFlag ? "compare" : "range";
			if (this._formRangeFrom.val() != '' || this._formRangeTo.val() != '') {
				if (this._validateRange() && this._validateTimes()) {
					this._renderSelection(type, appendText);
					this._formRangeFrom.removeClass('error').val('');
					this._formRangeTo.removeClass('error').val('');
					jQuery('#popup-times-from').removeClass('error').val(this._timeFormat);
					jQuery('#popup-times-to').removeClass('error').val(this._timeFormat);
					jQuery('#popup-dayparts').val('');
				}
			}
		}
	},

	_addTimes: function() {
		if ((this._formTimesFrom.val() != '' && this._formTimesFrom.val() != this._timeFormat)
				|| (this._formTimesTo.val() != '' && this._formTimesTo.val() != this._timeFormat)) {
			if (this._validateTimes()) {
				this._renderSelection('times');
				this._formTimesFrom.removeClass('error').val(this._timeFormat);
				this._formTimesTo.removeClass('error').val(this._timeFormat);
			}
		}
	},

	_validateTimes: function() {
		if (this._formTimesTo.val() == '' && this._formTimesFrom.val() == '') {
			this._formTimesFrom.removeClass('error');
			this._formTimesTo.removeClass('error');
			return true;	
		}

		if (this._formTimesTo.val() == this._timeFormat && this._formTimesFrom.val() == this._timeFormat) {
			this._formTimesFrom.removeClass('error');
			this._formTimesTo.removeClass('error');
			return true;
		}

		this._formTimesFrom.removeClass('error');
		this._formTimesTo.removeClass('error');

		if (this._formTimesTo.val() == '' || this._formTimesTo.val() == this._timeFormat) {
			this._formTimesTo.addClass('error');
			return false;
		}

		if (this._formTimesFrom.val() == '' || this._formTimesFrom.val() == this._timeFormat) {
			this._formTimesFrom.addClass('error');
			return false;
		}

		if (this._formTimesFrom.val().length != 5) {
			this._formTimesFrom.addClass('error');
			return false;
		}

		if (this._formTimesTo.val().length != 5) {
			this._formTimesTo.addClass('error');
			return false;
		}

		var res = true;
		var self = this;
		jQuery.each(jQuery('#popup-times-s .item'), function(index, item) {
  			if (jQuery(item).attr('data-value') == self._getTimesValue()) {
				res = false;
		  	}
		});

		return res;
	},

	_validateRange: function() {
		this._formRangeFrom.removeClass('error');
		this._formRangeTo.removeClass('error');

		if (this._formRangeTo.val() == '') {
			this._formRangeTo.addClass('error');
			return false;
		}

		if (this._formRangeFrom.val() == '') {
			this._formRangeFrom.addClass('error');
			return false;
		}

		var res = true;		
		var self = this;		
		jQuery.each(jQuery('#popup-range-s .item, #popup-compare-s .item'), function(index, item) {
  			if (jQuery(item).attr('data-value') == self._getRangeValue()) {
				res = false;
		  	}
		});

		return res;
	},

	_init: function() {
		var leftPart =
			'<div class="cont">' +
			'	<div class="fl bl label" style="margin-left:24px">DATE</div>' +
			'	<div>' +
			'		<div class="fl date-cont"><input class="date" id="popup-range-from" type="text" readonly="readonly" /></div>' +
			'		<div class="fl label">TO</div> ' +
			'		<div class="fl date-cont"><input class="date" id="popup-range-to" type="text" readonly="readonly" /></div>' +
			'	</div>' +
			'	<div class="sep clear"></div>' +
			'	<div class="fl bl"></div>' +
			'	<div class="fl">' +
			'		<select class="period" id="popup-period">' + this._periodHtml +
			'			[options]' +
			'		</select>' +
			'	</div>' +
			'	<div class="fl delete" id="popup-delete-saved">[-]</div>' +
			'	<div class="sep clear"></div>' +
			'	<div class="sep clear" style="margin-bottom:4px"><div class="top-white"></div></div>' +
			'	<div class="fl bl label" style="margin-left: 26px;">TIME&nbsp;</div>' +
			'	<div>' +
			'		<div class="fl date-cont"><input class="time" id="popup-times-from" value="' + this._timeFormat + '" type="text" /></div>' +
			'		<div class="fl label">TO</div> ' +
			'		<div class="fl date-cont"><input class="time" id="popup-times-to" value="' + this._timeFormat + '" type="text" /></div>' +
			'	</div>' +
			'	<div class="sep clear"></div>' +
			'	<div class="fl bl label">DAYPART</div>' +
			'	<div>' +
			'		<select style="margin-left:1px;" class="period" id="popup-dayparts">' +
			'			<option value="">Select Daypart</option>' +
			'			<option value="06:00=10:00">Morning (06:00-10:00)</option>' +
			'			<option value="10:00=15:00">Midday (10:00-15:00)</option>' +
			'			<option value="15:00=19:00">Afternoon (15:00-19:00)</option>' +
			'			<option value="19:00=23:59">Evening (19:00-00:00)</option>' +
			'			<option value="00:00=06:00">Overnight (00:00-06:00)</option>' +
			'		</select>' +
			'	</div>' +					
			'	<div class="clear"></div>' +
			'	<div class="sep clear" style="margin-bottom:4px"><div class="top-white"></div></div>' +
			'	<div class="fl bl label">TREND BY</div>' +
			'	<div>' +
			'		<select style="margin-left:0px;" class="period" id="popup-trend">' +
			'			<option value="">Select Trend</option>' +
			'			<option value="+1 hour">Hourly</option>' +
			'			<option value="+1 day">Daily</option>' +					
			'			<option value="+1 week">Weekly</option>' +
			'			<option value="+1 month">Monthly</option>' +
			'			<option value="+3 months">Quarterly</option>' +
			'		</select>' +
			'	</div>' +
			'	<div class="sep clear" style="margin-bottom:4px"><div class="top-white"></div></div>' +
			'	<div class="fl bl label" style="padding-right: 10px;">SORT BY</div>' +
			'	<div>' +
			'		<select style="margin-left:0px;" class="period" id="popup-sort">' +
			'			<option value="vertically">Vertical</option>' +
			'			<option value="horizontally">Horizontal</option>' +
			'		</select>' +
			'	</div>' +					
			'	<div class="sep clear"><div class="top-white"></div></div>' +
			'	<div class="fl bl label save-name"><label><input type="checkbox" id="popup-save" />&nbsp;Save&nbsp;</label></div>' +
			'	<div class="fl" style="padding:3px 0px"><input type="text" value="' + this._formSavedText + '" id="popup-save-name" /></div>'+
			'</div>';
		
		var rightPart =
			'<div>' +
			'	<div style="display:none;" class="title" id="popup-range-title">Date Ranges</div>' +
			'	<div style="display:none;" id="popup-range-s"></div>' +
			'	<div style="display:none;" class="sep" id="popup-range-sep"></div>' +

			'	<div style="display:none;" class="title" id="popup-compare-title">Compared To</div>' +					
			'	<div style="display:none;" id="popup-compare-s"></div>' +
			'	<div style="display:none;" class="sep" id="popup-compare-sep"></div>' +

			'	<div style="display:none;" class="title" id="popup-times-title">Time Ranges</div>' +
			'	<div style="display:none;" id="popup-times-s"></div>' +
			'	<div style="display:none;" class="sep" id="popup-times-sep"></div>' +

			'	<div style="display:none;" class="title" id="popup-dayparts-title">Dayparts</div>' +
			'	<div style="display:none;" id="popup-dayparts-s"></div>' +
			'	<div style="display:none;" class="sep" id="popup-dayparts-sep"></div>' +

			'	<div style="display:none;" class="title" id="popup-period-title">Period</div>' +
			'	<div style="display:none;" id="popup-period-s"></div>' +
			'	<div style="display:none;" class="sep" id="popup-period-sep"></div>' +

			'	<div style="display:none;" class="title" id="popup-dow-title">Days of Week</div>' +
			'	<div style="display:none;" id="popup-dow-s"></div>' +
			'	<div style="display:none;" class="sep" id="popup-dow-sep"></div>' +

			'	<div style="display:none;" class="title" id="popup-trend-title">Trend by</div>' +
			'	<div style="display:none;" id="popup-trend-s"></div>' +
			'	<div style="display:none;" class="sep" id="popup-trend-sep"></div>' +

			'	<div style="display:none;" class="title" id="popup-sort-title">Sort by</div>' +
			'	<div style="display:none;" id="popup-sort-s"></div>' +
			'</div>';


		this._html +=
			'<div class="b-dates-selection">' +
			'	 <div class="clear"></div>' +
			'    <div class="left">' + leftPart + '</div>' +
			'    <div class="right">' + rightPart + '</div>' +
			'	 <div class="clear"></div>' +
		 	'</div>';
	},

	show: function() {
		var self = this;
		if (!gDatesSelectionInited) {
			this._init();

			jQuery(this._dialogContainer).dialog('destroy');
			jQuery(this._dialogContainer).html('<img style="margin-left:230px; margin-top: 40px;" src="/template/login-loader.gif" />');

			jQuery(this._dialogContainer).dialog({
				'modal' : true,
				'autoOpen' : true
			});
		
			jQuery(this._dialogContainer).dialog('option', 'width', this._windowWidth);
			jQuery(this._dialogContainer).dialog('option', 'height', this._windowHeight);
			jQuery(this._dialogContainer).dialog('option', 'title', this._windowTitle);

			jQuery(this._dialogContainer).dialog(
				'option',
				'buttons', {
					'Cancel' : function() {
						self._closeDialog();
					},
					'Submit' : function() {
						self._submit();
					},
					'Clear' : function() {
						self._clear();
					},
					'Compare Off' : function() {
						self._compare();
					},
					'Add' : function() {
						self._add();
					}
				}
			)

			jQuery.each(jQuery('.ui-dialog-buttonpane button'), function(index, elem) {
				if (jQuery(elem).text() == 'Clear') {
					jQuery(elem).css('margin-right', 195);
				} else if (jQuery(elem).text() == 'Compare Off') {
					self._formCompareButton = jQuery(elem);
				}
			})

		}

		jQuery(this._dialogContainer).dialog('open');
		jQuery(this._dialogContainer).css('height', 247);

		jQuery('#popup-period').attr('disabled', 'disabled');
		jQuery.ajax({
			type : 'POST',
			url  : '/report/get-date-options/',
			cache : 'false',
			dataType : 'json',
			success : function(res) {

				var options = '';
				jQuery.each(res, function(index, item) {
					options += '<option custom="true" data-sort="' + item.sort_by + '" data-dayparts="' + item.dayparts + '" data-compare-labs="' + item.date_ranges_to_compare_label + '" data-compare="' + item.date_ranges_to_compare + '" data-trend="' + item.trend_by + '" data-dow="' + item.days_of_week + '" data-range-labs="' + item.date_ranges_label + '" data-range="' + item.date_ranges + '" data-times="' + item.time_ranges + '" data-period="' + item.period + '" value="' + item.id + '">' + item.name + '</options>';
				});

				if (!gDatesSelectionInited) {
					jQuery(self._dialogContainer).html(self._html.replace('[options]', options));
					gCompareFlag = false;
					gDatesSelectionInited = true;
				} else {
					jQuery('#popup-period').html(self._periodHtml + options);
					jQuery('#popup-save-name').val(self._formSavedText);
					jQuery('#popup-save').attr('checked', null);
				}

				jQuery('#popup-period').attr('disabled', null);
				self._addDatepickers();
				self._initFormFields();
				self._addTimeEvents();
				self._addSavedSearchEvents();
			}
		});
	},

	_initFormFields: function() {
		this._formRangeFrom = jQuery('#popup-range-from');
		this._formRangeTo = jQuery('#popup-range-to');
		this._formPeriod = jQuery('#popup-period');
		this._formTrend = jQuery('#popup-trend');
		this._formSort = jQuery('#popup-sort');
		this._formTimesTo = jQuery('#popup-times-to');
		this._formTimesFrom = jQuery('#popup-times-from');
		this._formSaveCheckbox = jQuery('#popup-save');
		this._formSaveField = jQuery('#popup-save-name');
		this._formDeleteSaved = jQuery('#popup-delete-saved');
		this._formDayparts = jQuery('#popup-dayparts');

		var self = this;
		this._formSaveField.focus(function() {
			if (jQuery(this).val() == self._formSavedText) {
				jQuery(this).val('');
			}
		});

		this._formSaveField.blur(function() {
			if (jQuery(this).val() == '') {
				jQuery(this).val(self._formSavedText);
			}
		})
	}
};

function showSelectionElem(id, value, label, options) {
	if (value && value != '') {
		jQuery('#' + id + '-row').show();
		showSummaryArea();
		jQuery('#' + id + '-summary').append(
			_generateSummaryItem(id, value, label, options)
		);
	}
}

function updateSettings(userId) {
	showSystemIsBusy();

    var flags = []
    jQuery('.flag:checked').each(function() {
        flags.push('"' + jQuery(this).attr('name') + '":' + 1);
    })
    eval("var fls = {" + flags.join(",") + "}");
                        // Move expiration date to client or handle this
    jQuery.ajax({
        type : 'POST',
        url  : '/admin-user/save-settings',
        cache : 'false',
        data : {
            'user': userId,
            'class_summary_id_st' : _getItemValues('classes', true),
            'category_summary_id_st' : _getItemValues('categories', true),
            'subcategory_summary_id_st' : _getItemValues('subcategories', true),
            'company_summary_id_st' : _getItemValues('companies', true),
            'division_summary_id_st' : _getItemValues('divisions', true),
            'product_summary_id_st' : _getItemValues('products', true),
			'medium_summary_id_st' : _getItemValues('mediums', true),
			'type_summary_id_st' : _getItemValues('medium-types', true),
			'medium_class_summary_id_st' : _getItemValues('medium-classes', true),
			'media_summary_id_st' : _getItemValues('medias', true),
            'flags': fls,
            'date_from': jQuery('#date-from').val(),
            'date_to': jQuery('#date-to').val(),
            'expiration_date': jQuery('#expiration').val()
        },
        dataType : 'json',
        success : function(res) {
            if (res.status == false) {
                showSystemIsFree();
                showMessageDialog(res.message);
            } else {
                redirect('/administrator/');
            }
        }
    });
}

function showAdvancedFilter() {
    var html =
            '<table class="b_advanced_filter">' +
                '<tr>' +
                    '<td valign="top">' +
                        '<div><b>Condition</b></div>' +
                        '<div><label><input text="Contents" type="radio" name="keyword-type" value="contents" /> Contents</label></div>' +
                        '<div><label><input text="Begins with" type="radio" name="keyword-type" value="start" /> Begins with</label></div>' +
                        '<div><label><input text="Ends with" type="radio" name="keyword-type" value="end" /> Ends with</label></div>' +
                        '<div><label><input text="Is equal to" type="radio" name="keyword-type" value="equal" /> Is equal to</label></div>' +
                    '</td>' +
                    '<td valign="top">' +
                        '<div><b>Filter text</b></div>' +
                        '<div><input type="text" style="width: 200px; border: 1px solid #ABADB3" id="advanced-keyword" value="" /></div>' +
                        '<div><label><input type="checkbox" id="excluded" value="equal" /> Exclude above text</label></div>' +
                        '<div><label><input type="checkbox" id="include-classification" value="equal" /> Include classification</label></div>' +
                    '</td>' +
                '</tr>' +
            '</table>';

    showCustomDialog(function(paramObj) {
        var keywordType = jQuery(":radio[name='keyword-type']:checked").val();
        var keywordText = jQuery(":radio[name='keyword-type']:checked").attr('text');

        var title;
        if (keywordType && keywordType.length > 0) {
            title = 'keyword-type';
            jQuery('#' + title + '-row').show();
            showSummaryArea();
            jQuery('#' + title + '-summary').html(
                _generateSummaryItem(title, keywordType, keywordText)
            );
        } else {
            clearSummaryItems('keyword-type');
        }

        if (jQuery('#advanced-keyword').val().length > 0) {
            var keyword = jQuery('#advanced-keyword').val();
            title = 'keyword';
            jQuery('#' + title + '-row').show();
            showSummaryArea();
            jQuery('#' + title + '-summary').html(
                _generateSummaryItem(title, keyword, keyword)
            );            
        } else {
            clearSummaryItems('keyword');
        }

        if (jQuery('#excluded').is(':checked')) {
            title = 'exclude-keyword';
            jQuery('#' + title + '-row').show();
            showSummaryArea();
            jQuery('#' + title + '-summary').html(
                _generateSummaryItem(title, 1, 'Yes')
            );
        } else {
            clearSummaryItems('exclude-keyword');
        }

        if (jQuery('#include-classification').is(':checked')) {
            title = 'include-classification';
            jQuery('#' + title + '-row').show();
            showSummaryArea();
            jQuery('#' + title + '-summary').html(
                _generateSummaryItem(title, 1, 'Yes')
            );
        } else {
            clearSummaryItems('include-classification');
        }

        paramObj.dialog.dialog('close');
    }, html, {'width': 350, 'height': 170, 'title': 'Advanced Filter'});

    
}
