var ajax_call_counter = 0;
var safariRateLimited = null;
var validationCallbacks = new Array();
var numbersOnly = new RegExp('^[0-9]*$');
var gDateFormat;
var isie6 = false; // Should be set by conditional comments on page.
var isie7 = false;
var isie8 = false;
var isie = window.clipboardData;
function CoreNamespace() {
this.timer = 0;
this.performSetHeights = true;
}
CoreNamespace.prototype.resetTimer = function () {
this.timer = this.getTimer();
console.log('timer reset: ' + this.timer);
};
CoreNamespace.prototype.logTime = function (label) {
var datetime = new Date();
if (label == null) label = '';
var localTimer = this.getTimer();
var duration = this.timer == 0 ? 0 : localTimer - this.timer;
this.timer = localTimer;
console.log(label + ': ' + duration);
};
CoreNamespace.prototype.getTimer = function (label) {
var datetime = new Date();
return datetime.getMinutes() * 60 * 1000 + datetime.getSeconds() * 1000 + datetime.getMilliseconds();
};
//gets the cookie, if it exists
function getCookieValue(cookiename) {
var ck = document.cookie;
var cn = cookiename + "=";
var pos = ck.indexOf(cn);
if (pos != -1) {
var start = pos + cn.length;
var end = ck.indexOf(";", start);
if (end == -1) end = ck.length;
var cookieValue = ck.substring(start, end);
return (cookieValue);
}
return (null);
}
// Gets Json object using a given url.
function GetJson(url) {
var result;
var alreadySync = !$.ajaxSettings.async;
if (!alreadySync)
$.ajaxSetup({ async: false });
$.post(url, function (data) {
result = data;
});
if (!alreadySync)
$.ajaxSetup({ async: true });
return result;
}
//Update and maintain the value of "daysSinceLastLogin" cookie
function setDaysSinceLastLoginCookie() {
var currentDate = new Date();
var curDateStr = currentDate.getMonth() + 1 + '/' + currentDate.getDate() + '/' + currentDate.getFullYear();
if ($.cookie('lastLoginDate') == null) {
$.cookie('lastLoginDate', curDateStr, { path: '/' });
$.cookie('daysSinceLastLogin', '0', { path: '/' });
}
else {
var lastLoginDate = $.cookie('lastLoginDate');
$.cookie('lastLoginDate', curDateStr, { path: '/' });
$.cookie('daysSinceLastLogin', dayDifference(curDateStr, lastLoginDate), { path: '/', expires: 9999 });
}
}
// Do not use in new code. Use jQuery with event.preventDefault().
function hookAnchorClick(anchor, fn) {
/// Hooks an anchor onclick and prevents default HREF behavior.
/// The DOM element to attach the event handler for.
/// Function to be called when anchor is clicked. Should have sender and event argument, in that order.
var clickHandler = function (event) {
var sender;
if (window.event) {
event = window.event;
sender = event.srcElement;
}
else
sender = event.target;
fn(sender, event);
if (event.stopPropagation)
event.stopPropagation();
else
event.cancelBubble = true;
return false;
}
// HACK: MSIE/Opera onclick fails to operate correctly.
if (isie || isie8 || isie7 || isie6 || (document.documentMode < 8) || window.opera)
anchor.onmousedown = clickHandler;
else
anchor.onclick = clickHandler;
}
function beginRequest(sender, args) {
document.body.style.cursor = "wait";
}
function pageLoaded(sender, args) {
document.body.style.cursor = "default";
}
var ajaxSpinnerVisible = false;
// Called when async postbacks begins
function onAjaxPostBackStart(sender, args) {
ajaxPostBackStart('Loading');
}
// Called when async postback ends
function onAjaxPostBackEnd(sender, args) {
ajaxPostBackEnd();
}
// Show ajax process panel with a customized text
function ajaxPostBackStart(textProcessing) {
if (!textProcessing || textProcessing == "")
textProcessing = 'Loading';
if (!ajaxSpinnerVisible) {
var panelAjaxProgress = $("#divAjaxProgress"),
divAjaxImgProgress = $("#divAjaxImgProgress"),
panelAjaxShade = $("#divAjaxShade");
if (panelAjaxProgress.length == 0) {
//create divs on the fly
panelAjaxProgress = $('
');
panelAjaxShade = $('');
divAjaxImgProgress = $('
');
panelAjaxProgress.append(panelAjaxShade);
panelAjaxProgress.append(divAjaxImgProgress);
panelAjaxProgress.prependTo('body');
panelAjaxProgress
.css({ 'position': 'fixed', 'top': '0px', 'left': '0px', 'bottom': '0px', 'right': '0px',
'text-align': 'center', 'border': '1px solid #666',
'z-index': '90000000'
});
panelAjaxShade
.css({ 'position': 'fixed', 'top': '0px', 'left': '0px', 'bottom': '0px', 'right': '0px',
'background': '#fff', 'opacity': '0.5'
});
divAjaxImgProgress.css({ 'position': 'relative' });
}
ajaxSpinnerVisible = true;
ajaxProcesingResizing();
ajaxUpdateText(textProcessing);
panelAjaxProgress.show();
divAjaxImgProgress.show();
$(window).bind('resize', ajaxProcesingResizing);
}
}
// Hide ajax process panel
function ajaxPostBackEnd(noAnimation) {
if (ajaxSpinnerVisible) {
var panelAjaxProgress = $("#divAjaxProgress");
var divAjaxImgProgress = $("#divAjaxImgProgress");
if (noAnimation) {
divAjaxImgProgress.hide();
panelAjaxProgress.hide();
} else {
divAjaxImgProgress.fadeOut("fast", function () {
panelAjaxProgress.hide();
});
}
ajaxSpinnerVisible = false;
$(window).unbind('resize', ajaxProcesingResizing);
}
}
// Update ajax panel feedback text while panel is being displayed
function ajaxUpdateText(text) {
if (ajaxSpinnerVisible) {
var divAjaxImgProgress = $("#divAjaxImgProgress");
divAjaxImgProgress.children('img').attr('alt', text).attr('title', text);
divAjaxImgProgress.children('p').html(text);
}
}
// Resize ajax panel when on window resize
function ajaxProcesingResizing() {
if (ajaxSpinnerVisible) {
var panelAjaxProgress = $("#divAjaxProgress");
var divAjaxImgProgress = $("#divAjaxImgProgress");
var panelAjaxShade = $("#divAjaxShade");
panelAjaxProgress.height($(window).height()).width($(window).width());
panelAjaxShade.height($(window).height()).width($(window).width());
divAjaxImgProgress.css({ 'top': ($(window).height() / 2) - (divAjaxImgProgress.height() / 2) + 'px' });
}
}
// Implements HTML5 placeholder attribute for browsers that do not support it (and for HTML5 server-side control).
var tmpPH = document.createElement('input');
var supportPH = (tmpPH.placeholder != null);
//var colorPH = '#c0c0c0';
var removePlaceholder = (supportPH ?
function (elem) { } : function (elem) {
if (elem != null) {
if (elem.hidePlaceholder)
elem.hidePlaceholder();
elem.hidePlaceholder = null;
elem.showPlaceholder = null;
removeEvent(elem, 'focus', elem._ph_focus, false);
removeEvent(elem, 'blur', elem._ph_onblur, false);
removeEvent(elem, 'onmouseout', elem.ph_onmouseout, false);
removeEvent(elem._ph_form, 'submit', elem._ph_form_submit, false);
}
});
var setPlaceholder = (supportPH ?
function (elem) { } : function (elem) {
if (elem != null) {
if (elem.showPlaceholder != null)
removePlaceholder(elem);
var attrVal = elem.getAttribute('placeholder');
elem.hidePlaceholder = function () {
if (elem.value == attrVal) {
if (elem.oldClassName != null)
elem.className = elem.oldClassName;
elem.value = '';
}
}
elem.showPlaceholder = function () {
if (elem.value == '') {
if (attrVal == null)
attrVal = '';
elem.value = attrVal;
var className = elem.className;
className = (className == null ? '' : elem.className);
elem.oldClassName = className;
elem.className = className + ' fakePlaceholder';
}
}
if (elem.value == null || elem.value == '')
elem.showPlaceholder();
elem._ph_focus = function (event) {
elem.hidePlaceholder();
};
elem._ph_blur = function (event) {
elem.showPlaceholder();
};
addEvent(elem, 'focus', elem._ph_focus, false);
addEvent(elem, 'blur', elem._ph_blur, false);
if (elem.form) {
elem._ph_form = elem.form;
elem._ph_form_submit = function (event) {
if (elem)
removePlaceholder(elem);
};
addEvent(elem._ph_form, 'submit', elem._ph_form_submit, false);
}
}
});
//When programtically form.submit() is invoked, the placeholders are not removed automatically (onsubmit event is not called).
//This function could be invoked before form.submit() if necessary.
function removePlaceHolders() {
$('input[placeholder]').each(function () {
removePlaceholder($(this).get(0));
});
}
var setPlaceHolder = setPlaceholder;
// Validation plugs for runat=server form in master page.
function headerValidationCallback() {
for (var i = 0; i < validationCallbacks.length; i++) {
if (!validationCallbacks[i]())
return false;
}
return true;
}
function addHeaderValidator(method) {
validationCallbacks.push(method);
}
function getBrowser() {
var N = navigator.appName, ua = navigator.userAgent, tem;
var M = ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);
if (M && (tem = ua.match(/version\/([\.\d]+)/i)) != null) M[2] = tem[1];
M = M ? [M[1], M[2]] : [N, navigator.appVersion, '-?'];
return M[0];
}
function getBrowserVersion() {
var N = navigator.appName, ua = navigator.userAgent, tem;
var M = ua.match(/(opera|chrome|safari|firefox|msie)\/?\s*(\.?\d+(\.\d+)*)/i);
if (M && (tem = ua.match(/version\/([\.\d]+)/i)) != null) M[2] = tem[1];
M = M ? [M[1], M[2]] : [N, navigator.appVersion, '-?'];
return M[1];
}
function isLegacyBrowser() {
var browser = getBrowser(),
browserVersion = getBrowserVersion(),
browserMajorVersion = Number(browserVersion.split('.')[0]);
var legacyBrowser = ((browser == 'MSIE' && browserMajorVersion < 10) || (browser == 'Chrome' && browserMajorVersion < 30) || (browser == 'Firefox' && browserMajorVersion < 24) || (browser == 'Netscape' && browserMajorVersion != 5)
|| (browser == 'Safari' && browserMajorVersion < 5) || (browser != 'MSIE' && browser != 'Chrome' && browser != 'Firefox' && browser != 'Safari' && browser != 'Netscape'));
return legacyBrowser;
}
function setTrackBrowserCookie(trackValue) {
var date = new Date();
date.setYear(2100);
document.cookie += ("; expires=" + date.toUTCString());
document.cookie = "CP_TrackBrowser=" + JSON.stringify(trackValue) + "; expires=" + date.toUTCString() + "; path=/";
};
function getTrackBrowserCookie() {
var trackBrowser = { doNotShowLegacyMsg: false, supportNewUI: true };
var trackBrowserRaw = getCookieValue('CP_TrackBrowser');
if (trackBrowserRaw != null) {
trackBrowser = JSON.parse(trackBrowserRaw);
} else {
trackBrowser.legacy = isLegacyBrowser();
trackBrowser.isMobile = navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)|(android)|(webOS)/i) || false;
setTrackBrowserCookie(trackBrowser);
}
return trackBrowser;
}
function browserFailOvers() {
var trackBrowser = getTrackBrowserCookie();
if (trackBrowser.legacy && window.isModuleUsingAngular && trackBrowser.supportNewUI) {
trackBrowser.supportNewUI = false;
setTrackBrowserCookie(trackBrowser);
window.location.reload(true); //reload to not show new UI
return;
}
if (trackBrowser.legacy && !trackBrowser.isMobile && !trackBrowser.doNotShowLegacyMsg && !$('body').hasClass('mobile') && !$('body').hasClass('narrow')) {
$.ajax({
url: '/Site/Browser/Message',
type: 'GET',
success: function (response) {
$('#divToolbars').append(response);
$('.browserMessage a.dismiss').click(function (e) {
e.preventDefault();
trackBrowser.doNotShowLegacyMsg = true;
setTrackBrowserCookie(trackBrowser);
$('.browserMessage').slideUp();
});
$('.browserMessage').slideDown();
}
});
}
}