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;

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();
			}
			glCurrentRequest = 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) == true) {
			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 - _offsetLeftFix()) + 'px;" onmouseout="setCloseAll()" onmouseover="unsetCloseAll()" id="' + prefix + '_menu">' + html + '</div>';
}

function hideMenu(prefix, isHideFirst) {
	var prefixes = glCloseMenuMap[prefix];
	var start = 0;
	if (isHideFirst == true) {
		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 == false) {
			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', 'range', 'languages', 'dow', 'times', 'trend', 'compare', 'dayparts', 'ad'];
	var isHide = true;
	for (var i = 0; i <= elems.length; i++) {
		if (jQuery('#' + elems[i] + '-summary div').length > 0) {
			isHide = false;
		}
	}
	if (isHide == true) {
		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 {
			// TODO change others on pluses
			jQuery('#' + title + '-summary').html(
				_generateSummaryItem(title, selectedElem.attr('did'), selectedElem.html())
			);
		}
	} 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(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) {
	return '<div class="summary-item" onclick="_deleteItem(this, \'' + title + '\')" lang="' + lang + '">' + html + '&nbsp;</div>'
}

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'
	}

	hideMenu('classes');
	if (params.checkDate && params.checkDate == true) {
		if (_getItemValues('range') == '' && _getItemValues('compare') == '' && _getItemValues('period') == '' && _getItemValues('date-to') == '' && _getItemValues('date-from') == '') {
			showMessageDialog('Please select Date Period or Date Range.');
			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: {
			'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'),
			'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 runCompanyReport() {
    var html = '';

    if (_getItemValues('trend') != '') {
        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>';
    } else {
        html =
            '<div><label><input type="checkbox" name="report-options" value="ByStation" /> By Station</label></div>' +
            '<div><label><input type="checkbox" name="report-options" value="ByDayparts" /> By Dayparts</label></div>';         
    }

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

        var choice = ''
        if (_getItemValues('trend') != '') {
            choice = jQuery(":radio[name=report-options]").filter(":checked").size() > 0 ? jQuery(":radio[name=report-options]").filter(":checked").val() : '';
        } else {
            jQuery.each(jQuery(":checkbox[name=report-options]").filter(":checked"), function(index, elem) {
                choice += jQuery(elem).val();
            })

            if (choice == 'ByDayparts') {
                choice = 'ByDaypartsOnly';                
            }
        }

		var reportType = 'Company' + choice;
		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 runProductReport() {
	var html =
		'<div><label><input type="checkbox" name="report-options" value="by-station" /> By Station</label></div>';
	showCustomDialog(function(paramObj) {
		jQuery('#dl').show();
		jQuery('#excel-export').hide();

		var reportType = jQuery(":checkbox[name=report-options]").filter(":checked").size() > 0 ? 'ProductByStation' : 'Product';
		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 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');
	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 exportToExcel() {
	showSystemIsBusy();
	jQuery.ajax({
		type : 'POST',
		url  : '/report/excel/',
		cache : 'false',
		dataType : 'json',
		success : function(res) {
			document.location.href = res.url;
			showSystemIsFree();
		}
	});
}

function downloadReport(url) {
	showSelectDialog(
		function(params) {
			document.location.href = url + jQuery(":radio[name=download-options]").filter(":checked").val();
			params.dialog.dialog('close');
		},
		'<div>' +
		'<input type="radio" checked="checked" value="-medium" name="download-options" id="by-medium">' +
		'<label class="options-label" for="by-medium">Separated by Medium</label>' +
		'</div>'
		,
		{width : 380, height : 'auto', title : 'Download Options'}
	);
}

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', '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 <= 13; 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) {
		var self = this;
		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 == true) {
							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</option>' +
			'			<option value="10:00=15:00">Midday</option>' +
			'			<option value="15:00=19:00">Afternoon</option>' +
			'			<option value="19:00=00:00">Evening</option>' +
			'			<option value="00:00=06:00">Overnight</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="">Select Sorting</option>' +
			'			<option value="total">Total</option>' +
			'			<option value="name">Name</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) {
	if (value && value != '') {
		jQuery('#' + id + '-row').show();
		showSummaryArea();
		jQuery('#' + id + '-summary').append(
			_generateSummaryItem(id, value, label)
		);
	}
}