///
///
///
///
///
///
/********************************************
Generella detlar som körs på varje sida
exempelvis binder man alla autocomplete här baserat på "data-värden"
*********************************************/
var binding = function () {
var initValues = null;
var successTimeOutHandle = null;
/*********************************************************
Binder alla input med data-autocomplete attribut till jquerys
autocomplete-widget. Källan för autocomplete anges i
data-autocomplete: Källa för autokompleta
data-autocomplete-value: id till en input där vald värde värde
data-autocomplete-label: id till en input där vald label sparas
data-validateonblur: function som validerar inmatat värden när man lämnar fältet
lämnas tom om man inte vill utföra den valideringen
**********************************************************/
var autoComplete = function () {
$(":input[data-autocomplete]").each(function () {
var txtBox = $(this),
value = txtBox.attr("data-autocomplete-value"),
label = txtBox.attr("data-autocomplete-label")
var validationCallBack = txtBox.attr("data-validateonblur");
txtBox.autocomplete({ source: function (request, response) {
txtBox.next('span').css("display", "inline-block")
$.get(txtBox.attr("data-autocomplete"),
request,
function (result) {
response(result);
txtBox.next('span').css("display", "none")
if (result[0] == undefined) {
//Om man vill hantera tomma resultat
}
},
"json")
.error(function () {
txtBox.next('span').css("display", "none")
alert("An unidentified error has occurred. Places could not be fetched Contact User Support IT if error remains")
});
}
, minLength: 2
, focus: function (evnet, ui) {
return false;
}
, select: function (event, ui) {
txtBox.val(ui.item.label);
if (value != undefined) {
$("#" + value).val(ui.item.value)
}
if (label != undefined) {
$("#" + label).val(ui.item.label)
}
return false;
}
, open: function () {
txtBox.data("isOpen", true)
}
, close: function () {
txtBox.data("isOpen", false)
/*Om vi inte längre är kvar i fältet kör ev valideing*/
if (txtBox.is(":focus") == false) {
if (validationCallBack != undefined) {
eval(validationCallBack);
}
}
}
});
/*
Validation on Blure!
*/
if (validationCallBack != undefined) {
txtBox.blur(function () {
//txtBox.next('span.Loader').css("display", "none")
eval(validationCallBack);
});
}
});
},
/********************************************************
Binder alla object med classen tooltip till customTooltip
**********************************************************/
toolTip = function () {
$('.tooltip').customTooltip({ yoffset: -15, xoffset: 5, animationSpeed: 100, openOn: "click", closeOn: "click" });
},
/*******************************************************
Binder jquery datepicker till att input med attributet data-datepicker = true
********************************************************/
datePicker = function () {
$(":input[data-datepicker = true]").each(function () {
/*Om man anger datumet som new Date(Global.JNBMinDate) fungerar det inte i IE8*/
$(this).datepicker({ minDate: new Date(Global.JNBMinDate) });
});
},
/********************************************************
Binder dropDownCheckboxList till alla select med attributet data-dropDownCheckBoxList = true
data-dropDownCheckBoxList-text: default-texten
data-dropDownCheckBoxList-width: berdden på listan
********************************************************/
dropDownCheckBoxList = function () {
$("select[data-dropDownCheckBoxList = true]").each(function () {
createDropDownCheckBoxList($(this));
//span class="ui-dropdownchecklist-text"
if ($(this).hasClass("input-validation-error")) {
var container = $("#ddcl-" + $(this).attr("id"));
$("span[class=ui-dropdownchecklist-text]", container).css("background", "#f8d9d9");
$("span[class=ui-icon-triangle-1-e]", container).css("background", "#f8d9d9");
}
});
},
createDropDownCheckBoxList = function (selector, overrideEmptyText) {
var text = selector.attr("data-dropDownCheckBoxList-text"),
widht = selector.attr("data-dropDownCheckBoxList-width"),
onComplete = selector.attr("data-dropDownCheckBoxList-oncomplete");
if (overrideEmptyText != undefined) text = overrideEmptyText;
selector.dropdownchecklist({
icon: {},
width: widht,
emptyText: text,
maxDropHeight: 100,
onComplete: function (selector) {
if (onComplete != "") eval(onComplete)
}
});
/*VAlidation*/
},
/*****************************************************
******************************************************/
setTableLayout = function () {
$("table.ReportTable tbody tr:even").addClass("Even");
$("table.ReportTable tbody tr:odd").addClass("Odd");
},
/**********************************************************
Binder toggel funktionalitet till alla containers
med classen ToggleContainer
***********************************************************/
bindToggleButton = function () {
var openClass = "Open";
var hideClass = "Hide";
$('.ToggleContainer').each(function (k, v) {
var isClientValidate = $(this).hasClass("WarningBoxToggleContainer");
var area = $('.ToggleArea', this);
if (!isClientValidate) {
area.hide();
}
var allToggleButtons = $('.Toggle', this);
$('.Toggle', this).click(function (e) {
e.preventDefault();
if ($(this).hasClass(hideClass)) {
if (isClientValidate) { ClientValidate.SetShow() }
area.slideDown('medium', function () {
allToggleButtons.removeClass(hideClass).addClass(openClass);
});
} else {
if (isClientValidate) { ClientValidate.SetHide() }
area.slideUp('medium', function () {
allToggleButtons.removeClass(openClass).addClass(hideClass);
});
}
$(document).trigger('click');
return false;
});
});
},
/**************************************************
Sätter fokus på första objectet med attributet data-setfocus
***************************************************/
setFocusOnFeild = function () {
var i = 1;
$("[data-setfocus]").first().focus();
},
/****************************************************************
Binder onbeforeunload för att kolla om sidan har ändrats och ge användaren
möjlighet att spara sin ändringar innan man går vidare.
*****************************************************************/
onUnload = function () {
window.onbeforeunload = function () {
var pageIsDirty = checkIfPagesIsDirty();
if (!Global.SkipDirtyCheck && pageIsDirty) {
Global.SkipDirtyCheck = false;
return Global.DirtyMessage;
}
}
},
/*****************************************************************
Hämtar alla inputs som ska spåras för förändring
TODO: Hantera checkboxs
*****************************************************************/
getInputFieldsWithDirtyFlag = function () {
return $("[data-dirtyflag]")
},
/*****************************************************************
Spara init-värdet för alla inputs som ska
******************************************************************/
saveInitValues = function () {
//initValues = new Object();
getInputFieldsWithDirtyFlag().each(function () {
//initValues[$(this).attr("id")] = $(this).val();
$(this).attr("data-dirtyflag", $(this).val());
});
},
/****************************************************************
Kontroll om en sida har ändrats utan att sparas innan man lämnar den
****************************************************************/
checkIfPagesIsDirty = function () {
var ret = false;
if (Global.PageIsDirty) {
ret = true;
}
else {
getInputFieldsWithDirtyFlag().each(function () {
var initValue = $(this).attr("data-dirtyflag");
if (initValue != undefined) {
if ($(this).val() != initValue) {
ret = true;
return;
}
}
});
}
return ret;
}
/***************************************************
Hantera hur meddelanden om uppdatering visas och döljs.
*****************************************************/
hideChangeInfoSuccess = function () {
if (successTimeOutHandle != null) {
clearTimeout(successTimeOutHandle);
}
successTimeOutHandle = setTimeout(function () {
$("div.ChangeInfoSuccess").each(function () {
var div = $(this);
div.slideUp('fast', function () {
div.hide();
});
});
}, 5000);
},
/**************************************************************
Hanterar menyn för språk
***************************************************************/
setCluture = function () {
var cookieCulture = CookiesHelper.Read("Culture")
$("#SetCulture").click(function (evt) {
$("#LanguageMenu").toggle();
EventHelper.StopEventFromBubbleUp(evt);
});
$("tr", "#LanguageMenu").click(function (evt) {
var culture = $(this).attr("data-culture");
if (cookieCulture == culture) {
$("#LanguageMenu").toggle();
}
else {
CookiesHelper.Write("Culture", culture);
location.reload(true);
}
EventHelper.StopEventFromBubbleUp(evt);
});
$("body").click(function () {
var menuLayer = $("#LanguageMenu");
if (menuLayer.is(':visible')) {
menuLayer.hide();
}
});
};
/*******************************************************
Publika metoder
********************************************************/
return {
AutoComplete: autoComplete,
DatePicker: datePicker,
DropDownCheckBoxList: dropDownCheckBoxList,
SetTableLayout: setTableLayout,
// AnchorDisplayObject: anchorDisplayObject,
ToggleButton: bindToggleButton,
SetFocusOnFeild: setFocusOnFeild,
ToolTip: toolTip,
CreateDropDownCheckBoxList: createDropDownCheckBoxList,
//SetJNBIdToSubMenuItems: setJNBIdToSubMenuItems,
OnUnload: onUnload,
SaveInitValues: saveInitValues,
CheckIfPagesIsDirty: checkIfPagesIsDirty,
HideChangeInfoSuccess: hideChangeInfoSuccess,
SetCluture: setCluture
}
} ();
/********************************************
Globala texter.
Bör inte användas mer när språkstödet är implementerat
Använd Translate([Text som mappar mot något i Resources.Strings])
*********************************************/
var Text = function () {
return {
UnhandledErrorMessage: "An unidentified error has occurred. Please try again on a later.. Contact User Support IT if error remains."
}
} ();
/************************************************
Hjälpfunktion för att öppna hjälpen
************************************************/
var Help = function () {
var openHelp = function (URL) {
var width = 500, height = screen.availHeight -50;
var top = 0, left = screen.availWidth - width - 20;
var param = 'left=' + left + ',top=' + top + ',height=' + height + ', width=' + width + ',directories=0, location=0, menubar=0, toolbar=0,resizable=1,scrollbars=1';
var helpWindow = window.open(URL, 'HelpWindow', param);
helpWindow.moveTo(left, top);
};
return {
OpenHelp: openHelp
};
} ();
/*********************************************
Hjälpfunktioner för validering på klienten
*********************************************/
var ClientValidate = function () {
var ClientValidateErrorMessageHidden = "ClientValidateErrorMessageHidden",
c = CookiesHelper.Read(ClientValidateErrorMessageHidden);
var ShowError = typeof c !== 'undefined' ? eval(c) : true
var showErrorIfInvalid = function () {
var BrowserError = $("#BrowserError");
if ($("ul li", BrowserError).length > 1) {
BrowserError.show()
var head = $("a.Toggle", BrowserError)
body = $("div.ToggleArea", BrowserError);
head.removeClass("Hide").removeClass("Open");
if (ShowError) {
head.addClass("Hide");
body.css("display", "none");
}
else {
head.addClass("Open");
body.css("display", "block");
}
};
},
setHide = function () {
CookiesHelper.Write(ClientValidateErrorMessageHidden, "true", null);
},
setShow = function(){
CookiesHelper.Write(ClientValidateErrorMessageHidden, "false", null);
};
return {
ShowErrorIfInvalid: showErrorIfInvalid,
SetHide: setHide,
SetShow: setShow
};
} ();
/*******************************************************
Hjälpfunktioner för att erbjuda sortering i tabeller
*******************************************************/
var TableSort = function () {
var init = function () {
$(".TableSort").each(function () {
var table = $(this);
var container = table.parent("div.ScrollGrid");
var overlayId = loadingGUI.CreateOverlay(container);
$("thead th.Sortable").each(function () {
$(this).click(function () {
$("#" + overlayId).fadeIn();
var col = $(this);
var colIndex = col[0].cellIndex
var rows = $("tbody tr", table);
var dataType = $(this).attr("data-type");
if (dataType == undefined || dataType == "") dataType = "string";
else dataType = dataType.toLowerCase();
var newOrder = (col.hasClass('desc') == true) ? "asc" : "desc";
rows.sort(function (a, b) {
var orgKeyA = $('td:eq(' + colIndex + ')', a).text().toUpperCase();
var orgKeyB = $('td:eq(' + colIndex + ')', b).text().toUpperCase();
var order;
switch (dataType) {
case "datetime":
/*
keyA = DateHelper.NewDate(orgKeyA);
keyB = DateHelper.NewDate(orgKeyB);
break;*/
case "date":
keyA = DateHelper.NewDate(orgKeyA);
keyB = DateHelper.NewDate(orgKeyB);
break;
case "int":
if (isNaN(orgKeyA)) keyA = -1
else keyA = orgKeyA * 1;
if (isNaN(orgKeyB)) keyB = -1
else keyB = orgKeyB * 1;
break;
case "decimal":
break;
default: /*string*/
keyA = orgKeyA
keyB = orgKeyB
}
if (newOrder == "asc") {
return (keyA < keyB) ? -1 : (keyA > keyB) ? 1 : 0;
}
else {
return (keyA > keyB) ? -1 : (keyA < keyB) ? 1 : 0;
}
}); //sort*/
$.each(rows, function (index, row) {
table.append(row);
});
$("thead th.Sortable", table).removeClass("asc").removeClass("desc").removeClass("Active");
col.addClass("Active").addClass(newOrder);
$("tbody tr td", table).removeClass("Active");
colIndex++;
$("tbody tr td:nth-child(" + colIndex + ")", table).addClass("Active");
$("#" + overlayId).fadeOut();
}); //click
}); //each thead th.Sortable
}); //each .TableSort
}; //init
return {
Init: init
};
} ();
/*******************************************************
Hjälpfunktioner för att erbjuda filtrering i tabeller
OBS OBS OBS OBS OBS !!!!!!!
Fungerar ej. Tanken var att använda rx () men det medförde
problem i övriga appen när det kom till IE 8.
Ny implementering är inte klar
*******************************************************/
var TableFilter = function () {
var init = function () {
$("table.TableFilter").each(function () {
createDetailDiv();
var table = $(this),
col = 0,
tr = $("thead tr:last", table),
row = $("
");
row.insertAfter(tr);
$("thead tr:first th", table).each(function () {
if ($(this).hasClass('Filterble')) {
var newCol = $("