372 lines
14 KiB
Plaintext
372 lines
14 KiB
Plaintext
<%@language = "javascript"%>
|
||
<% /*
|
||
$Revision$
|
||
$Id$
|
||
*/ %>
|
||
|
||
<%
|
||
var ANONYMOUS_Allowed = 1;
|
||
var DOCTYPE_Disable = 1;
|
||
var FCLTEXPIRES = 8*60; // geen database interactie tenslotte
|
||
%>
|
||
|
||
<!-- #include file="../Shared/common.inc" -->
|
||
|
||
<%
|
||
Response.ContentType = "text/javascript";
|
||
%>
|
||
|
||
/*
|
||
i volgnr
|
||
ktype 'D', 'C', 'N' etc.
|
||
klen lengte
|
||
kdec decimalen
|
||
kmin kmax
|
||
*/
|
||
function checkRequiredGroup(group, params)
|
||
{
|
||
params = params || {};
|
||
var has_emptyvalue = typeof(params.emptyvalue) != "undefined"; // Er kan een empty waarde meegegeven zijn die als lege waarde opgevat moet worden, bijvoorbeeld als aantal 0 is.
|
||
var requiredgroup = "required" + group;
|
||
var groupisrequired = false;
|
||
var rgroup = $("." + requiredgroup);
|
||
|
||
for (var i = 0; i < rgroup.length; i++)
|
||
{
|
||
var rgvalue = rgroup[i].value;
|
||
var tagName = rgroup[i].tagName;
|
||
var tagType = rgroup[i].type;
|
||
var isbijlage = rgroup[i].getAttribute("isBijlage")==1;
|
||
var bijlage = rgroup[i].getAttribute("nBijlagen");
|
||
var ischecked = rgroup[i].checked;
|
||
|
||
var hasInput = false;
|
||
var hasSelect = (tagName == "SELECT" && rgvalue > 0);
|
||
var hasBijlage = (tagName == "INPUT" && isbijlage && bijlage > 0);
|
||
var hasCheckbox = false;
|
||
if (tagType == "checkbox")
|
||
hasCheckbox = (tagName == "INPUT" && tagType == "checkbox" && ischecked);
|
||
else
|
||
hasInput = (((tagName == "INPUT" || tagName == "TEXTAREA") &&
|
||
((!has_emptyvalue && rgvalue != "") || (has_emptyvalue && rgvalue != 0))) &&
|
||
!isbijlage);
|
||
|
||
if (hasInput || hasSelect || hasBijlage || hasCheckbox)
|
||
{
|
||
groupisrequired = true;
|
||
break;
|
||
}
|
||
}
|
||
|
||
if (groupisrequired)
|
||
{
|
||
$("." + requiredgroup).addClass("required")
|
||
.attr("required", "required");
|
||
for (var i = 0; i < rgroup.length; i++)
|
||
{ // Als checkbox dan toch verplicht is, vink maar aan.
|
||
if (rgroup[i].type == "checkbox")
|
||
rgroup[i].checked = true;
|
||
}
|
||
}
|
||
else
|
||
{
|
||
$("." + requiredgroup).removeClass("required")
|
||
.removeAttr("required");
|
||
}
|
||
}
|
||
|
||
var in_use = false; // Semaphore(Seinvlag) om nested loop van de alerts van twee velden met te lange invoer te vermijden.
|
||
function checkKenmerk(field, show, ktype, klen, kdec, kmin, kmax, params)
|
||
{
|
||
params = params || {};
|
||
var valid = true;
|
||
if (!in_use)
|
||
{
|
||
in_use = true;
|
||
var value = field.value;
|
||
var error = "<%=L("lcl_mld_invalid_kenmerk_format")%>";
|
||
|
||
if (value != '')
|
||
{
|
||
if (ktype == 'D')
|
||
{
|
||
$(field).change(cal_show_onChange);
|
||
|
||
// Native datepicker of jQuery datepicker?
|
||
var native = !(typeof Modernizr == "undefined" || !Modernizr.inputtypes.date);
|
||
|
||
// Test of er nu een geldig datumformaat staat.
|
||
// [YYYY-MM-DD] for native pickers,
|
||
// [DD-MM-YYYY] voor jQuery datepicker
|
||
var regex = native ? /^(\d{1,4})[-](\d{1,2})[-](\d{1,2})$/
|
||
: /^(\d{1,2})[-](\d{1,2})[-](\d{1,4})$/;
|
||
var arr = regex.exec(value);
|
||
if (arr)
|
||
{
|
||
var date = native ? arr[3] : arr[1];
|
||
var month = arr[2];
|
||
var year = native ? arr[1] : arr[3];
|
||
var dt = new Date(year, month-1, date);
|
||
|
||
if (date != dt.getDate() || month != dt.getMonth() + 1 || (year != dt.getYear() && year != dt.getFullYear()))
|
||
{
|
||
valid = false;
|
||
}
|
||
}
|
||
else valid = false;
|
||
}
|
||
else if (ktype == 'T')
|
||
{
|
||
// sta toe 14 -> 14:00h
|
||
// sta toe 930 -> 9:30h
|
||
// sta ook allerlei separators toe.
|
||
var TIME_RE = /^(\d*)[\/\.\-\: ]?(\d\d?)?$/;
|
||
posstime = value.match(TIME_RE);
|
||
if (posstime && posstime.length && !isNaN(parseInt(posstime, 10))) // er moet minstens iets goed zijn
|
||
{
|
||
var hh = parseInt(posstime, 10);
|
||
mm = 0;
|
||
if (posstime.length > 1 && posstime[2])
|
||
{
|
||
var mm = parseInt(posstime[2],10);
|
||
}
|
||
else // 930 voor 9:30h
|
||
if (hh > 100)
|
||
{
|
||
mm = hh % 100;
|
||
hh = Math.floor(hh / 100);
|
||
}
|
||
hh = hh % 24;
|
||
mm = mm % 60;
|
||
// Opgeschoonde waarde opslaan
|
||
$(field).val(String((hh<10?"0":"")+hh) + ":" + String((mm<10?"0":"")+mm), true);
|
||
|
||
if (kmin || kmax)
|
||
{
|
||
var kval = parseFloat(hh + "." + mm);
|
||
kmin = kmin ? parseFloat(kmin.split(":").join(".")) : 0;
|
||
kmax = kmax ? parseFloat(kmax.split(":").join(".")) : 24;
|
||
if (kmin > kval || kval > kmax)
|
||
{
|
||
valid = false;
|
||
error = "<%=L("lcl_mld_kenmerk_out_range")%>";
|
||
}
|
||
}
|
||
}
|
||
else
|
||
valid = false;
|
||
}
|
||
else if (ktype == 'C' || ktype == 'L' || ktype == 'Q')
|
||
{ // newlines verdubbelen naar %0D%0A dus aantal regels bijtellen
|
||
if (value.length + (value.split("\n").length-1) > klen) valid = false;
|
||
}
|
||
else if (ktype == 'N')
|
||
{
|
||
allowInputExpression(field);
|
||
value = field.value; // mogelijk gewijzigd
|
||
var arrValue = [value];
|
||
for (var i = 0; i < arrValue.length; i++)
|
||
{
|
||
if (kdec)
|
||
{
|
||
var l1 = klen-kdec;
|
||
var l2 = kdec;
|
||
// Als een punt <20>n een komma in een getal behouden we alleen de laatste
|
||
if (arrValue[i].lastIndexOf(".") > arrValue[i].lastIndexOf(","))
|
||
{
|
||
value.replace(arrValue[i], arrValue[i].replace(/\,/ig, ""));
|
||
field.value = value;
|
||
}
|
||
if (arrValue[i].lastIndexOf(",") > arrValue[i].lastIndexOf("."))
|
||
{
|
||
value.replace(arrValue[i], arrValue[i].replace(/\./ig, ""));
|
||
field.value = value;
|
||
}
|
||
var s = '^\\-?(\\d{1,'+l1+'}[.,]?|\\d{0,'+l1+'}[.,]\\d{1,'+l2+'})$';
|
||
valid = arrValue[i].match(new RegExp(s)) && valid;
|
||
if (valid) { var t = parseFloat(arrValue[i].replace(',','.'));}
|
||
}
|
||
else
|
||
{
|
||
if (klen == 1 && kmin == 0 && kmax == 1)
|
||
{
|
||
// Checkbox; valid if not required or required and value == 1.
|
||
var requiredgroup = field.className.match(/required\d*S\d*/g); // requiredgroup is tester somewhere else
|
||
valid = $(field).hasClass("required") && !requiredgroup && !$(field).prop("checked")? false : true;
|
||
if (!valid) { error = "<%=L("lcl_mld_verplicht")%>"; }
|
||
t = (field.checked?1:0);
|
||
}
|
||
else
|
||
{
|
||
var s = '^\\-?\\d{1,'+klen+'}[.,]?$';
|
||
valid = arrValue[i].match(new RegExp(s)) && valid;
|
||
if (valid) { var t = parseInt(arrValue[i]);}
|
||
}
|
||
}
|
||
}
|
||
if (valid && ktype != 'T') // Time wordt hierboven al gecontroleerd
|
||
{
|
||
if ((kmin !== null) && (t < kmin)) { valid = false; error = "<%=L("lcl_mld_kenmerk_out_range")%>"; }
|
||
if ((kmax !== null) && (t > kmax)) { valid = false; error = "<%=L("lcl_mld_kenmerk_out_range")%>"; }
|
||
}
|
||
}
|
||
}
|
||
validateField(field, valid, error);
|
||
if (!show && valid && field.className.match(/required\d*S\d*/g) && field.className.match(/required\d*S\d*/g).length > 0)
|
||
{ // Er is een required groep aanwezig.
|
||
var requiredgroup = field.className.match(/required\d*S\d*/g)[0];
|
||
var group = requiredgroup.substr(8);
|
||
checkRequiredGroup(group, params);
|
||
}
|
||
|
||
in_use = false;
|
||
return valid;
|
||
}
|
||
return false; // inuse
|
||
}
|
||
|
||
// Op een generieke manier documenten openen
|
||
// DWF bestanden worden eventueel met de SLNKDWF viewer geopend
|
||
// Poweruser IE feature: Ctrl ingedrukt opent DWF bestanden toch 'gewoon'
|
||
function openDoc(filepath)
|
||
{
|
||
<%if (S("view_dwf_with_slnkdwf"))
|
||
{ %>
|
||
if (!(window.event && event.ctrlKey) && filepath.toUpperCase().match('.DWF'))
|
||
FcltMgr.windowopen("../SLNKDwf/ShowDWF.asp?relfile=" + filepath,'facDoc',"");
|
||
else
|
||
<%} %>
|
||
FcltMgr.windowopen(filepath);
|
||
// Unsafe:
|
||
// FcltMgr.windowopen(filepath, 'facDoc', "");
|
||
}
|
||
|
||
//Data komt terug van de closeModal
|
||
function bijlagen_callback(data, orgParams)
|
||
{
|
||
if (orgParams.params.objButton)
|
||
{
|
||
if (orgParams.params.multi) // ktype == "M"
|
||
{
|
||
orgParams.params.objButton.value = L("lcl_appendixes_teller").format(data.cnt);
|
||
orgParams.params.objButton.setAttribute("nBijlagen", data.cnt);
|
||
}
|
||
else
|
||
{
|
||
orgParams.params.objButton.nextSibling.setAttribute("nBijlagen", data.cnt);
|
||
orgParams.params.objButton.value = data.fileName||"";
|
||
$(orgParams.params.objButton).toggle(data.fileName != "");
|
||
$(orgParams.params.objButton).next().toggle(data.fileName == ""); // de 'Add' knop
|
||
if (data.fullPath) // handtekening
|
||
$(orgParams.params.objButton).nextAll("img").show()[0].src = data.fullPath;
|
||
else
|
||
$(orgParams.params.objButton).nextAll("img").hide();
|
||
FcltMgr.resized();
|
||
}
|
||
if (orgParams.params.objButton.onchange)
|
||
orgParams.params.objButton.onchange(); // Omdat input veld readonly is wordt de onchange niet automatisch uitgevoerd.
|
||
}
|
||
|
||
if (orgParams.params.saveUrl)
|
||
{
|
||
$.post(orgParams.params.saveUrl, { flexVal: data.fileName }); // DIRECT opslaan in de database
|
||
}
|
||
}
|
||
// encrypt geeft aan of bestand encrypted moet worden.
|
||
function onBijlagen(formurl, // protected
|
||
saveUrl, // protected
|
||
multi,
|
||
objButton)
|
||
{
|
||
var params = { multi: multi, objButton: objButton};
|
||
// Voor de zekerheid slaan we wijziging van de bestandsnaam direct op.
|
||
// op het filesysteem is het namelijk ook al 'gecommit'
|
||
|
||
params.saveUrl = saveUrl;
|
||
allparams = {params: params,
|
||
callback: bijlagen_callback,
|
||
XXXXalwaysCallback: true,
|
||
noClose: true // Voor bijlagenscherm dus geen close-knopje (kruisje) in rechter bovenhoek.
|
||
};
|
||
FcltMgr.openModalDetail(formurl, L("lcl_appendixes"), allparams );
|
||
}
|
||
|
||
function xmlNodeDetails(key, xmlnode)
|
||
{
|
||
var url = "";
|
||
switch (xmlnode.toLowerCase())
|
||
{
|
||
case "afdeling" : url = "appl/prs/prs_afdeling.asp?key=" + key; break;
|
||
case "afspraak" : url = "appl/bez/bez_afspraak.asp?afspr_key=" + key + "&urole=fo"; break;
|
||
case "bedrijf" : url = "appl/prs/prs_bedrijf.asp?bedrijf_key=" + key; break;
|
||
case "bestelling" : url = "appl/bes/bes_bestelling.asp?bes_key=" + key + "&urole=fo"; break;
|
||
case "bestelopdr" : url = "appl/bes/bes_opdr.asp?ordernr=" + key + "&urole=fo"; break;
|
||
case "contract" : url = "appl/cnt/cnt_contract.asp?cnt_key=" + key + "&urole=bo"; break;
|
||
case "deel" : url = "appl/ins/ins_deel.asp?ins_key=" + key + "&urole=fe"; break;
|
||
case "factuur" : url = "appl/fin/fin_factuur.asp?fin_key=" + key; break;
|
||
case "gebouw" : url = "appl/alg/alg_gebouw.asp?key=" + key; break;
|
||
case "locatie" : url = "appl/alg/alg_locatie.asp?key=" + key; break;
|
||
case "melding" : url = "appl/mld/mld_melding.asp?mld_key=" + key + "&urole=fo"; break;
|
||
case "message" : url = "appl/msg/msg_message.asp?message_key=" + key + "&urole=bo"; break;
|
||
case "opdracht" : url = "appl/bez/mld_opdr.asp?opdr_key=" + key + "&urole=bo"; break;
|
||
case "perslid" : url = "appl/prs/prs_perslid.asp?prs_key=" + key; break;
|
||
case "reservering" : url = "appl/res/res_reservering.asp?rsv_ruimte_key=" + key + "&urole=fo"; break;
|
||
case "xreservering" : url = "appl/res/res_reservering.asp?reservering_key=" + key + "&urole=fo"; break;
|
||
case "ruimte" : url = "appl/alg/alg_ruimte.asp?key=" + key; break;
|
||
case "scenario" : url = "appl/prj/prj_scenario.asp?prj_key=" + key; break;
|
||
case "verdieping" : url = "appl/alg/alg_verdieping.asp?key=" + key; break;
|
||
default : break;
|
||
}
|
||
if (url != "")
|
||
FcltMgr.openDetail(url, "<%=L("lcl_bes_srtprod")%>", {callback: FcltMgr.reload});
|
||
}
|
||
|
||
$(function() {
|
||
if ($(".flexshow").length) {
|
||
$(".initTriggerChange:first").change();
|
||
}
|
||
});
|
||
|
||
function callback_flex_expr_info(json)
|
||
{
|
||
for (var kenmerk=0; kenmerk < json.length; kenmerk++)
|
||
{
|
||
if ($("#" + json[kenmerk].kfieldid + "val").hasClass("flexshow") || $("#Suggest" + json[kenmerk].kfieldid + "_show").hasClass("flexshow"))
|
||
{
|
||
if (typeof mobile == "object") // PDA has in mobile.inc an object "mobile" while the desktop has not
|
||
{
|
||
var $fld = $("#" + json[kenmerk].kfieldid + "val");
|
||
$fld.add($fld.prev("label")).toggle(json[kenmerk].waarde != 0 && json[kenmerk].waarde != null);
|
||
}
|
||
else
|
||
{
|
||
var $td = $("#" + json[kenmerk].kfieldid + "val").parent("td");
|
||
$td.add($td.prev(".label")).toggle(json[kenmerk].waarde != 0 && json[kenmerk].waarde != null);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
$("#" + json[kenmerk].kfieldid + "val").val(json[kenmerk].waarde);
|
||
}
|
||
}
|
||
$("div.time-holder").each(function() { $(this).css('top', "").css('left', ""); });
|
||
}
|
||
|
||
function calculateFlexExpressions(field, module, refkey, niveau, nameprefix, extraserie)
|
||
{
|
||
if (field.form)
|
||
{ // execute only when the field is on a form (which is not the case when on a modal screen like "advanced")
|
||
var params = $("[name=" + field.form.name + "]").serialize()
|
||
+ "&module=" + module
|
||
+ "&refkey=" + refkey
|
||
+ "&niveau=" + niveau
|
||
+ "&nameprefix=" + nameprefix
|
||
+ "&extraserie=" + (extraserie? 1 : 0);
|
||
|
||
$.post(rooturl+"/appl/Shared/calculate_flex_expr.asp",
|
||
params,
|
||
FcltCallbackAndThenAlways(callback_flex_expr_info),
|
||
"json");
|
||
}
|
||
}
|