String.prototype.strip = function() {
    return this.replace(/^\s+|\s+$/g, "");
};

function showSystemIsBusy() {
	jQuery('#loading-layout').css('height', jQuery(document).height()).show();
	jQuery('#loading-image')
		.css('position', 'absolute')
		.css('z-index', 10000)			
		.css('top', jQuery(document).scrollTop() + (jQuery(window).height() / 2) - 50)
		.css('left', jQuery(window).width() / 2 - 50)
		.show();
}

/**
 * User AdEase.alert(msg) instead
 * @deprecated
 * @param msg
 */
function showAlert(msg) {
    // TODO to css
    var html = '<div id="system-alert" style="z-index:10000; display: none; font-size: 12px; position: fixed; margin: 0 auto; padding: 10px; border: 2px solid #63B22C; background-color: #ffffff">' + msg + '</div>';
    jQuery('#ui-system-alert').html(html);

    var al = jQuery('#system-alert');
    var top = 100;
    var left = (jQuery(window).width() / 2) - al.width() / 2;
    al.css('top', top + "px").css('left', left + 'px');    
    
    al.show(0, function() {
        setTimeout(function() {
            jQuery('#system-alert').fadeOut(1000);
        }, 1000);        
    });
}

function showSystemIsFree() {
	jQuery('#loading-layout, #loading-image').hide();
}

/**
 * Use AdEase.redirect
 * @deprecated
 * @param url
 */
function redirect(url) {
	document.location.href = url;
}

function checkState() {
	if (jQuery('#country').val() == 'US') {
		jQuery('#state').hide().attr('name', 'undefined');
		jQuery('#state_ca').hide().attr('name', 'undefined');
		jQuery('#state_us').show().attr('name', 'data[state]');
	} else if (jQuery('#country').val() == 'CA') {
		jQuery('#state').hide().attr('name', 'undefined');
		jQuery('#state_us').hide().attr('name', 'undefined');
		jQuery('#state_ca').show().attr('name', 'data[state]');
	} else {
		jQuery('#state_ca').hide().attr('name', 'undefined');
		jQuery('#state_us').hide().attr('name', 'undefined');
		jQuery('#state').show().attr('name', 'data[state]');
	}
}

function setSelectedByValue(id, value) {
	var someOptions = $(id).options;
	for (var count = 0; count < someOptions.length; count++) {
		if (someOptions[count].value == value) {
			$(id).options[count].selected = true;
		}
	}
}

function inArray(what, where) {
	var a = false;
	for (var i = 0; i < where.length; i++) {
		if (what == where[i]) {
			a = true;
			break;
		}
	}
	return a;
}

function showWarning() {
	showMessageDialog('You are not currently subscibed to this service.<br/>Please contact your account manager ' + glManager + ' at <a href="mailto:' + glManagerEmail + '">' + glManagerEmail + '</a> or phone ' + glManagerPhone + ' for assistance.');
}
// TODO main page functions to separate js
function forgotPassword() {
	var html =
        '<div id="b-forgot-password" class="b-forgot-password">' +
            '<div id="errors" class="errors"></div>' +
            '<br/>' +
            'Please enter your email <input id="recovery-email" maxlenght="255" type="text">' +
        '</div>';

	showCustomDialog(function(paramObj) {
		jQuery.ajax({
			type: "POST",
			url: "/becomeclient/newpassword/",
			data: {
				email: jQuery('#b-forgot-password #recovery-email').val()
			},
			dataType : 'json',
			success: function(res) {
				if (res.status) {
					paramObj.dialog.dialog('close');
					showMessageDialog(res.message);
				} else {
					jQuery('#b-forgot-password #errors').html(res.message)
				}
			}
		});
	}, html, {width: 400, height: 150, title: 'Login/Password Recovery'});
}

function viewMedia(src, type, imgW, imgH) {
    if (type == 'o') {
        AdEase.modalBox({
            'html': '<div style="text-align: center;"><embed width="600px" autostart="true" src="/adfiles/' + src + '"/></div>',
            'title': 'Player',
            'width': 650,
            'height': 450
        });
    } else if (type == 'v') {
        AdEase.modalBox({
            'html': Templates.Player.video.templatize({
                'width': 414,
                'height': 280,
                'file': Globals.serverUrl + '/adfiles/' + src.replace('.wmv', ''),
                'poster': Globals.serverUrl + '/video/index?src=' + encodeURI(src) + '&width=414&height=280',
                'flashPoster': Globals.serverUrl + '/template/adease/video-placeholder.jpg'
            }),
            'title': 'Player',
            'width': 414,
            'height': 300,
            'afterShow': function() {
                VideoJS.setup("video-player");
            }
        });
    } else {
        var width = 600;
        var height = 400;
        AdEase.modalBox({
            'html': '<div style="text-align: center"><img src="' + Globals.serverUrl + '/image/index?src=' + src + '&width=' + width + '&height=' + height + '" /></div>',
            'title': '<span id="fullscreen" style="text-decoration: underline; cursor: pointer">Fullscreen</span>',
            'width': 650,
            'height': 450,
            'afterShow': function(box) {
                jQuery('.title #fullscreen', box).click(function() {
                    box.remove();
                    showImageInPopupSrc(src, parseInt(imgW) + 13, parseInt(imgH) + 38);
                })
            }
        });
    }
}

function addAdToCart(id, $this) {
	jQuery.ajax({
		type : 'POST',
		url  : '/shopping/add/',
		cache : 'false',
		data : {
			'id' : id
		},
		dataType : 'json',
		success : function(res) {
			if (res.status) {
				jQuery($this).remove();
				checkCart();
			} else {
				showMessageDialog(res.text);
			}
		}
	});
}

function addAllAdsToCart() {
	var res = '';
	jQuery('.to-cart').each(function() {
		res += (res == '') ? jQuery(this).attr('did') : ',' + jQuery(this).attr('did');
	});

	jQuery.ajax({
		type : 'POST',
		url  : '/shopping/add-all/',
		data : {
			'ids' : res
		},
		cache : 'false',
		dataType : 'json',
		success : function(res) {
			if (res && res.status) {
				jQuery('.to-cart').remove();
				checkCart();
			} else {
				showMessageDialog('An error occurred');
			}
		}
	});
}

function checkCart() {
	if (jQuery('.to-cart').length <= 0) {
		jQuery('#all-ads').hide();
	} else if (jQuery('#all-ads').is(':hidden')) {
		jQuery('#all-ads').show();
	}
}

function login() {
	jQuery('#login-button').hide();
	jQuery('#login-loader').show();

	jQuery.ajax({
		type: "POST",
		url: "/auth/",
		data: {
			password: jQuery('#password').val(),
			login: jQuery('#username').val(),
			service: jQuery('#service').val(),
			ref: jQuery('#ref').val(),
			remember: jQuery('#remember').is(':checked') ? 1 : 0
		},
		dataType : 'json',
		success: function(res) {
			if (res.status) {
				document.location.href = res.data.url;
			} else {
				jQuery('#login-loader').hide();
				jQuery('#login-button').show();
				showMessageDialog(res.message);
			}
		}
	});
}

function register(internal) {
	showLoadingDialog();

	jQuery.ajax({
		type: "POST",
		url: "/becomeclient/",
		dataType : 'html',
		success: function(html) {
			hideDialog();
			showCustomDialog(function(paramObj) {
                var form = jQuery('#add-client-form').serialize();
                form += '&data%5Binternal%5D=' + internal;

				jQuery.ajax({
					type: "POST",
					url: "/becomeclient/try",
					data: form,
					dataType : 'json',
					success: function(res) {
						if (res.status == true) {
                            if (internal) {
                                redirect("/administrator/");     
                            } else {
							    showMessageDialog('Your information will be approved shortly and you will receive all nessesary information via email.');
                            }
						} else {
							jQuery('#add-client-form *').removeClass('error');
							jQuery('#add-client-form .custom_error').html('');

							jQuery.each(res.data, function(key, value) {
								jQuery('#' + key).addClass('error');
								if (value != 'Required') {
									jQuery('#' + key + '_error').html(value);
								}
							});
						}
					}
				});
			}, html, {'width': 370, 'height': 380, 'title': 'New Client Registration'});
		}
	});
}

function checkSessionExpiration() {
	var interval = setInterval(function() {
		jQuery.ajax({
			type: "post",
			url: "/session/check",
			dataType : 'json',
			success: function(res) {
				if (!res.status) {
					var buttons = {
						'Ok' : function() {
							globalParams.dialog = jQuery(this);
							globalFunc(globalParams);
						}
					};
					showCustomDialog(
						function() {
							redirect("/");
						},
						'<div style="text-align:center;padding: 5px;">Due to non activity you have been logged out</div>',
						{'width': 370, 'height': 180, 'title': 'Session Expired', 'buttons': buttons}
					);

					clearInterval(interval);
				}
			}
		});
	}, 30000);
}

// TODO refactor this
function showImageInPopupSrc(src, imgW, imgH) {
    var top = self.pageYOffset || (document.documentElement && document.documentElement.scrollTop) || (document.body && document.body.scrollTop);
	var dhxWins = new dhtmlXWindows();
	dhxWins.setImagePath('/js/dhtmlxWindows/imgs/');
	var x = (jQuery(window).width() / 2) - (imgW / 2);
	var id = 1;
	var text = '<img src="/adfiles/' + src + '?rand=' + new Date().getTime() + '" style="border: 0px;">';
	var win = dhxWins.createWindow(id, x, top, imgW, imgH);
	win.setText('Image');
	jQuery('#img_cont').html('<div id="imagePopup" style="display: none;"></div>');
	jQuery('#imagePopup').html(text);
    win.attachObject('imagePopup', true);
}

var AdEase = {

    'openPopup': function(params) {
        var settings = jQuery.extend({
            'width': 500,
            'height': 200,
            'close': true,
            'html': '',
            'title': '',
            'afterOpen': function() {}
        }, params || {});

        var id = 'popup' + Math.random().toString().replace('.', '');
        var frameworkWidth = settings.width;
        var frameworkHeight = settings.height;
        var frameworkTop = jQuery(document).scrollTop() + (jQuery(window).height() / 2) - (settings.height / 2);
        frameworkTop = frameworkTop < 0 ? 0 : frameworkTop;
        var frameworkLeft = jQuery(window).width() / 2 - (settings.width / 2);
        var closeButton = !settings.close ? '' : '<div class="close"></div>';

        var popupHtml =
            '<div class="b-adease-popup" id="' + id + '">' +
                '<div class="layout" style="height: ' + jQuery(document).height() + 'px"></div>' +
                '<div class="framework" style="width:' + frameworkWidth + 'px; height: ' + frameworkHeight + 'px; top: ' + frameworkTop + 'px; left: ' + frameworkLeft + 'px;">' +
                    '<div class="title">' +
                        '<div class="name">' + settings.title + '</div>' + closeButton +
                    '</div>' +
                    '<div class="content">' + settings.html + '</div>' +
                '</div>' +
            '</div>';

        jQuery('body').append(popupHtml);
        jQuery('#' + id + " .close").click(function() {
            jQuery('#' + id).remove();
        });
        
        settings.afterOpen(jQuery('#' + id), settings);
    },

    'redirect': function(url) {
        redirect(url);
    },

    'msg': function(msg) {
        AdEase.openPopup({
            'title': 'Message',
            'width': 400,
            'height': 200,
            'html': Templates.Common.message.templatize({'msg': msg})
        });
    },

    'rand': function() {
        return Math.random().toString().replace('.', '');
    },

    'alert': function(msg) {
        showAlert(msg);
    },

    'modalBox': function(options) {
        var settings = jQuery.extend({
            'width': 200,
            'height': 150,
            'close': true,
            'html': '',
            'title': '',
            'afterShow': function() {}
        }, options || {});

        var id = 'popup' + AdEase.rand();
        var frameworkWidth = settings.width;
        var frameworkHeight = settings.height;
        var frameworkTop = -frameworkHeight;
        var frameworkLeft = jQuery(window).width() / 2 - (settings.width / 2);
        var closeButton = !settings.close ? '' : '<div class="close"></div>';

        var popupHtml =
            '<div class="b-modal-box" id="' + id + '">' +
                '<div class="back" style="height: ' + jQuery(document).height() + 'px"></div>' +
                '<div class="framework" style="min-width:' + frameworkWidth + 'px; min-height: ' + frameworkHeight + 'px; top: ' + frameworkTop + 'px; left: ' + frameworkLeft + 'px;">' +
                    '<div class="title">' +
                        '<div class="name">' + settings.title + '</div>' + closeButton +
                    '</div>' +
                    '<div class="content">' + settings.html + '</div>' +
                '</div>' +
            '</div>';

        jQuery('body').append(popupHtml);
        jQuery('#' + id + " .close").click(function() {
          jQuery('#' + id).remove();
        });

        settings.afterShow(jQuery('#' + id), settings);

        jQuery('#' + id + ' .framework').animate({top: '+=' + frameworkHeight}, 300, function() {
            jQuery('#' + id + ' .framework').css('position', 'fixed');
        });
    },

    'downloadReport': function downloadReport(options) {
        var settings = jQuery.extend({
            'url': '',
            'params': {}
        }, options || {});

        showSystemIsBusy();
        jQuery.ajax({
            'url': settings.url,
            'data': settings.params,
            'type': 'post',
            'dataType': 'json',
            'success': function(res) {
                showSystemIsFree();
                if (res.status) {
                    redirect(res.data.url);
                } else {
                    showMessageDialog(res.message);
                }
            }
        })
    },

    'loadClientDateRange': function(options) {
        var settings = jQuery.extend({
            'startDateSelector': '',
            'endDateSelector': '',
            'clientId': 0
        }, options || {});

        showSystemIsBusy();

        jQuery.ajax({
            'url': '/data/get-client-date-range',
            'type': 'post',
            'data': {
                'id': settings.clientId
            },
            'dataType': 'json',
            'success': function(res) {
                if (res.status) {
                    jQuery(settings.startDateSelector).val(res.data.startDate);
                    jQuery(settings.endDateSelector).val(res.data.endDate)
                } else {
                    showMessageDialog(res.message);
                }
                
                showSystemIsFree();
          }
        });
    },

    'fillSummaryArea': function(options) {
        gHideSummary = false;
        showSummaryArea();
        jQuery.each(options.fillingRules, function(index, elem) {
            clearSummaryItems(elem.summary);
            jQuery.each(elem.data, function(index, val) {
                showSelectionElem(elem.summary, val.value, val.label, val.options);
            })
        });
    },

    'saveUserSettings': function(options) {
        var getDateRange = function (titles) {
            var tableMap = {'medium-classes': 'medium_class'};

            var res = jQuery.map(titles, function(title) {
                var ids = _getItemValues(title) == undefined ? [] : _getItemValues(title).split(',');

                return jQuery.map(ids, function(id) {
                    var dateContainer = jQuery('#' + title + '-dates-' + id);
                    var dateFrom = jQuery('.date-from', dateContainer).val();
                    var dateTo = jQuery('.date-to', dateContainer).val();

                    if (jQuery.trim(dateFrom) != '' && jQuery.trim(dateTo) != '') {
                        return {'start_date': dateFrom, 'end_date': dateTo, 'row_id': id, 'table_name': tableMap[title]};
                    }
                });
            });

            return res.length == 0 ? undefined : res;
        };

        jQuery('#save-settings').click(function() {
            jQuery.ajax({
                'type' : 'post',
                'url'  : options.saveUrl,
                'cache' : 'false',
                'data' : {
                    'data[classes]': _getItemValues('classes'),
                    'data[categories]': _getItemValues('categories'),
                    'data[subcategories]': _getItemValues('subcategories'),
                    'data[companies]': _getItemValues('companies'),
                    'data[divisions]': _getItemValues('divisions'),
                    'data[products]': _getItemValues('products'),
                    'data[mediums]': _getItemValues('mediums'),
                    'data[medium_types]': _getItemValues('medium-types'),
                    'data[medium_classes]': _getItemValues('medium-classes'),
                    'data[medias]': _getItemValues('medias'),
                    'data[search_from]': jQuery('#search-from').val(),
                    'data[search_to]': jQuery('#search-to').val(),
                    'data[flag_adsearch]': jQuery('#flag_adsearch').is(':checked'),
                    'data[flag_report]': jQuery('#flag_report').is(':checked'),
                    'data[flag_dashboard]': jQuery('#flag_dashboard').is(':checked'),
                    'data[flag_email_alert]': jQuery('#flag_email_alert').is(':checked'),
                    'data[flag_excel_export]': jQuery('#flag_excel_export').is(':checked'),
                    'data[flag_pdf_export]': jQuery('#flag_pdf_export').is(':checked'),
                    'data[flag_save_selection]': jQuery('#flag_save_selection').is(':checked'),
                    'data[flag_ad_view]': jQuery('#flag_ad_view').is(':checked'),
                    'data[flag_theme_race_filter]': jQuery('#flag_theme_race_filter').is(':checked'),
                    'data[flag_use_client_search_range]': jQuery('#flag_use_client_search_range').is(':checked'),
                    'data[report_columns]': jQuery.map(jQuery('.col:checked'), function(elem) { return jQuery(elem).val(); }).join(","),
                    'data[dateRanges]': getDateRange(['medium-classes']),
                    'user': options.user
                },
                'dataType' : 'json',
                'success' : function(res) {
                    if (res.status) {
                        AdEase.alert('Settings were updated successfully');
                    } else {
                        AdEase.msg(res.message);
                    }
                }
            });
        });
    },

    'login':  function() {
        AdEase.openPopup({
            'title': 'Login Centre',
            'width': 500,
            'height': 270,
            'html': Templates.Login.form.templatize({'ref': Globals.ref}),
            'afterOpen': function(popup, params) {
                if (jQuery.cookie('auth')) {
                    jQuery('.b-login input[name="remember"]').attr('checked', true);
                    jQuery('.b-login input[name="login"]').val(jQuery.cookie('auth'));
                    jQuery('.b-login input[name="password"]').focus();
                } else {
                    jQuery('.b-login input[name="login"]').focus();
                }

                jQuery('.b-login #forgot').click(function() {
                    AdEase.openPopup({
                        'title': 'Login/Password Recovery',
                        'width': 530,
                        'height': 185,
                        'html': Templates.Login.recovery,
                        'afterOpen': function() {
                            jQuery('.b-recover-password #recover').click(function() {
                                jQuery.ajax({
                                    'url': '/becomeclient/newpassword',
                                    'data': jQuery('.b-recover-password #data').serialize(),
                                    'dataType': 'json',
                                    'type': 'post',
                                    'success': function(res) {
                                        AdEase.msg(res.message);
                                    }
                                });
                            });
                        }
                    })
                });

                var login = function() {
                    var service = jQuery('.b-login #data :radio[name="service"]:checked').val();

                    if (jQuery('.b-login input[name="remember"]').is(':checked')) {
                        jQuery.cookie('auth', jQuery('.b-login input[name="login"]').val());
                    } else {
                        jQuery.cookie('auth', null);
                    }

                    if (service == '3' || service == '4') {
                        jQuery.getJSON(
                            Globals.faUrl + '/auth.php?cb=?',
                            jQuery('.b-login #data').serialize(),
                            function(res) {
                                if (res.status) {
                                    AdEase.redirect(Globals.faUrl + res.data.url);
                                } else {
                                    AdEase.msg(res.message);
                                }
                            }
                        );
                    } else {
                        jQuery.ajax({
                            'url': '/auth',
                            'data': jQuery('.b-login #data').serialize(),
                            'dataType': 'json',
                            'type': 'post',
                            'success': function(res) {
                                if (res.status) {
                                    AdEase.redirect(res.data.url);
                                } else {
                                    AdEase.msg(res.message);
                                }
                            }
                        });
                    }
                };

                jQuery('.b-login #login').click(login);

                jQuery(
                    '.b-login #login, ' +
                    '.b-login input[name="login"], ' +
                    '.b-login input[name="password"],' +
                    '.b-login input[name="remember"],' +
                    '.b-login #data :radio[name="service"]'
                ).keypress(function(event) {
                    if (event.which == 13) {
                        login();
                    }
                });
            }
        });
    },

    'systemBusy': function() {
        showSystemIsBusy();
    },

    'systemFree': function() {
        showSystemIsFree();
    }

};

AdEase.frontLightBox = function(params) {
    var settings = jQuery.extend({
        'file': '',
        'boxWidth': 954,
        'boxHeight': 560,
        'title': '',
        'subtitle': '',
        'html': '',
        'logo': '',
        'afterOpen': function() {
        }
    }, params || {});

    var id = 'popup' + Math.random().toString().replace('.', '');
    var frameworkWidth = settings.boxWidth;
    var frameworkHeight = settings.boxHeight || jQuery(window).height() - 8;
    var frameworkTop = jQuery(document).scrollTop() + 15;
    frameworkTop = frameworkTop < 0 ? 0 : frameworkTop;
    var frameworkLeft = jQuery(window).width() / 2 - (settings.boxWidth / 2);
    var closeButton = '<div class="close"></div>';
    var contentHeight = frameworkHeight - 143;
    var logo = settings.logo == '' ? '' : '<img src="/template/adease/' + settings.logo + '-logo.png" alt="" />';

    var popupHtml =
        '<div class="b-swf-player" id="' + id + '">' +
            '<div class="layout" style="height: ' + jQuery(document).height() + 'px"></div>' +
            '<div class="framework" style="width:' + frameworkWidth + 'px; height: ' + frameworkHeight + 'px; top: ' + frameworkTop + 'px; left: ' + frameworkLeft + 'px;">' +
                '<div class="title">' +
                    '<div class="b-swf-header">' +
                        '<div class="center">' +
                            '<div class="logo">' + logo + '</div>' + closeButton +
                            '<div class="titles">' +
                                '<div class="main">' + settings.title + '</div>' +
                                '<div class="sub">' + settings.subtitle + '</div>' +
                            '</div>' +
                        '</div>' +
                    '</div>' +
                '</div>' +
                '<div class="content" style="height:' + contentHeight + 'px">' + settings.html + '</div>' +
            '</div>' +
        '</div>';

    jQuery('body').append(popupHtml);
    jQuery('#' + id + " .close").click(function() {
        jQuery('#' + id).remove();
    });
    settings.afterOpen(jQuery('#' + id), settings);
};

AdEase.frontPlayer = function(options) {
    var settings = jQuery.extend({
        'title': '',
        'subtitle': '',
        'html': '',
        'logo': '',
        'cssClass': '',
        'afterOpen': function() {
        }
    }, options || {});

    settings.subtitle = settings.periodDescription;

    if (settings.logo == 'fa') {
        settings.url = '/index/flyer';
        settings.title = 'Top Featured Product';
        settings.html = Templates.Popups.Fa.preview.templatize({
            'product': settings.name,
            'image': settings.flyer_url,
            'cssClass': settings.cssClass
        })
    } else if (settings.logo == 'rt') {
        settings.url = '/index/radio-tracker';
        settings.html = Templates.Popups.Radio.preview.templatize({
            'cssClass': settings.cssClass,
            'company': settings.company,
            'file': settings.file,
            'description': settings.description
        })
    } else if (settings.logo == 'tt') {
        settings.url = '/index/tv-tracker';
        settings.html = Templates.Popups.TV.preview.templatize({
            'cssClass': settings.cssClass,
            'company': settings.company,
            'description': settings.description,
            'width': 414,
            'height': 280,
            'file': Globals.serverUrl + '/adfiles/' + settings.file.replace('.wmv', ''),
            'poster': Globals.serverUrl + '/video/index?src=' + encodeURI(settings.file) + '&width=414&height=280',
            'flashPoster': Globals.serverUrl + '/template/adease/video-placeholder.jpg'
        })
    }

    settings.afterOpen = function() {
        if (settings.logo == 'tt') {
            VideoJS.setup("video-player");
        }

        jQuery('.b-front-popup .find-more .go').click(function() {
            AdEase.redirect(settings.url);
        });
    };

    AdEase.frontLightBox(settings);
};
