CINXE.COM
Asiakkaiden Service Portal - Asiakaspalvelu
<!DOCTYPE html><html lang="fi" ng-app="sn.$sp" ng-init="portal_id = '2086b814c3221200f3897bfaa2d3aea8'" style="height: 100%" class="page-{{page.sys_id}} v{{page.sys_id}}" data-page-id="{{page.sys_id}}"><head sp-metatags=""><script type="text/javascript" src="https://web-static.archive.org/_static/js/bundle-playback.js?v=7YQSqjSh" charset="utf-8"></script> <script type="text/javascript" src="https://web-static.archive.org/_static/js/wombat.js?v=txqj7nKC" charset="utf-8"></script> <script>window.RufflePlayer=window.RufflePlayer||{};window.RufflePlayer.config={"autoplay":"on","unmuteOverlay":"hidden"};</script> <script type="text/javascript" src="https://web-static.archive.org/_static/js/ruffle/ruffle.js"></script> <script type="text/javascript"> __wm.init("https://web.archive.org/web"); __wm.wombat("https://asiakaspalvelu.yle.fi/csp","20221203102836","https://web.archive.org/","web","https://web-static.archive.org/_static/", "1670063316"); </script> <link rel="stylesheet" type="text/css" href="https://web-static.archive.org/_static/css/banner-styles.css?v=p7PEIJWi" /> <link rel="stylesheet" type="text/css" href="https://web-static.archive.org/_static/css/iconochive.css?v=3PDvdIFv" /> <!-- End Wayback Rewrite JS Include --> <title>Asiakkaiden Service Portal - Asiakaspalvelu</title><meta http-equiv="X-UA-Compatible" content="IE=edge; IE=10"></meta><meta name="viewport" content="width=device-width, initial-scale=1.0"></meta><meta name="apple-mobile-web-app-capable" content="yes"></meta><meta http-equiv="cache-control" content="public"></meta><meta http-equiv="cache-control" content="no-cache"></meta><meta http-equiv="cache-control" content="max-age=0"></meta><meta http-equiv="pragma" content="no-cache"></meta><link rel="shortcut icon" href="/web/20221203102836im_/https://asiakaspalvelu.yle.fi/d4bccda61b4dd5909b28a8afe54bcb0b.iix?&v=993d6c3847e3dd10218a1141e36d43a5"></link><link rel="apple-touch-icon" href="/web/20221203102836im_/https://asiakaspalvelu.yle.fi/d4bccda61b4dd5909b28a8afe54bcb0b.iix?&v=993d6c3847e3dd10218a1141e36d43a5"></link><link rel="stylesheet" href="/web/20221203102836cs_/https://asiakaspalvelu.yle.fi/styles/fonts/source-sans-pro/source-sans-pro.css?v=993d6c3847e3dd10218a1141e36d43a5" media="none" onload="if(media!='all')media='all'"></link><link rel="stylesheet" href="/web/20221203102836cs_/https://asiakaspalvelu.yle.fi/styles/css_includes_$sp.css?v=993d6c3847e3dd10218a1141e36d43a5" media="none" onload="if(media!='all')media='all'"></link><link href="/web/20221203102836cs_/https://asiakaspalvelu.yle.fi/styles/scss/sp-bootstrap.scss?portal_id=2086b814c3221200f3897bfaa2d3aea8&v=993d6c3847e3dd10218a1141e36d43a5" rel="stylesheet" type="text/css"></link><link href="/web/20221203102836cs_/https://asiakaspalvelu.yle.fi/styles/scss/sp-a11y-resize-text.scss?portal_id=2086b814c3221200f3897bfaa2d3aea8&v=993d6c3847e3dd10218a1141e36d43a5" rel="stylesheet" type="text/css"></link><link rel="stylesheet" href="/web/20221203102836cs_/https://asiakaspalvelu.yle.fi/styles/sp-patch.css?v=993d6c3847e3dd10218a1141e36d43a5" media="none" onload="if(media!='all')media='all'"></link><link rel="stylesheet" href="/web/20221203102836cs_/https://asiakaspalvelu.yle.fi/scripts/icon-fonts/font-awesome/css/font-awesome.css?v=993d6c3847e3dd10218a1141e36d43a5" media="none" onload="if(media!='all')media='all'"></link><link href="/web/20221203102836cs_/https://asiakaspalvelu.yle.fi/styles/scss/sp-a11y-accessibility.scss?portal_id=2086b814c3221200f3897bfaa2d3aea8&v=993d6c3847e3dd10218a1141e36d43a5" rel="stylesheet" type="text/css"></link><style>body { font-family: Open Sans; } .panel-default { border-radius: .7rem; padding: 1.4rem; box-shadow: .2rem .2rem 1rem .1rem rgba(0, 0, 0, .2); background-color: white !important; } .panel { border-radius: .7rem; padding: 1.4rem; box-shadow: .2rem .2rem 1rem .1rem rgba(0, 0, 0, .2); background-color: white !important; } .panel-heading { border-top-right-radius: .7rem; border-top-left-radius: .7rem; padding: 1.4rem; background-color: transparent !important; color: #434343; } .panel-title { font-weight: bold; } .panel-title > a { color: #00b4c8; } .th-title { color: #00b4c8 !important; }</style><style>@font-face { font-family: "Yle"; src: url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/Yle-Thin.woff2') format("woff2"), url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/Yle-Thin.woff') format("woff"); font-style: normal; font-weight: 100; } @font-face { font-family: "Yle"; src: url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/Yle-ThinItalic.woff2') format("woff2"), url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/Yle-ThinItalic.woff') format("woff"); font-style: italic; font-weight: 100; } @font-face { font-family: "Yle"; src: url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/Yle-Light.woff2') format("woff2"), url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/Yle-Light.woff') format("woff"); font-style: normal; font-weight: 300; } @font-face { font-family: "Yle"; src: url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/Yle-LightItalic.woff2') format("woff2"), url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/Yle-LightItalic.woff') format("woff"); font-style: italic; font-weight: 300; } @font-face { font-family: "Yle"; src: url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/Yle-Regular.woff2') format("woff2"), url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/Yle-Regular.woff') format("woff"); font-style: normal; font-weight: 400; } @font-face { font-family: "Yle"; src: url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/Yle-RegularItalic.woff2') format("woff2"), url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/Yle-RegularItalic.woff') format("woff"); font-style: italic; font-weight: 400; } @font-face { font-family: "Yle"; src: url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/Yle-Medium.woff2') format("woff2"), url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/Yle-Medium.woff') format("woff"); font-style: normal; font-weight: 500; } @font-face { font-family: "Yle"; src: url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/Yle-MediumItalic.woff2') format("woff2"), url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/Yle-MediumItalic.woff') format("woff"); font-style: italic; font-weight: 500; } @font-face { font-family: "Yle"; src: url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/Yle-Bold.woff2') format("woff2"), url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/Yle-Bold.woff') format("woff"); font-style: normal; font-weight: 700; } @font-face { font-family: "Yle"; src: url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/Yle-BoldItalic.woff2') format("woff2"), url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/Yle-BoldItalic.woff') format("woff"); font-style: italic; font-weight: 700; } @font-face { font-family: "Yle"; src: url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/Yle-Black.woff2') format("woff2"), url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/Yle-Black.woff') format("woff"); font-style: normal; font-weight: 900; } @font-face { font-family: "Yle"; src: url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/Yle-BlackItalic.woff2') format("woff2"), url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/Yle-BlackItalic.woff') format("woff"); font-style: italic; font-weight: 900; } @font-face { font-family: "Yle Condensed"; src: url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/YleCondensed-Thin.woff2') format("woff2"), url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/YleCondensed-Thin.woff') format("woff"); font-style: normal; font-weight: 100; } @font-face { font-family: "Yle Condensed"; src: url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/YleCondensed-Light.woff2') format("woff2"), url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/YleCondensed-Light.woff') format("woff"); font-style: normal; font-weight: 300; } @font-face { font-family: "Yle Condensed"; src: url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/YleCondensed-Regular.woff2') format("woff2"), url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/YleCondensed-Regular.woff') format("woff"); font-style: normal; font-weight: 400; } @font-face { font-family: "Yle Condensed"; src: url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/YleCondensed-Medium.woff2') format("woff2"), url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/YleCondensed-Medium.woff') format("woff"); font-style: normal; font-weight: 500; } @font-face { font-family: "Yle Condensed"; src: url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/YleCondensed-Bold.woff2') format("woff2"), url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/YleCondensed-Bold.woff') format("woff"); font-style: normal; font-weight: 700; } @font-face { font-family: "Yle Condensed"; src: url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/YleCondensed-Black.woff2') format("woff2"), url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/YleCondensed-Black.woff') format("woff"); font-style: normal; font-weight: 900; } @font-face { font-family: "Open Sans"; src: url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/OpenSans-Light.woff2') format("woff2"), url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/OpenSans-Light.woff') format("woff"); font-style: normal; font-weight: 300; } @font-face { font-family: "Open Sans"; src: url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/OpenSans-LightItalic.woff2') format("woff2"), url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/OpenSans-LightItalic.woff') format("woff"); font-style: italic; font-weight: 300; } @font-face { font-family: "Open Sans"; src: url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/OpenSans-Regular.woff2') format("woff2"), url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/OpenSans-Regular.woff') format("woff"); font-style: normal; font-weight: 400; } @font-face { font-family: "Open Sans"; src: url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/OpenSans-RegularItalic.woff2') format("woff2"), url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/OpenSans-RegularItalic.woff') format("woff"); font-style: italic; font-weight: 400; } @font-face { font-family: "Open Sans"; src: url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/OpenSans-SemiBold.woff2') format("woff2"), url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/OpenSans-SemiBold.woff') format("woff"); font-style: normal; font-weight: 600; } @font-face { font-family: "Open Sans"; src: url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/OpenSans-SemiBoldItalic.woff2') format("woff2"), url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/OpenSans-SemiBoldItalic.woff') format("woff"); font-style: italic; font-weight: 600; } @font-face { font-family: "Open Sans"; src: url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/OpenSans-Bold.woff2') format("woff2"), url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/OpenSans-Bold.woff') format("woff"); font-style: normal; font-weight: 700; } @font-face { font-family: "Open Sans"; src: url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/OpenSans-BoldItalic.woff2') format("woff2"), url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/OpenSans-BoldItalic.woff') format("woff"); font-style: italic; font-weight: 700; } @font-face { font-family: "Open Sans"; src: url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/OpenSans-ExtraBold.woff2') format("woff2"), url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/OpenSans-ExtraBold.woff') format("woff"); font-style: normal; font-weight: 800; } @font-face { font-family: "Open Sans"; src: url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/OpenSans-ExtraBoldItalic.woff2') format("woff2"), url('https://web.archive.org/web/20221203102836im_/https://design-system.cdn.yle.fi/OpenSans-ExtraBoldItalic.woff') format("woff"); font-style: italic; font-weight: 800; }</style><style>.panel-heading .glyphicon { font-size: 1.6rem; } a.circle_icon h3 { color: #333333; margin: 0 0 .3rem 0; } .breadcrumbs-container { padding-top: .5rem; padding-bottom: .5rem; } .avatar-container { color: #4a4a4a; } .avatar-container .avatar .sub-avatar { background-color: #e5e5e5; } .timeline-badge.success { background-color: #b5ebd4 !important; } .timeline-badge span { color: #293e40 !important; } .panel-footer { color: #515151 !important; } .help-tag { color: #3a3f51 !important; }</style><link type="text/css" rel="stylesheet" href="/web/20221203102836cs_/https://asiakaspalvelu.yle.fi/styles/sn_banner.cssx?v=09-28-2022_1908"></link><script data-description="NOW glide web analytics siteid and url">window.snWebaConfig = window.snWebaConfig || {}; // glide web analytics config window.snWebaConfig.siteId = "0"; window.snWebaConfig.trackerURL = ""; window.snWebaConfig.webaScriptPath = "/scripts/piwik-3.1.1/thirdparty/piwik.min.js"; window.snWebaConfig.ambClient = (window.g_ambClient) ? window.g_ambClient : ((window.amb)? window.amb.getClient(): ""); window.snWebaConfig.subscribed = false;</script><script data-description="NOW session, user_name, etc">window.NOW = window.NOW || {}; // record watch / presence window.NOW.session_id = '9F0A6CA947A79150218A1141E36D430F'; window.NOW.user_name = 'guest'; window.NOW.user_id = '5136503cc611227c0183e96598c4f706'; window.NOW.user_display_name = 'Guest'; window.NOW.user_initials = 'G'; window.NOW.user_avatar = ''; window.NOW.presence_interval = 60; window.NOW.record_presence_interval = 20; window.NOW.ambConnected = false;</script><script data-description="NOW ucm, analytics related props">window.NOW.analytics_enabled = 'true' == 'true';window.NOW.sp_analytics_plugin_active = false; window.NOW.sp_analytics_portal_override = '' == 'true'; window.NOW.ucm_invocations = parseInt(''); window.NOW.ucm_portal_id = ''; window.NOW.usage_tracking = window.NOW.usage_tracking || {}; window.NOW.usage_tracking.ucm_encountered_exception = '' == 'true'; window.NOW.usage_tracking.user_consent = ''; window.NOW.user_impersonating = false; window.NOW.usage_tracking.usage_tracking_allowed_for_session = '' == 'true'; window.NOW.instrumentation_authkey = ''; window.NOW.user_id_hashed = '591bce70be21e6b30a1d83d4b795b2d49f9d2bf53042cf3a779bc475729c5b26'; window.NOW.instrumentation_api_host = 'https://web.archive.org/web/20221203102836/https://api-appsee.service-now.com'; window.NOW.instance_id = '0b9b61ef4fc0ea0494ac220f0310c7f7'; window.NOW.instance_name = 'yle'; window.NOW.domain_id = '';window.NOW.unauthenticated_user_tracking_enabled = false;</script><script data-description="NOW vars set by properties, custom events, g_* globals"> window.g_ck = '130a6ca947a79150218a1141e36d431034f09a15c3fabda56eda0e8c16a36e531f922baa'; window.logged_in = false; if (!window.NOW) window.NOW = {}; window.NOW.ac_wait_time = parseInt(250, 10); window.NOW.ac_max_search_matches = parseInt(100, 10); window.NOW.sp_dual_list_default_view = ''; window.NOW.sp_debug = 'false' == 'true'; window.NOW.sp_show_console_error = 'true' == 'true' && false; window.NOW.page_id = ''; window.NOW.portal_id = '2086b814c3221200f3897bfaa2d3aea8'; window.NOW.ais_enabled = 'false'; window.NOW.portal_url_suffix = 'csp'; window.NOW.has_access = 'true' === 'true'; // script checks for environment // if (NOW.sp) ... // added Aug 1, 2016 window.NOW.sp = {}; window.NOW.sp.version = {}; window.NOW.sp.version.major = 1; window.NOW.sp.version.minor = 2; window.NOW.sp.version.dot = 0; window.NOW.sp.enableTours = 'false' == 'true'; window.NOW.sp.can_debug = ('false' == 'true' || 'true' == 'false') || false; window.NOW.sp.enableDateTranslation = '' == 'true'; window.NOW.sp.widgetCSSIncludes = {}; try { window.NOW.dateFormat = JSON.parse("{\"timeAgo\": false, \"dateBoth\": false}"); } catch (e) { window.NOW.dateFormat = {timeAgo: false, dateBoth: false}; } // SP Context Manager window.NOW.sp_ctx_mgr_timeout = parseInt(5000, 10); // SP doesn't define app resources yet window.SN_APP_RESOURCES = {}; // script globals var g_tz_offset = 7200000; var g_tz = 'Europe/Helsinki'; var g_first_day_of_week = parseInt(1, 10); var g_date_picker_first_day_of_week = parseInt(2, 10); var g_notif_timeout = parseInt(0, 10); var g_ck = '130a6ca947a79150218a1141e36d431034f09a15c3fabda56eda0e8c16a36e531f922baa'; var g_searchWaitTime = 100; var g_amb_on_login = false; var g_lang = 'fi'; var g_system_lang = "en"; var g_user_date_time_format = "dd.MM.yyyy HH:mm:ss"; var g_user_date_format = "dd.MM.yyyy"; var g_user_decimal_separator = "."; var g_user_grouping_separator = ","; var g_text_direction = "ltr"; var g_accessibility = "false"; var g_accessibility_resizeText = "true" === "true"; var g_accessibility_visual_patterns = false; var g_glide_list_separator = ", "; var g_sort_elements_by_session_language = "true" == "true"; var g_dirty_form_warning_enabled = "true" == "true"; var g_mandatory_field_msg = 'Osa kentistä on keskeneräisiä:'; var g_field_error_msg = 'Seuraavat kentät sisältävät virheitä:'; var g_tinymce_remove_script_host = "true" == "true"; var g_tinymce_convert_urls = "false" == "true"; var g_tinymce_relative_urls = "true" == "true"; var g_datepicker_validation_enable = "true" == "true"; var g_choices_show_missing = "true" == "true"; var g_builddate = "09-28-2022_1908"; var g_has_agent_chat_config = "false" === "true"; var g_user_is_admin = "false" === "true"; var g_persist_msgs_through_page_nav = "true" == "true"; var g_attachment_force_download_all_mime_types = "false" === "true"; var g_attachment_force_download_mime_type = "application/xml,text/html,image/svg,image/svg+xml"; var g_universal_link_flag = "false" === "true"; var g_has_encryption_context = false; // PRB1395165: prevent ClientScriptScoper errors from scoped UI Scripts ScopedGlideDialogWindowGenerator = function() { return null; }; ScopedGlideAjaxGenerator = function() { return null; }; ScopedGFormGenerator = function() { return null; };</script><script type="text/javascript" src="/web/20221203102836js_/https://asiakaspalvelu.yle.fi/scripts/js_includes_sp_libs_min.jsx?v=09-28-2022_1908&lp=Wed_Nov_16_09_38_29_PST_2022&c=29_762&lang=fi"></script><script type="text/javascript" src="/web/20221203102836js_/https://asiakaspalvelu.yle.fi/scripts/js_includes_sp.jsx?v=09-28-2022_1908&lp=Wed_Nov_16_09_38_29_PST_2022&c=29_762&lang=fi"></script><script language="javascript" src="https://web.archive.org/web/20221203102836js_/https://yle-consent-sdk.yle.fi/v2/yle-consent-sdk.latest.js"></script><script type="text/javascript" src="/web/20221203102836js_/https://asiakaspalvelu.yle.fi/scripts/bootstrap-datetimepicker.js?v=09-28-2022_1908"></script><script type="text/javascript" src="/web/20221203102836js_/https://asiakaspalvelu.yle.fi/app_com.jsdbx?c=21"></script><script type="text/javascript" src="/web/20221203102836js_/https://asiakaspalvelu.yle.fi/app_com.modelUtil.jsdbx?c=20"></script><script type="text/javascript" src="/web/20221203102836js_/https://asiakaspalvelu.yle.fi/app_com.cxs.contextual_search.jsdbx?c=56"></script><link rel="stylesheet" type="text/css" href="/web/20221203102836cs_/https://asiakaspalvelu.yle.fi/styles/retina_icons/retina_icons.css?v=09-28-2022_1908"></link><script type="text/javascript" src="/web/20221203102836js_/https://asiakaspalvelu.yle.fi/app_com.jsdbx?c=21"></script><script type="text/javascript" src="/web/20221203102836js_/https://asiakaspalvelu.yle.fi/app_com.aisa.app.jsdbx?c=78"></script><script type="text/javascript" src="/web/20221203102836js_/https://asiakaspalvelu.yle.fi/app_com.aisa.utils.jsdbx?c=3"></script><script type="text/javascript" src="/web/20221203102836js_/https://asiakaspalvelu.yle.fi/app_com.aisa.search.jsdbx?c=12"></script><script type="text/javascript" src="/web/20221203102836js_/https://asiakaspalvelu.yle.fi/app_com.aisa.search_ui_action.jsdbx?c=69"></script><script type="text/javascript" src="/web/20221203102836js_/https://asiakaspalvelu.yle.fi/app_com.aisa.feedback.jsdbx?c=51"></script><script data-description="set sp.dependencies">(function(){ angular.module('sp.dependencies', ["sn.app_common.cxs","sn.app_common.aisa"]); var portal = JSON.parse('{\"sp_rectangle_menu\":\"c8674194c3221200f3897bfaa2d3aec4\",\"sqanda_knowledge_base_dv\":\"Kuluttajapalvelu\",\"sc_category_page_dv\":\"\",\"icon\":\"d4bccda61b4dd5909b28a8afe54bcb0b.iix\",\"sc_catalog\":\"0f910a2ac3112200b12d9f2974d3ae3c\",\"kb_knowledge_page_dv\":\"kb_home\",\"title\":\"Asiakaspalvelu\",\"sc_catalog_page\":\"fe87a11147132100ba13a5554ee490b9\",\"sys_class_name\":\"sp_portal\",\"ts_index_group_dv\":\"\",\"sys_id\":\"2086b814c3221200f3897bfaa2d3aea8\",\"enable_favorites\":false,\"theme_dv\":\"Consumer Service Portal\",\"default\":false,\"sqanda_knowledge_base\":\"2b292926c3302200e7c7d44d81d3ae10\",\"enable_ais\":false,\"homepage_dv\":\"csp_index\",\"notfound_page_dv\":\"404\",\"sc_catalog_dv\":\"Kuluttajapalvelu\",\"logo\":\"fba290291b07d110f3b21022b24bcbbd.iix\",\"sys_name\":\"Customer Service\",\"sp_rectangle_menu_dv\":\"CSP-ylätunnisteen valikko\",\"theme\":\"44c19f0ac313120071d07bfaa2d3ae76\",\"sp_chat_queue\":\"3a40c019c333120071d07bfaa2d3ae17\",\"sys_scope\":\"global\",\"search_results_configuration_dv\":\"\",\"sc_catalog_page_dv\":\"sc_home\",\"hide_portal_name\":false,\"sys_class_name_dv\":\"Palveluportaali\",\"search_application_dv\":\"\",\"quick_start_config\":\"[{\\n\\t\\\"tagline\\\": {\\n\\t\\t\\\"table\\\" : \\\"sp_instance\\\",\\n\\t\\t\\\"sys_id\\\" : \\\"ae17e4ecc3b2120095ccd02422d3ae49\\\",\\n\\t\\t\\\"field\\\" : \\\"title\\\"\\n\\t},\\n\\t\\\"hero_background\\\": {\\n\\t\\t\\\"table\\\" : \\\"sp_container\\\",\\n\\t\\t\\\"sys_id\\\" : \\\"f5d664ecc3b2120095ccd02422d3ae49\\\",\\n\\t\\t\\\"field\\\" : \\\"background_image\\\"\\n\\t},\\n\\t\\\"footerMenu\\\": {\\\"sys_id\\\" : \\\"f01612cf3b643200367aee1234efc48e\\\"},\\n\\t\\\"secondaryMenu\\\": {\\\"sys_id\\\": \\\"53616d1e3b013200367aee1234efc439\\\"},\\n\\t\\\"isCSPPortal\\\": true,\\n\\t\\\"default_interaction_queue\\\": \\\"fdfc02d0738513000f4012562ef6a760\\\"\\n}]\",\"kb_knowledge_page\":\"e1c919e4dbd3220099f93691f0b8f535\",\"sys_tags\":\"\",\"login_page_dv\":\"\",\"sp_chat_queue_dv\":\"Consumer Service\",\"css_variables\":\"$brand-primary:#00b4c8;\\n$body-bg:#fefefe;\\n$state-success-text:#5cb85c;\\n$sp-homepage-bg:#fff;\\n$sp-navbar-divider-color:#455464;\\n$text-color:#717171;\\n$sp-logo-margin-y:.5rem;\\n$navbar-inverse-link-hover-color:#00b4c8;\\n$panel-bg:#fff;\\n$brand-success:#5cb85c;\\n$navbar-inverse-bg:#262a2e;\\n$brand-warning:#f0ad4e;\\n$brand-danger:#cf1d25;\\n$navbar-inverse-link-color:#ffffff;\\n$brand-info:#428bca;\\n$link-color:#00b4c8;\\n$sp-logo-margin-x:1.5rem;\\n$btn-default-bg:#fff;\\n$text-muted:#666666;\\n$sp-tagline-color:#000000;\\r\\n\",\"notfound_page\":\"3c2c9063cb11020000f8d856634c9c1f\",\"kb_knowledge_base_dv\":\"Kuluttajapalvelu\",\"kb_knowledge_base\":\"2b292926c3302200e7c7d44d81d3ae10\",\"url_suffix\":\"csp\",\"homepage\":\"30b664ecc3b2120095ccd02422d3aecb\"}'); angular.module('sp.pageData', []).factory('spPageData', function() { return { getPortal: function () { return portal; } } }); })();</script><script>$(document).ready(function() { if ('ontouchstart' in window || (navigator.maxTouchPoints !== 'undefined' && navigator.maxTouchPoints > 0) || (navigator.msMaxTouchPoints !== 'undefined' && navigator.msMaxTouchPoints > 0)) { $("body").addClass('touch_scroll'); } });</script><style type="text/css">.gsfBackground { border-color: #fff779; font-size: 16; margin-bottom: 5; }</style></head><body class=" windows chrome " ng-class="main.style" ng-cloak="true" ng-controller="spPageCtrl as main" accessibility="false"><div class="sp-page-root page flex-column" ng-class="{'sp-loading': main.firstPage, 'sp-can-animate': main.doAnimate}"><div ng-if="main.firstPage" class="sp-page-loader h4" role="status"> <fa name="spinner" spin="true"></fa> Ladataan...</div><div><sn-banner banner-api-url="bannerApiUrl"></sn-banner></div><header ng-if="theme.header && theme.navbar_fixed"><a class="skip-link sr-only" ng-click="main.focusOnPageTitle(true, $event)" href="javascript:void(0)">Siirry sivun sisältöön</a><sp-announcements></sp-announcements><sp-widget widget="theme.header" page="page"></sp-widget><div ng-if="subheader" ng-repeat="subheader in subheaders" ng-style="main.parseJSON(subheader.background)" ng-class="::[subheader.class_name, 'c' + subheader.sys_id]"><div ng-class="::main.getContainerClasses(subheader)"><sp-page-row ng-repeat="row in ::subheader.rows" columns="::row.columns" row="::row" container="::subheader"></sp-page-row></div></div></header><sp-notifications></sp-notifications><div class="sp-page-loader-mobile visible-xs sp-loading-indicator la-sm" ng-class="{invisible: main.firstPage || !main.loadingIndicator}"><div></div><div></div><div></div></div><section class="flex-grow page sp-scroll" role="presentation" tabindex="-1"><header ng-if="theme.header && !theme.navbar_fixed"><a class="skip-link sr-only" ng-click="main.focusOnPageTitle(true, $event)" href="javascript:void(0)">Siirry sivun sisältöön</a><sp-announcements></sp-announcements><sp-widget widget="theme.header" page="page"></sp-widget><div ng-if="subheader" ng-repeat="subheader in subheaders" ng-style="main.parseJSON(subheader.background)" ng-class="::[subheader.class_name, 'c' + subheader.sys_id]"><div ng-class="::main.getContainerClasses(subheader)"><sp-page-row ng-repeat="row in ::subheader.rows" columns="::row.columns" row="::row" container="::subheader"></sp-page-row></div></div></header><header ng-if="!theme.header"><sp-announcements></sp-announcements></header><main class="body padding-top" data-page-id="{{page.sys_id}}" data-page-title="{{page.title}}"><sp-aria-page-title page-title="page.title"></sp-aria-page-title><div ng-repeat="container in containers" ng-style="main.parseJSON(container.background)" ng-class="::[container.class_name, 'c' + container.sys_id]"><div ng-class="::main.getContainerClasses(container)"><h2 class="sr-only" ng-if="::container.title" ng-bind="::container.title"></h2><sp-page-row ng-repeat="row in ::container.rows track by row.sys_id" columns="::row.columns" row="::row" container="::container"></sp-page-row></div></div></main><footer ng-if="!main.isObjectEmpty(theme.footer) && !theme.footer_fixed"><sp-widget widget="theme.footer"></sp-widget></footer></section><footer ng-if="!main.isObjectEmpty(theme.footer) && theme.footer_fixed"><sp-widget widget="theme.footer"></sp-widget></footer></div><sp-aria-live></sp-aria-live><script id="sp_image_chooser.xml" type="text/ng-template"><div class="sp-image-chooser-div"><input id="imageChooser{{ field.name }}" type="file" style="display: none;" ng-file-select="fileSelect($files, field)"></input><img ng-show="field.value" style="max-height: 200px; max-width: 200px;" ng-src="{{ field.value }}"></img><span ng-show="disabled() && !field.value">Ei kuvaa</span><span ng-show="!disabled()"><a ng-show="!field.value" style="margin: 5px;" class="btn btn-default" ng-click="clickChoose()">Valitse</a><a ng-show="field.value" style="margin: 5px;" class="btn btn-default" ng-click="clickChoose()">Muutos</a><a ng-show="field.value" style="margin: 5px;" class="btn btn-default" ng-click="clickClear()">Poista</a></span></div></script><script id="sp_dialog.xml" type="text/ng-template"><span><div sn-dialog="true" disable-auto-focus="true" name="{{name}}" modal="true" role="dialog" aria-labelledby="dialog-title" context="parms" class="sp-message-dialog {{ dialogClass }}"><div class="sp-message-dialog-title" id="dialog-title"><div class="sp-message-dialog-title-inner">{{title}}</div></div><div class="sp-message-dialog-content "><div class="sp-message-dialog-content-block">{{message}}</div><div class="sp-message-dialog-content-block" ng-if="parms.details">{{parms.details}}</div><div class="sp-message-dialog-content-block" ng-if="question">{{question}}</div><div class="sp-message-dialog-content-block" ng-if="checkboxMessage"><div style="float: left"><input type="checkbox" ng-model="checkboxModel.value" style="box-shadow: none; margin-left: 12px; width: auto; display: block; margin-top:3px; margin-right: 4px;" ng-change="update()"></input></div><div style="float: left">{{checkboxMessage}}</div></div></div><div class="sp-message-dialog-buttons"><button class="btn btn-cancel" title="{{cancel}}" ng-click="parms.cancel()" style="margin-right: 5px !important;" ng-if="cancel">{{cancel}}</button><button class="btn btn-primary" title="{{ok}}" ng-click="parms.ok()" style="margin-left: 5px !important;" ng-if="ok">{{ok}}</button></div></div></span></script><script id="sp_page_row" type="text/ng-template"><div class="sp-row-content {{::row.class_name}} {{(!container.bootstrap_alt) ? 'row' : ''}}"><div ng-repeat="column in columns track by column.sys_id" class="{{::column.class_name}} {{(!container.bootstrap_alt) ? column.size_classes : ''}}"><div ng-repeat="row in column.rows track by row.sys_id" class="repeated-row-container"><sp-page-row columns="row.columns" row="row" container="container"></sp-page-row></div><span ng-repeat="rectangle in column.widgets track by rectangle.instance_id"><sp-widget widget="rectangle.widget"></sp-widget></span></div></div></script><script id="sp_form_field.xml" type="text/ng-template"><div class="form-group" ng-class="{'form-group-has-focus': hasValueOrFocus()}"><div ng-if="::c.showLabel(field)"><label class="field-label" for="sp_formfield_{{::(field.type=='html' || field.type=='translated_html') ? (field.sys_id || field.name) : field.name }}" ng-attr-title="{{::accessible ? undefined : field.hint}}" ng-attr-aria-label="{{::accessible && field.hint ? undefined : getFieldAriaLabel(field)}}"><span class="field-decorations"><span ng-if="field.mandatory" class="fa fa-asterisk mandatory" ng-class="{'mandatory-filled': field.mandatory_filled()}" style="padding-right: .25em" aria-label="{{field.mandatory_filled()? 'Pakollinen täytettynä ' : 'pakollinen '}}" ng-attr-aria-hidden="{{getFieldAriaHidden(field)}}" role="img"></span><span ng-repeat="decoration in field.decorations" class="decoration {{decoration.icon}}" title="{{decoration.text}}"></span></span><span style="padding-right: .25em" ng-attr-title="{{::accessible ? undefined : field.hint}}" data-placement="right" data-toggle="tooltip">{{field.label}}</span></label><span ng-if="::accessible && field.hint" role="button" data-toggle="tooltip" data-placement="right" tabindex="0" class="fa fa-question-circle" title="{{getFieldAriaLabel(field)}}" aria-label="{{getFieldAriaLabel(field)}}"></span><span><sp-help-tag field="::field"></sp-help-tag></span></div><span class="type-{{::field.type}} field-actual" ng-switch="::field.type" ng-class="{'state-mandatory': field.mandatory, 'state-readonly': field.read_only, 'state-hidden': field.hidden, 'has-error': field.isInvalid}"><span ng-switch-when="boolean"><label title="{{::field.hint}}" data-placement="right" data-toggle="tooltip"><input style="margin-right: 1em;" type="checkbox" name="{{::field.name}}" ng-model="fieldValue" ng-true-value="'true'" ng-false-value="'false'" ng-model-options="{getterSetter: true}" ng-disabled="field.isReadonly()" id="sp_formfield_{{::field.name}}" aria-required="{{field.isMandatory()}}"></input><span ng-if="field.mandatory && field._class_name !== 'CheckBoxQuestion'" class="fa fa-asterisk mandatory" ng-class="{'mandatory-filled': field.mandatory_filled()}" title="pakollinen" style="padding-right: .25em" aria-hidden="true"></span><span>{{field.label}}<span ng-if="::enhancePriceLabels(field)" class="inline">{{getCheckBoxPrice(field)}}</span></span></label><span class="sr-only">{{::field.hint}}</span></span><sp-choice-list ng-switch-when="choice" field="field" glide-form="getGlideForm()" default-value-setter="setDefaultValue(fieldName,fieldInternalValue,fieldDisplayValue)" sn-options="{placeholder: field.placeholder}"></sp-choice-list><span ng-switch-when="boolean_confirm"><span class="fa fa-asterisk mandatory" ng-class="{'mandatory-filled': field.mandatory_filled()}" title="pakollinen" style="padding-right: .25em"></span><label title="{{::field.hint}}" data-placement="right" data-toggle="tooltip" for="sp_formfield_{{::field.name}}"><input type="checkbox" name="{{::field.name}}" ng-model="fieldValue" ng-true-value="'true'" ng-false-value="'false'" ng-model-options="{getterSetter: true}" ng-disabled="field.isReadonly()" id="sp_formfield_{{::field.name}}"></input><span style="margin-left: 1em;"><span class="sr-only" ng-show="!field.mandatory_filled()">pakollinen -</span><span class="sr-only" ng-show="field.mandatory_filled()">Pakollinen täytettynä -</span>{{field.label}}</span></label><span class="sr-only">{{::field.hint}}</span><span ng-if="::field._pricing">{{getCheckBoxPrice(field)}}</span></span><sp-color-picker ng-switch-when="color" field="field" glide-form="getGlideForm()" sn-change="fieldValue(newValue)" sn-disabled="field.isReadonly()" ng-if="c.depsLoaded"></sp-color-picker><sp-css-editor ng-switch-when="css" class="form-control" field="field" id="sp_formfield_{{::field.name}}" data-length="4000" sn-disabled="field.isReadonly()" sn-change="stagedValueChange()" sn-blur="fieldValue(field.stagedValue)" glide-form="getGlideForm()" ng-if="c.depsLoaded"></sp-css-editor><span ng-switch-when="currency2|document_id|domain_id|schedule_date_time|integer_date" class="padder" ng-switch-when-separator="|">{{field.displayValue}}</span><sp-duration-element ng-switch-when="glide_duration" field="field" ng-model="fieldValue" ng-model-options="{getterSetter: true}"></sp-duration-element><sp-url-element ng-switch-when="url" name="{{::field.name}}" field="field"></sp-url-element><sn-field-reference ng-switch-when="field_name" field="field" id="sp_formfield_{{::field.name}}" glide-form="getGlideForm()" sn-change="fieldValue(newValue)" sn-disabled="field.isReadonly()"></sn-field-reference><sn-field-list-element ng-switch-when="field_list" field="field" glide-form="getGlideForm()" sn-disabled="field.isReadonly()" sn-change="fieldValue(newValue, displayValue)"></sn-field-list-element><sp-date-picker sn-change="fieldValue(newValue, displayValue)" ng-switch-when="glide_date" field="field" sn-disabled="field.isReadonly()" ng-model="field.stagedValue" ng-model-options="{getterSetter: true}" ng-if="c.depsLoaded"></sp-date-picker><sp-date-picker sn-change="fieldValue(newValue, displayValue)" ng-switch-when="glide_date_time" field="field" sn-disabled="field.isReadonly()" ng-model="field.stagedValue" ng-model-options="{getterSetter: true}" sn-include-time="true" ng-if="c.depsLoaded"></sp-date-picker><sp-reference-element ng-switch-when="glide_list" field="field" sn-select-width="100%" ref-table="::formModel.table" ref-id="formModel.sys_id" glide-form="getGlideForm()" record-values="getEncodedRecordValues()" sn-options="{multiple: true, placeholder: field.placeholder}" sn-disabled="field.isReadonly()"></sp-reference-element><sp-glyph-picker ng-switch-when="glyphicon" field="field" sn-disabled="field.isReadonly()"></sp-glyph-picker><sp-html-editor ng-switch-when="xml" field="field" id="sp_formfield_{{::field.name}}" class="form-control" data-length="4000" sn-disabled="field.isReadonly()" sn-change="stagedValueChange()" sn-blur="fieldValue(field.stagedValue)" glide-form="getGlideForm()" ng-if="c.depsLoaded"></sp-html-editor><sp-html-editor ng-switch-when="html_template" class="form-control" field="field" id="sp_formfield_{{::field.name}}" data-length="4000" sn-disabled="field.isReadonly()" sn-change="stagedValueChange()" sn-blur="fieldValue(field.stagedValue)" glide-form="getGlideForm()" ng-if="c.depsLoaded"></sp-html-editor><sp-script-editor ng-switch-when="json" class="form-control" field="field" id="sp_formfield_{{::field.name}}" data-length="4000" sn-disabled="field.isReadonly()" sn-change="stagedValueChange()" sn-blur="fieldValue(field.stagedValue)" glide-form="getGlideForm()" ng-if="c.depsLoaded"></sp-script-editor><sp-mask-element ng-switch-when="masked" field="field" placeholder="field.placeholder" sn-disabled="field.isReadonly()" sn-change="stagedValueChange()" glide-form="getGlideForm()"></sp-mask-element><sp-radio-option ng-switch-when="multiple_choice" glide-form="getGlideForm()" field="field" cat-item-sys-id="formModel.sys_id"></sp-radio-option><sp-textarea ng-switch-when="multi_two_lines" field="field" name="{{::field.name}}" id="sp_formfield_{{::field.name}}" autocomplete="{{getAutocompleteValue()}}" class="form-control" ng-model="field.stagedValue" ng-change="stagedValueChange()" data-type="{{::field.type}}" ng-readonly="field.isReadonly()" aria-invalid="{{field.isInvalid || false}}" glide-form="getGlideForm()"></sp-textarea><sp-textarea ng-switch-when="multi_small" field="field" name="{{::field.name}}" id="sp_formfield_{{::field.name}}" autocomplete="{{getAutocompleteValue()}}" class="form-control multi-small" ng-model="field.stagedValue" ng-change="stagedValueChange()" data-type="{{::field.type}}" ng-readonly="field.isReadonly()" aria-invalid="{{field.isInvalid || false}}" glide-form="getGlideForm()"></sp-textarea><fieldset ng-switch-when="numericscale" class="radio m-t-none" id="sp_formfield_{{::field.name}}" role="radiogroup" aria-labelledby="sp_radio_down_label_{{::field.name}}"><legend class="sr-only" id="sp_radio_down_label_{{::field.name}}"><span ng-show="field.isMandatory() && !field.mandatory_filled()">pakollinen -</span><span ng-show="field.isMandatory() && field.mandatory_filled()">Pakollinen täytettynä -</span>{{::field.label}}</legend><label ng-repeat="c in field.choices"><input type="radio" value="{{c.value}}" ng-model="fieldValue" ng-model-options="{getterSetter: true}" ng-checked="field.value == c.value" ng-disabled="field.isReadonly()" role="radio" aria-checked="{{field.value == c.value}}" name="{{::field.name}}" aria-label="{{c.label}}" ng-attr-tabindex="{{field.value == c.value ? '0': '-1'}}"></input><span style="margin-right: 1rem;">{{c.label}}</span></label></fieldset><sp-currency-element ng-switch-when="price" field="field" sn-disabled="field.isReadonly()" sn-change="stagedValueChange()" sn-blur="fieldValue(field.stagedValue)" glide-form="getGlideForm()"></sp-currency-element><sp-currency-element ng-switch-when="currency" field="field" sn-disabled="field.isReadonly()" sn-change="stagedValueChange()" sn-blur="fieldValue(field.stagedValue)" glide-form="getGlideForm()"></sp-currency-element><input ng-switch-when="password" type="password" name="{{::field.name}}" id="sp_formfield_{{::field.name}}" autocomplete="off" class="form-control" ng-model="field.stagedValue" ng-change="stagedValueChange()" ng-disabled="field.isReadonly()"></input><input ng-switch-when="password2" type="password" name="{{::field.name}}" id="sp_formfield_{{::field.name}}" autocomplete="off" class="form-control" ng-model="field.stagedValue" ng-change="stagedValueChange()" ng-disabled="field.isReadonly()"></input><sp-code-mirror ng-switch-when="properties" class="form-control" mode="properties" field="field" id="sp_formfield_{{::field.name}}" data-length="4000" sn-disabled="field.isReadonly()" sn-change="stagedValueChange()" sn-blur="fieldValue(field.stagedValue)" glide-form="getGlideForm()" ng-if="c.depsLoaded"></sp-code-mirror><sp-reference-field ng-switch-when="reference" id="sp_formfield_reference_{{::field.name}}" tabindex="-1" ng-class="{'field-has-reference': field.value != '', 'field-empty-reference': field.value == ''}"></sp-reference-field><sp-script-editor ng-switch-when="script_server" class="form-control" field="field" id="sp_formfield_{{::field.name}}" data-length="4000" sn-disabled="field.isReadonly()" sn-change="stagedValueChange()" sn-blur="fieldValue(field.stagedValue)" glide-form="getGlideForm()" ng-if="c.depsLoaded"></sp-script-editor><sp-script-editor ng-switch-when="script" class="form-control" field="field" id="sp_formfield_{{::field.name}}" data-length="4000" sn-disabled="field.isReadonly()" sn-change="stagedValueChange()" sn-blur="fieldValue(field.stagedValue)" glide-form="getGlideForm()" ng-if="c.depsLoaded"></sp-script-editor><sn-table-reference ng-switch-when="table_name" field="field" sn-change="fieldValue(newValue)" sn-disabled="field.isReadonly()"></sn-table-reference><sp-textarea ng-switch-when="textarea" field="field" name="{{::field.name}}" id="sp_formfield_{{::field.name}}" class="form-control" ng-model="field.stagedValue" ng-change="stagedValueChange()" data-type="{{::field.type}}" ng-readonly="field.isReadonly()" autocomplete="{{getAutocompleteValue()}}" aria-invalid="{{field.isInvalid || false}}" glide-form="getGlideForm()"></sp-textarea><sp-tinymce-editor ng-switch-when="html" id="sp_formfield_{{::field.name}}" ng-attr-tabindex="{{field.isReadonly() ? undefined : '-1'}}" name="{{::field.name}}" text-id="sp_formfield_{{::field.sys_id || field.name}}" ng-model="field.stagedValue" ng-model-options="{getterSetter: true}" sn-blur="fieldValue(field.stagedValue)" field="field" glide-form="getGlideForm()" ng-change="stagedValueChange()" attachment-guid="c.getAttachmentGuid()"></sp-tinymce-editor><sp-tinymce-editor ng-switch-when="translated_html" id="sp_formfield_{{::field.name}}" ng-attr-tabindex="{{field.isReadonly() ? undefined : '-1'}}" name="{{::field.name}}" text-id="sp_formfield_{{::field.sys_id || field.name}}" ng-model="field.stagedValue" sn-blur="fieldValue(field.stagedValue)" ng-model-options="{getterSetter: true}" field="field" glide-form="getGlideForm()" ng-change="stagedValueChange()" attachment-guid="c.getAttachmentGuid()"></sp-tinymce-editor><span ng-switch-when="user_image"><img ng-if="field.displayValue" ng-src="{{field.displayValue}}" style="max-height: 128px; max-width: 128px;"></img><sn-image-uploader ng-if="!field.isReadonly()" table-name="{{formModel.table}}" sys-id="{{formModel._attachmentGUID || formModel.sys_id}}" field-name="{{::field.name}}" read-only="field.isReadonly()" on-upload="onImageUpload(thumbnail, sys_id)" on-delete="onImageDelete()" upload-message="{{field.isMandatory() && !field.mandatory_filled() ? 'Required -' : ''}} Lataa kuva" src="field.displayValue"></sn-image-uploader></span><sp-widget ng-switch-when="widget" widget="field.widget" page="{g_form: getGlideForm(), field: field, fieldValue: fieldValue}"></sp-widget><sp-widget ng-switch-when="widget_value" widget="field.widget" page="{g_form: getGlideForm(), field: field, fieldValue: fieldValue}"></sp-widget><span ng-switch-when="integer"><input name="{{::field.name}}" id="sp_formfield_{{::field.name}}" class="form-control" ng-readonly="field.isReadonly()" ng-model="field.stagedValue" ng-change="stagedValueChange()" ng-blur="formatNumber()" autocomplete="{{getAutocompleteValue()}}" ng-attr-placeholder="{{field.placeholder}}"></input></span><span ng-switch-when="decimal|float" ng-switch-when-separator="|"><input name="{{::field.name}}" id="sp_formfield_{{::field.name}}" class="form-control" ng-readonly="field.isReadonly()" ng-model="field.stagedValue" ng-change="stagedValueChange()" ng-blur="formatNumber()" autocomplete="{{getAutocompleteValue()}}"></input></span><sp-catalog-variable ng-if="field._cat_variable" ng-switch-when="sc_multi_row"></sp-catalog-variable><sp-email-element ng-switch-when="email" field="field" glide-form="getGlideForm()"></sp-email-element><sp-rich-text-label ng-switch-when="rich_text_label" field="field"></sp-rich-text-label><sp-variable-attachment ng-switch-when="sc_attachment" field="field" attachment-guid="formModel._attachmentGUID || formModel.sys_id" g-form="getGlideForm()"></sp-variable-attachment><span ng-switch-default="true"><input sp-ignore-composition="" ng-if="::!field.max_length || 256 > field.max_length || field._force_single_line" name="{{::field.name}}" id="sp_formfield_{{::field.name}}" class="form-control" maxlength="{{::field.max_length}}" data-type="{{::field.type}}" ng-model="field.stagedValue" ng-model-options="{allowInvalid: true}" ng-change="stagedValueChange()" autocomplete="{{getAutocompleteValue()}}" ng-readonly="field.isReadonly()" ng-attr-placeholder="{{field.placeholder}}" type="text" aria-required="{{field.isMandatory()}}" aria-invalid="{{field.isInvalid || false}}"></input><sp-textarea ng-if="::field.max_length >= 256 && !field._force_single_line" field="field" name="{{::field.name}}" id="sp_formfield_{{::field.name}}" class="form-control" data-type="{{::field.type}}" ng-model="field.stagedValue" ng-model-options="{allowInvalid: true}" ng-change="stagedValueChange()" autocomplete="{{getAutocompleteValue()}}" ng-readonly="field.isReadonly()" aria-invalid="{{field.isInvalid || false}}" glide-form="getGlideForm()"></sp-textarea></span></span><div ng-show="field.messages" id="sp_formfield_{{::field.name}}_fieldmsgs_container"><div ng-repeat="message in field.messages | unique: 'message'" class="wrapper-xs r m-t-xs" ng-class="{'bg-danger': message.type == 'error', 'bg-warning': message.type == 'warning', 'bg-info': message.type == 'info'}">{{message.message}}</div></div></div></script><script id="sp_reference_field.xml" type="text/ng-template"><span class="ref-picker-container"><div class="add-on" ng-if="field.value != ''"><button type="button" class="btn btn-default bg-white lookup" ng-click="openReference(field, formModel.view)" ng-disabled="field.isReadonly() && !field.readonlyClickthrough" data-original-title="Esikatsele tietue {{field.displayValue}}" data-toggle="tooltip" data-placement="top" aria-label="Esikatsele tietue {{field.displayValue}}"><span class="fa fa-info-circle"></span></button></div><div class="reference"><sp-reference-element field="field" sn-select-width="100%" ref-table="formModel.table" ref-id="formModel.sys_id" glide-form="getGlideForm()" sn-options="{placeholder: field.placeholder}" record-values="getEncodedRecordValues()" sn-disabled="field.isReadonly()" label-id="sp_reference_element_sr_{{::field.name}}"></sp-reference-element></div></span></script><script id="sp_model.xml" type="text/ng-template"><div><sp-variable-layout ng-if="!delayView" ng-attr-id="{{::formModel.table}}.do"></sp-variable-layout><div ng-init="execItemScripts()"></div></div></script><script id="sp_editable_field.xml" type="text/ng-template"><span><small ng-if="block && fieldModel.displayValue" class="text-muted">{{fieldModel.label}}</small><span class="sp-editable-field" ng-style="blockDisplay" ng-class="{'editable-underline': editable}"><span ng-if="editable" ng-class="{'text-muted': !fieldModel.displayValue}" uib-popover-template="'sp_editable_popover.xml'" popover-placement="auto bottom" popover-is-open="shadowModel.popoverIsOpen" ng-click="toggleClick($event);" ng-keydown="toggleKeydown($event);" class="show-text bs-popover editable-text popover-trigger-{{::fieldID}}" aria-label="{{fieldModel.label}} - {{fieldModel.displayValue || '(Tyhjä)'}} - Muokkaa painamalla Enter-näppäintä" aria-haspopup="dialog" aria-expanded="false" tabindex="0"><span ng-switch="fieldModel.type"><span ng-switch-when="user_image"><img ng-if="fieldModel.displayValue !=''" ng-src="{{fieldModel.displayValue}}"></img><span ng-if="fieldModel.displayValue ==''">Lataa kuva</span></span><span ng-switch-default="true"><span ng-if="!block" id="field-{{::fieldID}}">{{fieldModel.displayValue || "(Tyhjä)"}}</span><span ng-if="block" id="field-{{::fieldID}}">{{fieldModel.displayValue || fieldModel.label}}</span></span></span></span><span ng-if="!editable" class="show-text" ng-switch="fieldModel.type"><span ng-switch-when="user_image"><img ng-if="fieldModel.displayValue !=''" ng-src="{{fieldModel.displayValue}}"></img><span ng-if="fieldModel.displayValue ==''">Lataa kuva</span></span><span ng-switch-default="true">{{fieldModel.displayValue}}</span></span></span></span></script><script id="sp_editable_field2.xml" type="text/ng-template"><form ng-submit="saveForm();"><sp-form-field form-model="fieldModel" field="fieldModel" glide-form="getGlideForm()"></sp-form-field></form></script><script id="sp_editable_popover.xml" type="text/ng-template"><div class="popover-content-body popover-{{::fieldID}}"><h3 class="popover-title" ng-bind="title" ng-show="title"></h3><div class="popover-content"><form id="editableSaveForm" ng-submit="saveForm();"><sp-form-field form-model="shadowModel" field="shadowModel" glide-form="getGlideForm()"></sp-form-field></form></div><div class="popover-footer pull-right"><button ng-click="closePopover()" type="button" class="m-b-xs m-r-xs btn btn-default">Peruuta</button><button ng-click="saveForm()" type="button" class="m-b-xs m-r-xs btn btn-primary">Tallenna</button></div></div></script><script id="sp_element_duration.xml" type="text/ng-template"><div class="form-inline"><now-message key="days" value="päivä(ä)"></now-message><now-message key="hours" value="tunti(a)"></now-message><now-message key="minutes" value="minuutti(a)"></now-message><now-message key="seconds" value="sekunti(a)"></now-message><fieldset class="form-group" id="sp_formfield_{{::field.name}}" tabindex="-1" role="group"><legend ng-attr-title="{{::$parent.accessible ? undefined : field.hint}}" ng-attr-aria-label="{{::$parent.accessible && field.hint ? undefined : getFieldAriaLabel(field)}}"><span class="field-decorations"><span ng-show="field.isMandatory()" class="fa fa-asterisk mandatory" ng-class="{'mandatory-filled': field.mandatory_filled()}" style="padding-right: .25em" aria-label="{{field.mandatory_filled()? 'Pakollinen täytettynä ' : 'pakollinen '}}" role="img"></span><span ng-repeat="decoration in field.decorations" class="decoration {{decoration.icon}}" title="{{decoration.text}}"></span></span><span style="padding-right: .25em" ng-attr-title="{{::$parent.accessible ? undefined : field.hint}}" data-placement="right" data-toggle="tooltip">{{field.label}}</span><span ng-if="::$parent.accessible && field.hint" role="button" data-toggle="tooltip" data-placement="right" tabindex="0" class="fa fa-question-circle" title="{{getFieldAriaLabel(field)}}" aria-label="{{getFieldAriaLabel(field)}}"></span><sp-help-tag field="field"></sp-help-tag></legend><div ng-repeat="unit in visibleUnits" class="input-group input-group-sm col-xs-{{12 / visibleUnits.length}} duration"><label ng-if="showLabel(unit)" class="input-group-addon text-capitalize" for="dur-{{unit}}-{{::field.name}}" sn-bind-i18n="{{unit}}"></label><input type="text" class="form-control" id="dur-{{unit}}-{{::field.name}}" ng-model="parts[unit]" ng-disabled="field.isReadonly()" ng-change="updateDuration()" title="{{unit.charAt(0).toUpperCase() + unit.slice(1)}}"></input></div></fieldset></div></script><script id="sp_element_currency.xml" type="text/ng-template"><div class="input-group"><span class="input-group-addon input-group-select"><span style="position: relative; display: inline-block;"><select class="form-control currency-element" ng-model="field.currencyCode" ng-options="c.code as c.symbol for c in field.currencyCodes" ng-disabled="field.isReadonly() || field.currencyCodes.length == 1" ng-change="formatValue(true)" aria-label="Valuutta"></select><i ng-if="field.currencyCodes.length > 1" aria-hidden="true" class="select-indicator fa fa-chevron-down"></i></span></span><input name="{{::field.name}}" id="sp_formfield_{{::field.name}}" class="form-control decimal" maxlength="14" data-type="{{::field.type}}" ng-model="field.currencyValue" ng-model-options="{allowInvalid: true}" ng-change="formatValue()" autocomplete="off" ng-readonly="field.isReadonly()"></input></div></script><script id="sp_element_email.xml" type="text/ng-template"><span class="ng-form-element"><span class="input-group" role="presentation"><input name="{{::field.name}}" id="sp_formfield_{{::field.name}}" aria-label="{{::field.label}}" autocomplete="{{getAutocompleteValue()}}" class="form-control" ng-model="field.stagedValue" ng-model-options="{allowInvalid: true}" type="email" ng-change="stagedValueChange()" ng-disabled="field.isReadonly()" placeholder="{{field.placeholder}}" maxlength="{{::field.max_length}}" data-type="email" aria-required="{{field.isMandatory()}}" aria-invalid="{{field.isInvalid || false}}"></input><span class="input-group-btn"><a ng-href="{{field.stagedValue && !field.isReadonly() ? ('mailto:' + field.stagedValue) : '#'}}" ng-class="{disabled: field.isReadonly()}" class="btn-ref btn btn-default" ng-attr-tabindex="{{field.isReadonly() ? '-1' : undefined}}" title="Lähetä sähköpostiviesti tähän osoitteeseen" data-toggle="{{field.isReadonly() ? '' : 'tooltip'}}" data-placement="{{field.isReadonly() ? '' : 'top'}}" aria-label="Lähetä sähköpostiviesti tähän osoitteeseen" aria-disabled="{{field.isReadonly()}}"><i class="fa fa-envelope-o" aria-hidden="true"></i></a></span></span></span></script><script id="sp_element_mask.xml" type="text/ng-template"><span class="ng-form-element" ng-class="{'has-error' : field.isInvalid}"><span ng-if="field.catalog_view_masked"><input name="{{::field.name}}" id="sp_formfield_{{::field.name}}" ng-attr-type="{{inputType}}" autocomplete="off" class="form-control masked-element" ng-model="field.stagedValue" ng-model-options="{getterSetter: true}" ng-blur="handleValueChanged()" ng-disabled="disabled" aria-required="{{field.mandatory}}" aria-invalid="{{field.isInvalid || false}}" placeholder="{{placeholder}}" maxlength="{{::field.max_length}}"></input><button ng-if="field.stagedValue.length" ng-click="c.togglePassword()" class="btn sp-show-hide-masked-button btn-link" title="Näytä tai piilota tämä arvo">{{toggleShowHide}}</button></span><span ng-if="!field.catalog_view_masked"><input name="{{::field.name}}" id="sp_formfield_{{::field.name}}" ng-attr-type="{{inputType}}" autocomplete="off" class="form-control" ng-model="field.stagedValue" ng-model-options="{getterSetter: true}" ng-blur="c.validate()" ng-disabled="disabled" ng-keydown="c.cleanData()" aria-required="{{field.mandatory}}" aria-invalid="{{field.isInvalid || false}}" placeholder="{{placeholder}}" maxlength="{{::field.max_length}}"></input></span><span ng-if="field.useConfirmation"><label class="field-label" for="sp_formfield_confirm.{{::field.name}}">{{reEnter}}</label><input name="sp_formfield_confirm.{{::field.name}}" id="sp_formfield_confirm.{{::field.name}}" type="password" autocomplete="off" class="form-control" ng-disabled="disabled" ng-blur="c.validate()" ng-keydown="c.cleanData()" ng-model="field.confirmPassword" ng-model-options="{getterSetter: true}" aria-invalid="{{field.isInvalid || false}}" placeholder="{{placeholder}}" maxlength="{{::field.max_length}}" aria-label="{{::reEnter}}" aria-describedby="confirmation-error.{{::field.name}}"></input><span id="confirmation-error.{{::field.name}}" ng-if="field.isInvalid" class="sp-date-format-info" style="display:table-row;" role="alert">{{misMatch}}</span></span></span></script><script id="sp_catalog_variable.xml" type="text/ng-template"><div><sp-sc-multi-row-element ng-if="field.type == spSCConf.MULTI_ROW_TYPE" field="field" glide-form="getGlideForm()" native="::formModel.native_mobile" parent-fields="::formModel._fields"></sp-sc-multi-row-element></div></script><script id="sp_element_sc_multi_row.xml" type="text/ng-template"><div class="wrapper-md r-2x" ng-if="field.columns_meta.length > 0" ng-class="{'b': !c.isMEE}"><sp-widget widget="c.activeRow" ng-if="c.activeRow"></sp-widget><div ng-if="!field.readonly && !field.sys_readonly" ng-class="{'m-l m-b ': c.isMEE, 'form-group': !c.isMEE}" style="min-height:0px;"><button type="button" title="{{::field.max_row_tooltip_msg}}" class="btn btn-primary m-r" ng-click="c.createRow()" ng-disabled="!c.canInsert()" id="{{::field.sys_id}}_add_row" aria-label="{{c.addButtonAriaLabel}}">Lisää</button><button type="button" class="btn btn-default" ng-click="c.clearValue()" ng-disabled="!c.canClearValue()">Poista kaikki</button></div><div style="overflow-x: auto;"><table class="table table-bordered table-striped" ng-class="{'m-b': c.isMEE, 'm-b-xs': !c.isMEE}" aria-describedby="id-caption-mrvs"><caption id="id-caption-mrvs" class="sr-only">{{::field.label}}</caption><thead><tr><th id="id-actions" scope="col" ng-if="!field.readonly && !field.sys_readonly" class="text-nowrap">Toiminnot</th><th id="id-question-{{::col.id}}" scope="col" ng-repeat="col in ::field.columns_meta track by col.id" class="text-nowrap">{{::col.label}}</th></tr></thead><tbody><tr ng-if="field._value.length == 0 "><td ng-if="!field._loadingData" class="text-center" colspan="{{::field.columns_meta.length + 1}}">Näytettäviä tietoja ei ole</td></tr><tr ng-if="field._loadingData"><td class="text-center" ng-if="field._value.length == 0" colspan="{{::field.columns_meta.length + 1}}"><i class="fa fa-spinner fa-pulse fa-3x fa-fw" aria-hidden="true" title="Arvon päivittäminen"></i><span class="sr-only">Arvon päivittäminen</span></td></tr><tr ng-repeat="row_display_value in field._displayValue track by $index" ng-animate="{enter: 'animate-enter', leave: 'animate-leave'}" style="word-break: keep-all;"><td headers="id-actions" ng-if="!field.readonly && !field.sys_readonly" ng-class="{ 'actions-mobile': {{ c.isMEE }} }"><a href="javascript:void(0);" class="wrapper-xs fa fa-pencil" role="button" data-original-title="Muokkaa riviä" aria-label="Muokkaa riviä" data-toggle="tooltip" data-placement="body" ng-click="c.updateRow($index)"></a><a href="javascript:void(0);" class="wrapper-xs fa fa-close" role="button" data-original-title="Poista rivi" aria-label="Poista rivi" data-toggle="tooltip" data-placement="body" ng-click="c.deleteRow($index)" id="remove-row-{{$index}}"></a></td><td headers="id-question-{{::col.id}}" ng-repeat="col in ::field.columns_meta track by col.id" style="text-overflow: ellipsis;">{{c.getCellDisplayValue(row_display_value[col.name], col.type)}}</td></tr></tbody></table></div></div></script><script id="sp_element_sc_request_for.xml" type="text/ng-template"><div class="form-group"><label class="field-label" for="sp_formfield_requested_for_{{::field.name}}" title="{{::field.hint}}" aria-label="{{field.hint + ' '+ getReferenceLabelContents(field)}} " tooltip-right="true"><span class="field-decorations"><span ng-show="field.mandatory" class="fa fa-asterisk mandatory" ng-class="{'mandatory-filled': field.mandatory_filled()}" title="pakollinen" style="padding-right: .25em" aria-label="{{field.mandatory_filled()? 'Pakollinen täytettynä' : 'pakollinen'}}" role="img"></span><span ng-repeat="decoration in field.decorations" class="decoration {{decoration.icon}}" title="{{decoration.text}}"></span></span>{{field.label}}</label><span class="type-{{::field.type}} field-actual" ng-class="{'state-mandatory': field.mandatory, 'state-readonly': field.read_only, 'state-hidden': field.hidden, 'has-error': field.isInvalid}"><sp-help-tag field="::field"></sp-help-tag><div ng-class="{'input-group input-group-': alsoRequestForEnabled()}"><sp-reference-field id="sp_formfield_reference_{{::field.name}}" tabindex="-1" ng-class="{'field-has-reference': field.value != '', 'field-empty-reference': field.value == ''}"></sp-reference-field><div ng-if="alsoRequestForEnabled()" class="input-group-btn"><button type="button" class="btn btn-default bg-white lookup" id="also_request_for_button" ng-click="toggleUserSelect()" ng-disabled="disabled" title="Pyydä useille käyttäjille" aria-expanded="{{actions.isAlsoRequestForExpanded}}"><span class="fa fa-users" ng-class="{'text-primary': showList}"></span><span class="sr-only">Pyydä useille käyttäjille</span></button></div></div></span><div ng-show="field.messages"><div ng-repeat="message in field.messages | unique: 'message'" class="wrapper-xs r m-t-xs" ng-class="{'bg-danger': message.type == 'error', 'bg-warning': message.type == 'warning', 'bg-info': message.type == 'info'}">{{message.message}}</div></div><div ng-if="alsoRequestForEnabled()" ng-show="showAlsoRequestFor" style="margin-top:15px"><label class="field-label" for="sp_formfield_sn_sc_also_request_for">{{::sn_sc_also_request_for.label}}</label><div ng-if="showLess" style="margin-left:5px">{{sn_sc_also_request_for.display_value_list.join(", ")}}</div><span ng-show="showList"><sn-sc-also-request-for sn-select-width="100%" field="sn_sc_also_request_for" glide-form="getGlideForm()" sn-options="{placeholder: sn_sc_also_request_for.placeholder}" requested-for="field.value"></sn-sc-also-request-for></span><div ng-show="sn_sc_also_request_for.validationMessages"><div ng-repeat="message in sn_sc_also_request_for.validationMessages | unique: 'message'" class="wrapper-xs r m-t-xs" ng-class="{'bg-danger': message.type == 'error', 'bg-warning': message.type == 'warning', 'bg-info': message.type == 'info'}">{{message.message}}</div></div></div></div></script><script id="sp_element_radio_down.xml" type="text/ng-template"><fieldset id="sp_formfield_{{::field.name}}" aria-labelledby="sp_radio_down_label_{{::field.name}}" class="radio m-t-none"><legend class="sr-only" id="sp_radio_down_label_{{::field.name}}"><span ng-show="field.isMandatory() && !field.mandatory_filled()">pakollinen -</span><span ng-show="field.isMandatory() && field.mandatory_filled()">Pakollinen täytettynä -</span>{{::field.label}}</legend><div role="radiogroup"><div ng-repeat="c in field.choices" class="block"><label><input aria-checked="{{ field.value === c.value }}" ng-value="c.value" ng-model="fieldValue" ng-model-options="{getterSetter: true}" ng-disabled="field.isReadonly()" ng-init="onButtonLoad()" name="radio_button_down_{{field.sys_id}}_{{catItemSysId}}" type="radio"></input><span style="margin-left: 1em;">{{c.label}}<div ng-if="c.priceLabel && field.value != c.value" class="inline">{{c.priceLabel}}</div></span></label></div></div></fieldset></script><script id="sp_element_radio_across.xml" type="text/ng-template"><fieldset class="radio m-t-none" id="sp_formfield_{{::field.name}}" aria-labelledby="sp_radio_across_label_{{::field.name}}"><legend class="sr-only" id="sp_radio_across_label_{{::field.name}}"><span ng-show="field.isMandatory() && !field.mandatory_filled()">pakollinen -</span><span ng-show="field.isMandatory() && field.mandatory_filled()">Pakollinen täytettynä -</span>{{::field.label}}</legend><div role="radiogroup"><label ng-repeat="c in field.choices"><input aria-checked="{{ field.value == c.value ? true : false}}" ng-value="c.value" ng-model="fieldValue" ng-model-options="{getterSetter: true}" ng-disabled="field.isReadonly()" role="radio" type="radio" name="radio_button_across_{{field.sys_id}}_{{catItemSysId}}" ng-init="onButtonLoad()"></input><span style="margin-right: 1rem;">{{c.label}}<div ng-if="c.priceLabel && field.value != c.value" class="inline">{{c.priceLabel}}</div></span></label></div></fieldset></script><script id="angular.do?sysparm_type=get_partial&name=directive.snImageUploader" type="text/ng-template"><div class="sn-component sn-component-image-upload"><input ng-show="false" type="file" ng-file-select="onFileSelect($files)"></input><div ng-file-drop="onFileSelect($files)" ng-file-drag-over-class="sn-dragover" title="{{getTitle()}}" style="margin-top: .5em;" aria-hidden="true"><div style="position:relative; display: inline-block;"><div ng-if="!uploading" ng-click="openFileSelector($event)" style="cursor: pointer; margin-bottom: .25em; margin-right: 0.25em; display: inline-block;"><button class="btn btn-primary"><sn-glyph char="upload"></sn-glyph><small>{{uploadMessage}}</small></button></div><span class="upload-container" ng-click="activateUpload($event)" ng-if="!uploading" ng-transclude="" role="presentation" tabindex="-1"></span></div><div ng-if="uploading" style="position:relative; display: inline-block;"><button class="btn btn-default"><sn-glyph char="refresh"></sn-glyph><small>Lataaminen</small></button></div><div ng-if="src" ng-click="deleteAttachment()" style="cursor: pointer; display: inline-block;" title="Poista tämä kuva heti"><button class="btn btn-default"><sn-glyph char="remove"></sn-glyph><small>Poista</small></button></div></div></div></script><script id="angular.do?sysparm_type=get_partial&name=sp_attachment" type="text/ng-template"><div class="sp-attachment-block file-attachment" id="{{attachment.sys_id}}"><a ng-if="attachment.viewImage && attachment.thumbSrc && attachment.state === 'available'" class="view-attachment thumbnail" style="border: none;" ng-click="attachmentHandler.viewAttachment($event, attachment)" href="javascript:void(0)" aria-label="Näytä liite {{::attachment.file_name}}"><img alt="{{::attachment.file_name}}" class="attachment-thumbnail" ng-src="{{attachment.thumbSrc}}"></img></a><img ng-if="((!attachment.viewImage || attachment.state !== 'available' ) && attachment.thumbSrc )" style="border: none; margin-left: auto; margin-right: auto;" alt="{{::attachment.file_name}}" class="img-responsive" ng-src="{{attachment.thumbSrc}}"></img><div class="file-name"><a ng-if="attachment.state === 'available'" class="get-attachment" ng-click="attachmentHandler.downloadAttachment(attachment)" ng-attr-title="Lataa {{attachment.file_name}}" href="javascript:void(0)">{{::attachment.file_name}} ({{::attachment.size}})</a><a ng-if="attachment.state === '' || attachment.state === 'pending' || attachment.state === 'available_conditionally'" class="get-attachment" ng-click="attachmentHandler.scanAttachment(attachment)" ng-attr-title="Lataa {{attachment.file_name}}" href="javascript:void(0)">{{::attachment.file_name}} ({{::attachment.size}})</a><span ng-if="attachment.state === 'not_available'" class="get-attachment not_available" ng-attr-title="Lataa {{attachment.file_name}}">{{::attachment.file_name}}<span class="error">(Tiedoston tietoturvatarkistus epäonnistui)</span></span><input tabindex="-1" ng-keydown="attachmentHandler.onKeyDown($event, attachment)" ng-blur="attachmentHandler.updateAttachment($event, attachment)" aria-label="Tiedostonimi" style="display: none;"></input></div><div class="tools align-right"><div class="btn-group" role="group" ng-if="attachment.canWrite || attachment.canDelete"><button ng-if="attachment.canWrite" type="button" class="btn btn-default btn-clear" ng-click="attachmentHandler.editAttachment($event, attachment)" aria-label="Muokkaa tiedoston nimeä {{::attachment.file_name}}" title="Muokkaa tiedoston nimeä {{::attachment.file_name}}" data-toggle="tooltip" data-placement="bottom" data-container="body"><i class="fa fa-pencil" aria-hidden="true"></i></button><button ng-if="attachment.canDelete" type="button" class="btn btn-default btn-clear" ng-click="confirmDeleteAttachment(attachment, $event)" aria-label="Poista {{::attachment.file_name}}" title="Poista {{::attachment.file_name}}" data-toggle="tooltip" data-placement="bottom" data-container="body"><i class="fa fa-times" aria-hidden="true"></i></button></div><div style="text-align: center;"><time><sn-time-ago timestamp="::attachment.sys_created_on"></sn-time-ago></time></div></div></div></script><script id="sp_variable_layout.xml" type="text/ng-template"><div ng-repeat="container in containers" class="sp-form-container" ng-show="paintForm(container)" ng-attr-role="{{(container.caption || container.captionDisplay) ? 'group' : undefined}}" ng-attr-aria-labelledby="{{(container.caption || container.captionDisplay) ? 'container_' + container.id : undefined}}"><span ng-if="(container.caption || container.captionDisplay)" class="container-caption form-container-caption"><span class="h4" role="heading" aria-level="3" id="container_{{::container.id}}">{{container.captionDisplay || container.caption}}</span><sp-help-tag field="::formModel._fields[container.name]"></sp-help-tag></span><div class="row"><div ng-repeat="column in container.columns" class="col-md-{{::12 / container.columns.length }}"><div ng-switch="::f.type" ng-repeat="f in ::column.fields" id="{{::getVarID(f)}}" ng-class="::{'form-inline': isInlineForm === true }"><div ng-switch-when="label" ng-if="formModel._fields[f.name]" ng-show="formModel._fields[f.name].isVisible()"><label ng-bind="f.label"></label><sp-help-tag field="::formModel._fields[f.name]"></sp-help-tag><hr class="sp_label_hr"></hr></div><sp-form-field ng-switch-when="field" ng-if="formModel._fields[f.name] && formModel._fields[f.name]._class_name != 'RequestedForQuestion'" form-model="formModel" field="formModel._fields[f.name]" glide-form="getGlideForm()" ng-show="formModel._fields[f.name].isVisible()" default-value-setter="setDefaultValue(fieldName,fieldInternalValue,fieldDisplayValue)"></sp-form-field><sp-variable-layout ng-switch-when="container" ng-init="containers=[f]"></sp-variable-layout><sp-checkbox-group ng-switch-when="checkbox_container" name="f.name" form-model="formModel" containers="f.containers" glide-form="getGlideForm()" class="checkbox-container"></sp-checkbox-group><sp-widget ng-switch-when="formatter" ng-if="formModel._formatters[f.id].widgetInstance" widget="formModel._formatters[f.id].widgetInstance" page="{g_form: getGlideForm()}"></sp-widget><hr ng-switch-when="break" ng-show="formModel._fields[f.name].isVisible()"></hr><sp-sc-request-for ng-switch-when="field" ng-if="formModel._fields[f.name] && formModel._fields[f.name]._class_name == 'RequestedForQuestion'" form-model="formModel" field="formModel._fields[f.name]" glide-form="getGlideForm()" ng-show="formModel._fields[f.name].isVisible()" id="sp_formfield_requested_for_{{::field.name}}" tabindex="-1"></sp-sc-request-for></div></div></div></div></script><script id="sp_multirow_vs_summarizer.html" type="text/ng-template"><div class="table-responsive" style="max-height:400px;max-width:600px"><table class="table table-striped"><thead><tr><th ng-repeat="col in variable.table_variable[0]" class="text-nowrap">{{::col.label}}</th></tr></thead><tbody><tr ng-repeat="row in variable.table_variable" style="word-break: keep-all;"><td ng-repeat="col in row">{{::col.display_value}}</td></tr></tbody></table></div></script><script id="sp_announcements.xml" type="text/ng-template"><div ng-if="c.totalAnnouncements !== 0"><div ng-repeat="a in c.announcements" ng-style="::c.getStyle(a)" ng-class="{'announcement-center-block': c.getStyle(a).textAlign === 'center'}"><div class="announcement-container" ng-class="{'linktype-none': a.linkType === 'none'}"><div aria-live="assertive" ng-init="c.linkSetup(a)" class="text-container" ng-click="::c.toggleShowAll($event)" tabindex="0" aria-expanded="{{(c.totalAnnouncements > 1 || (c.totalAnnouncements == 1 && a.summary)) && c.showAll ? 'true' : 'false'}}" ng-disabled="c.totalAnnouncements == 1 && !a.summary"><div class="icon-title" ng-style="::{justifyContent: c.getJustifyContentValue(a)}"><div class="icon"><span class="glyphicon fa title-dismiss-icons" ng-class="::('fa-' + a.glyph)" aria-hidden="true" alt="{{::a.glyphAltText}}" data-toggle="tooltip" data-placement="bottom" title="{{::a.glyphAltText}}"></span></div><div class="title-announcement" ng-class="{'no-glyph-title': a.glyph === 'empty', 'announcement-left': c.getStyle(a).textAlign !== 'center'}">{{::a.title}}</div></div><p class="content" ng-class="{expanded: c.showAll && a.summary}" ng-bind="::a.summary"></p></div><span ng-if="a.linkType != 'none'" class="actions-container"><a class="info-link" target="{{a.linkTarget}}" ng-href="{{::a.targetLink}}" ng-style="::{color: c.getStyle(a).color}" title="{{::a.targetLinkText || c.i18n.defaultLinkText}} – tietoja tästä tiedotteesta" data-toggle="tooltip" data-placement="auto">{{::a.targetLinkText || c.i18n.defaultLinkText}}</a></span><button ng-if="::a.dismissOption !== 'NOT_DISMISSIBLE'" ng-click="::c.dismiss(a.id, $index)" aria-label="{{::c.i18n.dismiss}} {{::c.i18n.announcement}} {{::a.title}}" class="close fa fa-times fa-lg title-dismiss-icons" ng-style="::{color: c.getStyle(a).color}" title="{{::c.i18n.dismiss}} {{::c.i18n.announcement}} {{::a.title}}" data-toggle="tooltip" data-placement="bottom"></button></div><button ng-if="($first || $last) && (c.totalAnnouncements > 1 || (c.totalAnnouncements == 1 && a.summary))" ng-click="::c.toggleShowAll($event)" class="sp-announcement-list-actions" ng-style="::{'filter': 'brightness(90%)', backgroundColor: c.getStyle(a).backgroundColor}" ng-class="{'smaller-resolution': c.totalAnnouncements === 1 && a.summary}" aria-label="{{c.showMore}} {{c.totalAnnouncements === 1 ? c.i18n.announcement : c.i18n.announcements}}" aria-expanded="{{c.showAll}}"><span class="more-button">{{c.showMore}}</span><span class="fa fa-md arrow-icon" ng-class="{'fa-angle-down': !c.showAll, 'fa-angle-up': c.showAll }" aria-hidden="true"></span></button></div></div></script><script id="sp_search_nav.xml" type="text/ng-template"><div><h2 class="sr-only">{{::c.i18n.search_categories}}</h2><sp-list-menu menu="c.searchSources" onclick-fn="c.onSearchSourceClick(menu, input)" list-view="listView" show-toggle="showToggle"></sp-list-menu></div></script><script id="sp_facet_list.xml" type="text/ng-template"><div><div ng-if="::c.show" class="sp-facet-list"><div class="panel panel-default"><div class="panel-heading"><div><span class="panel-title" aria-label="{{::listTitle}} {{::c.i18n.collapse}}"><div ng-if="!toggleSearchsource" style="background-color:inherit"><span class="label-title">{{::listTitle}}</span></div><button aria-label="{{c.collapse? c.i18n.expand : c.i18n.collapse}} {{::listTitle}}" class="toggle-icon btn" ng-if="toggleSearchsource" style="background-color:inherit" ng-click="c.toggleIcon(listTitle)"><span class="label-title">{{::listTitle}}</span><i class="fa" ng-class="{'fa-caret-right':c.collapsed,'fa-caret-down':!c.collapsed}" aria-hidden="true"></i></button></span></div><div><span><button aria-label="{{::c.i18n.clearAll}}" ng-click="c.clearAll()" ng-disabled="!c.showClearAll" class="btn btn-link clear-all pull-right" ng-class="{'disabled': !c.showClearAll}">{{::c.i18n.clearAll}}</button></span></div></div></div><div class="collapse" ng-class="{'in': !c.collapsed}"><div ng-repeat="facet in facets" class="inner-facet-list"><sp-list-menu list-view="true" collapsed="c.isCollapsed(facet.id)" menu="facet" onclick-fn="c.onSelectFacet(menu, input)" onclear-fn="c.clearFacet(menu)" ontoggle-fn="c.onFacetToggle(menuId, collapsed)" show-clear="c.showClear(facet)" show-toggle="true"></sp-list-menu></div></div></div></div></script><script id="sp_list_menu.xml" type="text/ng-template"><div class="sp-list-menu"><div data-menu-id="{{::menu.id}}" class="panel panel-default" ng-class="::{'list-view':listView, 'panel-heading-multiselect': c.isMultiSelect}" ng-if="::c.show()"><div class="panel-heading"><div><span class="panel-title" aria-label="{{::menu.label}}"><div ng-if="!c.showToggle" aria-label="{{::menu.label}}" style="background-color:inherit"><span class="label-title">{{::menu.label}}</span></div><button ng-if="c.showToggle" tabindex="0" aria-expanded="{{!c.collapsed}}" class="toggle-icon" ng-click="c.toggleIcon($event, menu.label)" aria-label="{{::menu.label}}" style="background-color:inherit"><span class="label-title">{{::menu.label}}</span><i class="fa" ng-class="{'fa-caret-right':c.collapsed,'fa-caret-down':!c.collapsed}" aria-hidden="true"></i></button></span></div><div><span><button ng-if="c.showClearButton()" class="btn btn-link clear pull-right" ng-click="c.clear()" aria-label="{{::c.i18n.clear}} {{::menu.label}}">{{::c.i18n.clear}}</button></span></div></div><div class="panel-content collapse" ng-class="{'in': !c.collapsed}"><div ng-if="::c.isMultiSelect"><sp-list-menu-items menu="menu" type="MULTI_SELECT" onclick-fn="c.onItemClickFn(menu, item)"></sp-list-menu-items></div><div ng-if="::!c.isMultiSelect"><sp-list-menu-items menu="menu" onclick-fn="c.onItemClickFn(menu, item)"></sp-list-menu-items></div></div><button ng-if="c.isMultiSelect && !c.showClearButton()" ng-disabled="!c.showApplyButton()" ng-class="{'disabled': !c.showApplyButton()}" class="btn btn-link clear pull-right multiselect-apply" ng-click="c.submit()">{{::c.i18n.apply}}</button></div></div></script><script id="sp_list_menu_item.xml" type="text/ng-template"><div class="sp-list-menu-items" role="navigation" aria-label="Hakulähteet"><ul><li ng-repeat="item in c.items track by item.value" class="sp-list-menu-item"><button class="btn-link" ng-click="c.onClick(item)" aria-label="{{item.selected? c.i18n.selected : c.i18n.select}} {{::menu.label}} {{::item.label}}" ng-class="{'active':item.selected}" style="padding: 0" role="link">{{::item.label}}</button></li><li ng-repeat="item in c.nextItems track by item.value" class="sp-list-menu-item" ng-class="{'hidden': !c.showNextItems}"><button class="btn-link" aria-label="{{item.selected? c.i18n.selected : c.i18n.select}} {{::menu.label}} {{::item.label}}" ng-click="c.onClick(item)" ng-class="{'active':item.selected}" style="padding: 0" role="link">{{::item.label}}</button></li></ul><div ng-if="::c.nextItems" class="sp-list-menu-item"><button ng-if="c.showMoreButton()" type="button" class="btn btn-link" ng-click="c.onMoreButtonClick()">{{::c.i18n.see_more}}</button><button ng-if="c.showNextItems" type="button" class="btn btn-link" ng-click="c.onLessButtonClick()">{{::c.i18n.see_less}}</button></div></div></script><script id="sp_list_menu_checkbox.xml" type="text/ng-template"><div class="sp-list-menu-items"><ul aria-label="Suodata tulokset luokan mukaan"><li ng-repeat="item in c.items track by item.value" class="sp-list-menu-item sp-facet-checkbox"><label><input type="checkbox" ng-checked="item.selected" ng-click="c.onClick(item)" aria-label="{{::item.label}}"></input><span ng-class="{'active': item.selected}">{{::item.label}}</span></label></li><li ng-repeat="item in c.nextItems track by item.value" class="sp-list-menu-item sp-facet-checkbox" ng-class="{'hidden': !c.showNextItems}"><label><input type="checkbox" ng-checked="item.selected" ng-click="c.onClick(item)"></input><span ng-class="{'active': item.selected}">{{::item.label}}</span></label></li></ul><div ng-if="::c.nextItems" class="sp-list-menu-item"><button ng-if="c.showMoreButton()" type="button" class="btn btn-link" ng-click="c.onMoreButtonClick()">{{::c.i18n.see_more}}</button><button ng-if="c.showNextItems" type="button" class="btn btn-link" ng-click="c.onLessButtonClick()">{{::c.i18n.see_less}}</button></div></div></script><script id="sp_checkbox_group.xml" type="text/ng-template"><div ng-repeat="container in containers"><fieldset ng-show="field.isVisible()"><legend class="field-label" ng-if="::field.render_label" id="sp_grp_checkbox_{{::field.name}}" ng-attr-aria-label="{{::$parent.accessible && field.hint ? undefined : getFieldAriaLabel(field)}}"><span class="field-decorations"><span ng-show="field.isMandatory()" class="fa fa-asterisk mandatory" ng-class="{'mandatory-filled': field.mandatory_filled()}" style="padding-right: .25em" aria-label="{{field.mandatory_filled()? 'Pakollinen täytetty ' : 'Pakollinen '}}" role="img"></span><span ng-repeat="decoration in field.decorations" class="decoration {{decoration.icon}}" title="{{decoration.text}}"></span></span><span style="padding-right: .25em" ng-attr-title="{{::$parent.accessible ? undefined : field.hint}}" data-placement="right" data-toggle="tooltip">{{field.label}}</span><span class="sr-only">{{::field.hint}}</span><span ng-if="::$parent.accessible && field.hint" role="button" data-toggle="tooltip" data-placement="right" tabindex="0" class="fa fa-question-circle" title="{{getFieldAriaLabel(field)}}" aria-label="{{getFieldAriaLabel(field)}}"></span><sp-help-tag field="::field"></sp-help-tag></legend><div class="row" id="sp_formfield_{{::field.name}}"><div ng-repeat="column in container.columns" class="col-md-{{::12 / container.columns.length }}"><div ng-repeat="f in ::column.fields" id="{{::getVarID(f)}}" ng-class="::{'form-inline': isInlineForm === true , 'sp-sc-single-checkbox' : !field.render_label}"><span ng-if="!field.render_label && field.mandatory && formModel._fields[f.name].isVisible()" class="fa fa-asterisk mandatory" ng-class="{'mandatory-filled': field.mandatory_filled()}" title="Pakollinen" style="padding-right: .25em"></span><sp-form-field ng-if="formModel._fields[f.name]" form-model="formModel" field="formModel._fields[f.name]" glide-form="getGlideForm()" ng-show="formModel._fields[f.name].isVisible()"></sp-form-field></div></div></div></fieldset></div></script><script id="sp_help_tag.xml" type="text/ng-template"><i class="fa fa-question-circle padder-xs help-tag-icon" ng-click="field.expand_help = !field.expand_help" ng-if="::(field.help_text || field.instructions)" data-placement="top" data-toggle="tooltip" title="{{::field.help_tag}}" aria-label="{{::getHelpAriaLabel()}}" aria-expanded="{{field.expand_help}}" tabindex="0"></i><div class="help-tag"><div ng-if="field.expand_help" class="well wrapper-xs m-b-sm flex-row justify-between"><div style="overflow:auto"><span title="{{::field.help_text}}" ng-bind="::field.help_text" style="white-space: pre-line;"></span><p ng-bind-html="::trustedHTML(field.instructions)"></p></div><div><i class="fa fa-times pull-right help-tag-icon wrapper-xs padder-t-none" ng-click="hideHelp()" aria-label="Sulje {{field.help_tag}}" ng-if="field.expand_help" tabindex="0"></i></div></div></div><now-message key="{h} for {f}" value="{h} kohteelle {f}"></now-message></script><script id="sp_agent_chat.xml" type="text/ng-template"><div class="sp-ac-container"><div class="sp-ac-root" ng-if="c.isVisible" ng-class="{'sp-ac-desktop': !c.isMobile}" aria-label="{{::c.i18n.agentChatWindow}}" role="application" tabindex="-1"><section class="sp-ac-conversation" ng-show="c.isOpen"><iframe class="sp-ac-frame" title="{{::c.i18n.agentChatWindow}}" scrolling="no" horizontalscrolling="no" verticalscrolling="no" frameborder="none" ng-src="{{c.frameUrl}}"></iframe></section><button class="sp-ac-btn" ng-class="{open: c.isOpen, closed: !c.isOpen}" ng-click="::c.toggle($event)" data-original-title="{{c.getBadgeAriaLabel()}}" data-toggle="tooltip" data-placement="top" aria-label="{{c.getBadgeAriaLabel()}}"><span class="sp-ac-unread-msg" ng-if="c.hasUnreadMessage">{{c.unreadMessages}}</span><span class="sp-ac-btn-icon"></span></button></div></div></script><script id="sp_element_url.xml" type="text/ng-template"><div style="display:flex;justify-content:space-between" data-unlock-empty-url="false" class="field-url"><span id="empty_url_{{::field.name}}" class="field-url-empty-label" ng-show="field.stagedValue == ''">(tyhjä)</span><a id="sp_formfield_{{::field.name}}_link" class="web web-inline form-control-static field-url-link" target="_blank" name="sp_formfield_{{::field.name}}_link" href="{{field.stagedValue}}" ng-show="field.stagedValue != ''">{{field.stagedValue}}</a><input name="{{::field.name}}" aria-label="{{::field.label}}" id="sp_formfield_{{::field.name}}" autocomplete="url" class="form-control" ng-model="field.stagedValue" aria-required="{{field.isMandatory()}}" ng-model-options="{allowInvalid: true}" ng-change="stagedValueChange()" placeholder="{{::field.placeholder}}" ng-readonly="field.isReadonly() == true" maxlength="{{::field.max_length}}" data-type="{{::field.type}}" style="display:none"></input><button class="btn btn-default btn-ref" type="button" aria-label="Lukitse {{::field.label}}" id="sp_formfield_{{::field.name}}_lock" data-ref="sp_formfield_{{::field.name}}" title="Lukitse {{::field.label}}" ng-disabled="field.isReadonly()" style="display:none" data-toggle="tooltip" data-container="body" data-placement="top"><span class="fa fa-unlock" aria-hidden="true"></span></button><button class="btn btn-default btn-ref" type="button" aria-label="Muokkaa {{::field.label}}" id="sp_formfield_{{::field.name}}_unlock" data-ref="sp_formfield_{{::field.name}}" ng-disabled="field.isReadonly()" title="Muokkaa {{::field.label}}" data-toggle="tooltip" data-container="body" data-placement="top"><span class="fa fa-lock" aria-hidden="true"></span></button></div></script><script type="text/ng-template" id="sp-modal.html"><div class="modal-header" ng-style="options.headerStyle"><button type="button" class="close pull-right" ng-click="$dismiss()" title="Sulje" data-toggle="tooltip" data-placement="bottom" aria-label="Sulje" autofocus="autofocus">×</button><h1 class="modal-title h4" ng-bind-html="options.title" id="modal-title"></h1></div><div class="modal-body" ng-keyup="keyPress($event.keyCode)"><p ng-if="options.message" ng-bind-html="options.message"></p><p ng-if="options.errorMessage" class="alert alert-danger ng-binding ng-scope" role="alert" ng-bind-html="options.errorMessage"></p><div ng-if="options.widget"><sp-widget widget="options.widget"></sp-widget></div><div ng-if="options.input"><form name="form.xpForm" ng-if="options.input" ng-submit="submit()"><div class="form-group"><label for="xpInput" ng-if="options.label"><span class="field-decorations"><span class="fa fa-asterisk mandatory" title="pakollinen" style="padding-right: .25em" aria-label="pakollinen "></span>{{options.label}}</span></label><input id="xpInput" type="text" class="form-control" placeholder="{{options.label}}" ng-model="input.value" required="true" ng-change="changed=true" ng-blur="clearFocusListCache()" ng-if="!options.values || options.values.length === 0" autocomplete="off"></input><div class="input-group" ng-if="options.values"><input id="xpInput" type="text" class="form-control" placeholder="{{options.label}}" ng-model="input.value" required="true" ng-change="changed=true" ng-blur="clearFocusListCache()" autocomplete="off"></input><div class="input-group-btn" dropdown="true"><button type="button" class="btn btn-default dropdown-toggle" dropdown-toggle="true" data-toggle="dropdown"><span class="caret"></span></button><ul class="dropdown-menu pull-right"><li ng-repeat="value in options.values"><a href="" ng-click="input.name = value">{{value}}</a></li></ul></div></div></div></form></div></div><div class="modal-footer" ng-style="options.footerStyle"><button ng-repeat="button in options.buttons track by button.label" sp-focus-if="button.focus" ng-disabled="button.primary && options.input && form.xpForm.$invalid" class="btn btn-default {{button.class}}" ng-class="{'btn-primary':button.primary}" ng-click="buttonClicked(button)">{{button.label}}</button></div></script><style>.modal .panel { margin-bottom: 0; } .sp-form-modal-body { padding: 0px; } .sp-form-modal-body .panel-heading { padding-right: 4rem; } .sp-form-modal-body .sp-form-modal-close-button { position: absolute; right: 0px; top: 0px; z-index: 1; border-top-right-radius: 0.3rem; padding: 1.4rem 1.3rem 1.5rem 1.3rem; }</style><script type="text/ng-template" id="sp_form_modal"><div class="modal-body sp-form-modal-body"><i class="fa fa-close text-base sp-form-modal-close-button" ng-click="cancel()" role="button" aria-label="{{::closeWindowMsg}}" tabindex="0" autofocus="true"></i><sp-widget widget="item.form"></sp-widget></div></script><script type="text/ng-template" id="sp_modal"><div class="modal-header"><button type="button" class="close" ng-click="cancel()">X</button><h4>Tämä on otsikko</h4></div><div class="modal-body">{{item.name}}</div><div class="modal-footer"><button class="btn btn-default" ng-click="cancel()">Peruuta</button><button class="btn btn-primary" ng-click="ok()">OK</button></div></script><script type="text/ng-template" id="angular.do?sysparm_type=get_partial&name=sn_avatar.xml"><div class="avatar-container" ng-class="avatarType()" title="{{ avatartooltip() }}"><div class="avatar soloAvatar top" ng-if="(users.length > 1 && !groupAvatar)" context-menu="contextOptions"><div class="sub-avatar" ng-style="getBackgroundStyle(users[1])" aria-label="{{users[1].name}}"><span ng-if="!users[1].avatar">{{ users[1].initials }}</span></div></div><div class="avatar soloAvatar bottom" context-menu="contextOptions"><div class="sub-avatar" ng-style="getBackgroundStyle(users[0] || primary)" aria-label="{{users[0].name}}"><span ng-if="(!users[0].avatar && !groupAvatar)">{{ users[0].initials }}</span></div></div><div class="avatar soloAvatar top" ng-if="users.length > 2 && !groupAvatar" context-menu="contextOptions"><div class="sub-avatar" ng-style="getBackgroundStyle(users[2])" aria-label="{{users[2].name}}"><span ng-if="!users[2].avatar">{{ users[2].initials }}</span></div></div><div class="avatar soloAvatar top" ng-if="users.length > 3 && !groupAvatar" context-menu="contextOptions"><div class="sub-avatar" ng-style="getBackgroundStyle(users[3])" aria-label="{{users[3].name}}"><span ng-if="!users[3].avatar">{{ users[3].initials }}</span></div></div><span class="inner-details" ng-transclude=""></span><sn-presence ng-if="::presenceEnabled" user="(users[0].userID || users[0].document)"></sn-presence></div></script><script type="text/ng-template" id="angular.do?sysparm_type=get_partial&name=sp_tinymce_editor.xml"><div><div ng-show="!field.isReadonly()"><span ng-if="::accessibilityEnabled" role="note" data-toggle="tooltip" tabindex="0" class="fa fa-question-circle" aria-label="Kohdista työkaluriviin painamalla seuraavassa editorissa ALT+F10. Palaa editoriin valitsemalla ESC" title="Kohdista työkaluriviin painamalla seuraavassa editorissa ALT+F10. Palaa editoriin valitsemalla ESC"></span><textarea ui-tinymce="tinyMCEOptions" name="{{attrs.name}}" label="{{attrs.name}}" ng-model="model" ng-model-options="options" ng-change="onChangeModel()" rows="10" id="{{textareaId}}"></textarea><input ng-file-select="attachFiles({files: $files})" ng-click="$event.stopPropagation();" tabindex="-1" aria-hidden="true" multiple="" type="file" style="display: none;"></input></div><div ng-show="field.isReadonly()" style="overflow: auto;" ng-bind-html="trustedHTML(model)"></div></div></script><now-message key="Created" value="Luotu"></now-message><now-message key="track requests from 'My Requests' in the navbar or click" value="seuraa pyyntöjä siirtymispalkin kohdassa Omat pyynnöt tai napsauta"></now-message><now-message key="here to view" value="tätä nähdäksesi"></now-message><now-message key="Submitted" value="Lähetetty"></now-message><now-message key="after" value="jälkeen"></now-message><now-message key="at or after" value="aikaisintaan"></now-message><now-message key="is anything" value="on mitä tahansa"></now-message><now-message key="before" value="ennen"></now-message><now-message key="at or before" value="viimeisintään"></now-message><now-message key="is empty" value="on tyhjä"></now-message><now-message key="is empty string" value="on tyhjä merkkijono"></now-message><now-message key="ends with" value="loppuu"></now-message><now-message key="is" value="on"></now-message><now-message key="greater than" value="suurempi kuin"></now-message><now-message key="greater than or is" value="suurempi kuin tai sama kuin"></now-message><now-message key="is a" value="on tarkasti"></now-message><now-message key="contains" value="sisältää"></now-message><now-message key="less than" value="pienempi kuin"></now-message><now-message key="less than or is" value="pienempi tai sama kuin"></now-message><now-message key="is not empty" value="ei ole tyhjä"></now-message><now-message key="is not" value="ei ole"></now-message><now-message key="does not contain" value="ei sisällä"></now-message><now-message key="not on" value="ei kohteessa"></now-message><now-message key="on" value="ajankohtana"></now-message><now-message key="starts with" value="alkaa"></now-message><now-message key="Open" value="Avoin"></now-message><now-message key="Knowledge" value="Tukitiedot"></now-message><now-message key="Catalog" value="Luettelo"></now-message><now-message key="Catalogs" value="Luettelot"></now-message><now-message key="Fetched" value="Haettu"></now-message><now-message key="additional {0}" value="lisätty {0}"></now-message><now-message key="additional items" value="lisäkohteita"></now-message><now-message key="Requests" value="Pyynnöt"></now-message><now-message key="All" value="Kaikki"></now-message><now-message key="Search" value="Haku"></now-message><now-message key="Searching..." value="Haetaan..."></now-message><now-message key="No matches found" value="Vastineita ei löytynyt"></now-message><now-message key="Loading more results..." value="Ladataan lisää tuloksia"></now-message><now-message key="Price" value="Hinta"></now-message><now-message key="Recurring price" value="Toistuva hinta"></now-message><now-message key="Submit" value="Lähetä"></now-message><now-message key="price_subtract" value="Vähennä"></now-message><now-message key="price_add" value="-lisää"></now-message><now-message key="has added" value="on lisännyt"></now-message><now-message key="will add" value="lisää"></now-message><now-message key="has added {0}" value="on lisännyt {0}"></now-message><now-message key="will add {0}" value="lisää {0}"></now-message><now-message key="has added {0} | has added {1}" value="on lisännyt {0} | on lisännyt {1}"></now-message><now-message key="will add {0} | will add {1}" value="lisää {0} | lisää {1}"></now-message><now-message key="add {0} | add {1}" value="lisää {0} | lisää {1}"></now-message><now-message key="add {0} | subtract {1}" value="Lisää {0} | vähentää {1}"></now-message><now-message key="subtract {0} | add {1}" value="vähentää {0} | lisää {1}"></now-message><now-message key="add {0}" value="Lisää {0}"></now-message><now-message key="subtract {0} | subtract {1}" value="vähennä {0} | vähennä {1}"></now-message><now-message key="subtract {0}" value="vähennä {0}"></now-message><now-message key="Required - " value="Pakollinen – "></now-message><now-message key="There was an error processing your request" value="Pyyntösi käsittelyssä tapahtui virhe"></now-message><now-message key="Drag image or click to select" value="Valitse kuva vetämällä tai napsauttamalla"></now-message><now-message key="{0} {1} results returned" value="{0} {1} tulosta palautettiin"></now-message><now-message key="{0} {1} result returned" value="{0} {1} tulos palautettiin"></now-message><now-message key="{0} results returned" value="{0} tulosta palautettiin"></now-message><now-message key="{0} result returned" value="{0} tulos palautettiin"></now-message><now-message key="Go to {0} Homepage" value="Siirry kotisivulle {0}"></now-message><now-message key="To preview {0} details go back to preview button" value="Jos haluat esikatsella {0} tietoa, palaa esikatselupainikkeeseen"></now-message><now-message key="{0} out of {1} selected" value="{0} / {1} valittu"></now-message><now-message key="Double tap to rate {0} out of {1} star" value="Kaksoisnapauttamalla arvioit {0} / {1} tähteä"></now-message><now-message key="Filtered {0} list showing {1} to {2} of {3} records" value="Suodatetussa luettelossa {0} näytetään {1}–{2}/{3} tietuetta"></now-message><now-message key="Unfiltered {0} list showing {1} to {2} of {3} records" value="Suodattamattomassa {0} luettelossa näytetään {1}–{2}/{3} tietuetta"></now-message><now-message key="Filtered {0} list showing 0 records" value="Suodatettu {0} luettelo, jossa näkyy 0 tietuetta"></now-message><now-message key="Unfiltered {0} list showing 0 records" value="Suodattamaton {0} luettelo, jossa näkyy 0 tietuetta"></now-message><now-message key="Instance Options" value="Esiintymävaihtoehdot"></now-message><now-message key="Instance in Page Editor {0}" value="Esiintymä sivueditorissa {0}"></now-message><now-message key="Page in Designer {0}" value="Sivu Suunnittelijassa {0}"></now-message><now-message key="Edit Container Background" value="Muokkaa säilön taustaa"></now-message><now-message key="Widget Options Schema" value="Pienoissovellusvalintakaavio"></now-message><now-message key="Widget in Form Modal" value="Pienoissovellus lomakemoodissa"></now-message><now-message key="Widget in Editor {0}" value="Pienoissovellus editorissa {0}"></now-message><now-message key="Log to console: {0}" value="Kirjaudu konsoliin: {0}"></now-message><now-message key="generated in" value="luotu"></now-message><now-message key="Read only - {0}" value="Vain luku - {0}"></now-message><now-message key="OK" value="OK"></now-message><now-message key="Remove" value="Poista"></now-message><now-message key="Cancel" value="Peruuta"></now-message><now-message key="Keywords" value="Avainsanat"></now-message><now-message key="Save Filter" value="Tallenna suodatin"></now-message><now-message key="Add attachments" value="Lisää liitteitä"></now-message><now-message key="Lookup using list" value="Haku luettelon avulla"></now-message><now-message key="Closing modal page" value="Suljetaan modaalinen sivu"></now-message><now-message key="Attachment" value="Liite"></now-message><now-message key="Enable edit mode on attachments" value="Ota käyttöön liitteiden muokkaustila"></now-message><now-message key="Finish editing attachments" value="Lopeta liitteiden muokkaus"></now-message><now-message key="Edit" value="Muokkaa"></now-message><now-message key="Done" value="Valmis"></now-message><now-message key="Attachments" value="Liitteet"></now-message><now-message key="Delete" value="Poista"></now-message><now-message key="Enter date in format" value="Anna päivämäärä muodossa"></now-message><now-message key="Date in format" value="Päivämäärä muodossa"></now-message><now-message key="Use format" value="Käytä muotoa"></now-message><now-message key="Entered date not valid. Enter date in format" value="Annettu päivämäärä ei kelpaa. Anna päivämäärä muodossa"></now-message><now-message key="Switching to {0} picker" value="Siirrytään valitsimeen {0}"></now-message><now-message key="showing" value="Näytetään"></now-message><now-message key="picker is opened" value="valitsin avataan"></now-message><now-message key="picker is closed" value="valitsin on suljettu"></now-message><now-message key="Toggle date time picker" value="Vaihda päivämäärän ja ajan valitsin"></now-message><now-message key="date" value="Päivämäärä"></now-message><now-message key="date time" value=" Päivämäärä ja aika"></now-message><now-message key="Date and time" value="Päivämäärä ja aika"></now-message><now-message key="month" value="Kuukausi"></now-message><now-message key="year" value="Vuosi"></now-message><now-message key="decade" value="vuosikymmen"></now-message><now-message key="Toggle" value="Vaihda"></now-message><now-message key="Previous" value="Edellinen"></now-message><now-message key="{0} hours. hour picker" value="{0} tuntia. tunnin valitsin"></now-message><now-message key="increment Hours" value="lisäystunnit"></now-message><now-message key="increment Minutes" value="lisäysminuutit"></now-message><now-message key="decrement Minutes" value="vähennys minuutteina"></now-message><now-message key="decrement Hours" value="vähennys tunteina"></now-message><now-message key="{0} minutes. minute picker" value="{0} minuuttia. minuutin valitsin"></now-message><now-message key="hour picker opened" value="tunnin valitsin avattu"></now-message><now-message key="minute picker opened" value="minuutin valitsin avattu"></now-message><now-message key="{0} minutes" value="{0} minuuttia"></now-message><now-message key="{0} hours" value="{0} tuntia"></now-message><now-message key="Date" value="Päivämäärä"></now-message><now-message key="picker" value="valitsin"></now-message><now-message key="Show Calendar for {0}" value="Näytä kohteen {0} kalenteri"></now-message><now-message key="Required" value="pakollinen"></now-message><now-message key="Remove {0} facet filter" value="Poista {0} fasettisuodatin"></now-message><now-message key="Error" value="Virhe"></now-message><now-message key="Close Window" value="Sulje ikkuna"></now-message><now-message key="File not available" value="Tiedoston tietoturvatarkistus epäonnistui. Lataus peruutettiin puolestasi, ja siitä ilmoitettiin järjestelmänvalvojalle. Voit kysyä lisätietoja järjestelmänvalvojalta."></now-message><now-message key="File pending" value="Palvelimillamme oli kiire, ja tarkistus aikakatkaistiin. Pahoittelut. Yritä myöhemmin uudelleen."></now-message><now-message key="File failed security scan" value="Tiedoston tietoturvatarkistus epäonnistui"></now-message><now-message key="Upload file scan failed" value="Tiedoston {0} tietoturvatarkistus epäonnistui. Järjestelmä on edelleen turvallinen. Tiedosto asetettiin karanteeniin ja järjestelmänvalvojalle lähetettiin ilmoitus. Kysy lisätietoja järjestelmänvalvojaltasi."></now-message><now-message key="Also request for" value="Pyydä myös"></now-message><now-message key="Item is unavailable for {0}" value="Kohde ei ole käytettävissä käyttäjälle {0}"></now-message><now-message key="Do you want to add a row for {0}" value="Haluatko lisätä rivin kohteelle {0}?"></now-message><now-message key="Request for multiple users" value="Pyydä useille käyttäjille"></now-message><now-message key="Item is unavailable for this user" value="Kohde ei ole käytettävissä tälle käyttäjälle"></now-message><now-message key="Remove {0} from {1}" value="Poista {0} kohteesta {1}"></now-message><now-message key="Upload and Encrypt" value="Lataa ja salaa"></now-message><now-message key="Upload Without Encrypting" value="Lataa ilman salausta"></now-message><now-message key="Encrypt attachment?" value="Salataanko liite?"></now-message><now-message key="Encrypt attachments?" value="Salataanko liitteet?"></now-message><now-message key="Attached by {0} {1}" value="Liittäjä {0} {1}"></now-message><now-message key="Encrypted" value="Salattu"></now-message><now-message key="Attachment successfully uploaded" value="Liitteen lataaminen onnistui"></now-message><now-message key="Attachment deleted successfully" value="Liitteen poistaminen onnistui"></now-message><now-message key="Attachment renamed successfully" value="Liitteen nimeäminen uudelleen onnistui"></now-message><now-message key="Profile picture updated successfully" value="Profiilikuvan päivitys onnistui"></now-message><now-message key="Collapse" value="Tiivistä"></now-message><now-message key="Expand" value="Laajenna"></now-message><now-message key="announcement" value="tiedote"></now-message><now-message key="announcements" value="tiedotteet"></now-message><now-message key="More information about" value="Lisätietoja aiheesta"></now-message><now-message key="Dismiss" value="Hylkää"></now-message><now-message key="Learn More" value="Opi lisää"></now-message><now-message key="MORE" value="LISÄÄ"></now-message><now-message key="LESS" value="VÄHEMMÄN"></now-message><now-message key="EXPAND ALL {0}" value="LAAJENNA KAIKKI {0}"></now-message><now-message key="HIDE ALL" value="PIILOTA KAIKKI"></now-message><now-message key="Specified username does not match with the username of currently logged in user" value="Määritetty käyttäjänimi ei täsmää tällä hetkellä kirjautuneena olevan käyttäjän käyttäjänimen kanssa"></now-message><now-message key="User name or password invalid" value="Virheellinen käyttäjänimi tai salasana"></now-message><now-message key="User name, password or token invalid" value="Virheellinen käyttäjänimi, salasana tai avain"></now-message><now-message key="Credentials for Approver and User logged in do not match" value="Hyväksyjän ja kirjautuneen käyttäjän tunnistetiedot eivät täsmää"></now-message><now-message key="Additional authentication required, enter your username, password and token to continue." value="Lisätodennus vaaditaan, jatka antamalla käyttäjänimi, salasana ja tunnus."></now-message><now-message key="Additional authentication is required, enter your usename and password to continue." value="Lisätodennus vaaditaan, jatka antamalla käyttäjänimi ja salasana."></now-message><now-message key="Approver authentication" value="Hyväksyjän todennus"></now-message><now-message key="Confirmation must match" value="Vahvistuksen on täsmättävä"></now-message><now-message key="Re-enter" value="Anna uudelleen"></now-message><now-message key="Re-enter `{0}`" value="Anna uudelleen {0}"></now-message><now-message key="u_show" value="NÄYTÄ"></now-message><now-message key="u_hide" value="PIILOTA"></now-message><now-message key="The size of the uploaded file cannot exceed {0} MB" value="Ladatun tiedoston koko ei voi olla suurempi kuin {0} Mt"></now-message><now-message key="The uploaded file type is not permitted; allowed types are {0}" value="Ladattua tiedostotyyppiä ei sallita. Sallitut tyypit ovat {0}"></now-message><now-message key="Invalid value" value="Virheellinen arvo"></now-message><now-message key="Save Changes" value="Tallenna muutokset"></now-message><now-message key="Do you want to save your changes before leaving this page?" value="Haluatko tallentaa muutokset ennen kuin poistut tältä sivulta?"></now-message><now-message key="Discard" value="Hylkää"></now-message><now-message key="Save" value="Tallenna"></now-message><now-message key="Clear" value="Tyhjennä"></now-message><now-message key="Apply" value="Käytä"></now-message><now-message key="Sources" value="Lähteet"></now-message><now-message key="Clear All" value="Tyhjennä kaikki"></now-message><now-message key="Loading" value="Ladataan"></now-message><now-message key="See more" value="Lisätietoja"></now-message><now-message key="See less" value="Näkyy vähemmän"></now-message><now-message key="Click to remove" value="Poista napsauttamalla"></now-message><now-message key="Select" value="Valitse"></now-message><now-message key="Selected" value="Valittu"></now-message><now-message key="Enabled" value="Käytössä"></now-message><now-message key="Disabled" value="Poistettu käytöstä"></now-message><now-message key="filter selection has cleared for {0} and search results updated" value="suodatinvalinta {0} on tyhjennetty ja hakutulokset päivitetty"></now-message><now-message key="Filter selected {0} and search results updated" value="Suodata valittu {0} ja hakutulokset päivitetään"></now-message><now-message key="Filter with value" value="Suodata arvolla"></now-message><now-message key="{0} is collapsed" value="{0} on kutistettu"></now-message><now-message key="{0} is Expanded" value="{0} on laajennettu"></now-message><now-message key="Filter selected {0} {1} and Search results updated" value="Suodata valitut {0} {1} ja hakutulokset päivitetään"></now-message><now-message key="Search Categories" value="Etsi luokat"></now-message><now-message key="All facets have been cleared, and search results have been updated" value="Kaikki fasetit on tyhjennetty, ja tuloksia päivitetään"></now-message><now-message key="Facet removed, search results updated" value="Fasetti poistettu, hakutulokset päivitetty"></now-message><now-message key="There is a JavaScript error in your browser console" value="Selaimen konsolissa on JavaScript-virhe"></now-message><now-message key="Guided Tours" value="Ohjatut esittelyt"></now-message><now-message key="This page currently has {0} tours" value="Tällä sivulla on tällä hetkellä {0} esittely(ä)"></now-message><now-message key="Tours" value="Esittelyt"></now-message><now-message key="You have no tours on this page" value="Sivulla ei ole esittelyjä"></now-message><now-message key="Tours appear when your administrator creates them on specific pages" value="Esittelyt näkyvät, kun järjestelmänvalvoja luo ne tietyillä sivuilla"></now-message><now-message key="Are you sure you want to delete all rows?" value="Haluatko varmasti poistaa kaikki rivit?"></now-message><now-message key="Are you sure you want to delete the row?" value="Haluatko varmasti poistaa rivin?"></now-message><now-message key="Stop Guided Tour" value="Pysäytä opastettu esittely"></now-message><now-message key="Do you want to stop this tour from auto launching again?" value="Haluatko pysäyttää tämän esittelyn käynnistämästä automaattisesti uudelleen?"></now-message><now-message key="Apply for all tours on this page" value="Ota käyttöön kaikissa esittelyissä tällä sivulla"></now-message><now-message key="Yes" value="Kyllä"></now-message><now-message key="No" value="Ei"></now-message><now-message key="Next" value="Seuraava"></now-message><now-message key="Complete" value="Valmis"></now-message><now-message key="Tour ended because the next step was not found." value="Esittely päättyi, koska seuraavaa vaihetta ei löytynyt."></now-message><now-message key="Tour was abandoned" value="Esittely hylättiin"></now-message><now-message key="This tour is currently in draft status" value="Tämä esittely on tällä hetkellä Luonnos-tilassa"></now-message><now-message key="Cannot start a new tour while another tour is in progress." value="Uutta esittelyä ei voi aloittaa, kun toinen esittely on käynnissä."></now-message><now-message key="Close" value="Sulje"></now-message><now-message key="{0} saved" value="{0} tallennettu"></now-message><now-message key="Open chat window" value="Avaa verkkokeskusteluikkuna"></now-message><now-message key="Open chat window. {0} unread messages" value="Avaa keskusteluikkuna. {0} lukematonta viestiä"></now-message><now-message key="Minimize chat window" value="Pienennä verkkokeskusteluikkuna"></now-message><now-message key="Agent Chat Window" value="Agentin verkkokeskusteluikkuna"></now-message><now-message key="Open diagnostics information" value="Avaa diagnostiikan tiedot"></now-message><now-message key="Color codes" value="Värikoodit"></now-message><now-message key="Widget" value="Pienoisohjelma"></now-message><now-message key="Compare with Base system" value="Vertaa perusjärjestelmään"></now-message><now-message key="Open widget in platform" value="Avaa pienoisohjelma alustalla"></now-message><now-message key="Widget Diagnostics" value="Pienoisohjelman diagnostiikka"></now-message><now-message key="Compare with previous version" value="Vertaa edelliseen versioon"></now-message><now-message key="Show Widget Customizations" value="Näytä pienoisohjelman mukautukset"></now-message><now-message key="Hide Widget Customizations" value="Piilota pienoisohjelman mukautukset"></now-message><now-message key="Cloned" value="Kloonattu"></now-message><now-message key="New" value="Uusi"></now-message><now-message key="Customized" value="Mukautettu"></now-message><now-message key="Base system" value="Perusjärjestelmä"></now-message><now-message key="Enable Analytics" value="Ota analytiikka käyttöön"></now-message><now-message key="Agree" value="Samaa mieltä"></now-message></body><now-message key="%d ago" value="%d sitten"></now-message><now-message key="%d from now" value="%d tästä eteenpäin"></now-message><now-message key="less than a minute" value="alle minuutti"></now-message><now-message key="just now" value="juuri nyt"></now-message><now-message key="about a minute" value="%dm"></now-message><now-message key="%d minutes" value="%dmin"></now-message><now-message key="about an hour" value="noin tunti"></now-message><now-message key="about %d hours" value="%dh"></now-message><now-message key="a day" value="päivä"></now-message><now-message key="%d days" value="%dpv"></now-message><now-message key="about a month" value="noin kuukausi"></now-message><now-message key="%d months" value="%dkk"></now-message><now-message key="about a year" value="noin vuosi"></now-message><now-message key="%d years" value="%dv"></now-message><now-message key="today" value="Tänään"></now-message><now-message key="{0} is typing" value="{0} kirjoittaa"></now-message><now-message key="{0} is viewing" value="{0} katselee"></now-message><now-message key="{0} has entered" value="{0} on syötetty"></now-message><now-message key="{0} has probably left" value="{0} on todennäköisesti poistunut"></now-message><now-message key="{0} has exited" value="{0} on poistunut"></now-message><now-message key="{0} is offline" value="{0} on offline-tilassa"></now-message><now-message key="entered" value="syötetty"></now-message><now-message key="online" value="Online-tila"></now-message><now-message key="viewing" value="näytetään"></now-message><now-message key="maybe offline" value="ehkä offline-tilassa"></now-message><now-message key="probably offline" value="todennäköisesti offline-tilassa"></now-message><now-message key="offline" value="Offline-tila"></now-message><now-message key="Activities: {0}" value="Aktiviteetit: {0}"></now-message><now-message key="The file {0} did not pass security scan and cannot be downloaded" value="Tiedosto <b> {0} </b> ei läpäissyt tietoturvatarkastusta, eikä sitä voi ladata"></now-message></html><!-- FILE ARCHIVED ON 10:28:36 Dec 03, 2022 AND RETRIEVED FROM THE INTERNET ARCHIVE ON 18:31:20 Mar 03, 2025. JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE. ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. SECTION 108(a)(3)). --> <!-- playback timings (ms): captures_list: 0.491 exclusion.robots: 0.036 exclusion.robots.policy: 0.026 esindex: 0.009 cdx.remote: 7.632 LoadShardBlock: 390.809 (3) PetaboxLoader3.datanode: 200.255 (4) PetaboxLoader3.resolve: 231.659 (2) load_resource: 89.915 -->